通道兼容说明(PCAN + slcan + CAN-FD + Damiao 串口桥)
- Linux SocketCAN 直接使用接口名:
can0、can1、slcan0。 - USB-串口类 CAN 适配器需先创建并拉起
slcan0:sudo slcand -o -c -s8 /dev/ttyUSB0 slcan0 && sudo ip link set slcan0 up。 - Hexfellow 示例必须使用 CAN-FD 链路(
Controller.from_socketcanfd(...)/ CLI--transport socketcanfd)。 - Damiao 可选串口桥链路(CLI):
--transport dm-serial --serial-port /dev/ttyACM0 --serial-baud 921600。 - Damiao 串口桥完整命令模板见
motor_cli/README.md(中文见motor_cli/README.zh-CN.md第3.6节)。 - Linux SocketCAN 下
--channel不要附加@bitrate(例如can0@1000000无效)。 - Windows(PCAN 后端)里,
can0/can1映射到PCAN_USBBUS1/2,支持可选@bitrate后缀。
English version: README.md
新手优先(最简单的 2 个示例)
如果你是通过 pip 安装后想快速上手,建议先看:../get_started/README.zh-CN.md(中文)../get_started/README.md(英文)
simple_01_motor_control.py:单电机最小模板(默认 Damiao,其他厂商以注释模板给出)。simple_02_quad_motor_control.py:四电机最小多厂商往复示例(2 Damiao + 1 MyActuator + 1 RobStride)。
- 先跑
simple_01_motor_control.py,验证 CAN 通道和单电机正常。 - 再跑
simple_02_quad_motor_control.py,验证多控制器/多厂商并行控制。
参数速查(以上两个最简单脚本)
simple_01_motor_control.py
--channel:CAN 接口名,如can0、can1、slcan0。--loop:控制循环次数。--dt-ms:控制周期(毫秒)。建议先用20;总线繁忙可调到30/50。--pos:目标角度(弧度)。--vlim:POS_VEL 模式速度上限。
simple_02_quad_motor_control.py
--channel:CAN 接口名。--loop:总循环次数。--dt-ms:控制周期(毫秒),同上建议。--pos:往复幅值(弧度),按+pos/-pos切换。--swing-loop:每 N 次循环切换一次方向。--rs-dir-sign:-1表示 RobStride 方向与其余电机相反;+1表示同向。--dm-vlim:Damiao 的 POS_VEL 速度上限。--my-vlim:MyActuator 的 POS_VEL 速度上限。--rs-kp/--rs-kd:RobStride 的 MIT 参数。
下一步看什么文档(推荐顺序)
- ../README.zh-CN.md 或 ../README.md 看 Python binding 的安装与 API 总览。
- /zh/source/rust-cli/overview 或 /source/rust-cli/overview 用于扫描设备、确认 ID、查 CLI 参数。
- /zh/source/examples/overview 或 /source/examples/overview 查看更广泛的示例目录(web/WS/其他集成)。
新手必看关键点
- 一个
Controller实例不能混用多厂商电机;多厂商请分多个 controller。 os error 105常见原因是发包过快,或有其它程序同时往 CAN 发包。- 大多数控制链路需要周期发送,单次发送通常不足以稳定保持。
- 先扫描并确认
motor-id/feedback-id,再运行示例。
WS 示例快速指南(quad_vendor_binding_ws_demo.py)
这是一个基于 Python binding 的四电机 WS 桥接后端(dm1/dm2/my/rs)+ 配套网页前端。
后端启动:
http://127.0.0.1:8080/quad_vendor_binding_ws_demo.html- WS 地址填:
ws://127.0.0.1:9010
文件列表
simple_01_motor_control.py:最简单单电机模板(默认 Damiao,含注释化厂商切换模板)simple_02_quad_motor_control.py:最简单四电机多厂商示例(固定周期 + 往复目标)python_wrapper_demo.py:最小 Damiao MIT 循环damiao_maintenance_demo.py:Damiao 维护流程(clear_error/set_zero_position/set_can_timeout_ms/request_feedback)damiao_register_rw_demo.py:Damiao 寄存器读写(f32+u32+ 可选store_parameters)damiao_dm_serial_demo.py:Damiao 串口桥传输示例(Controller.from_dm_serial)dm_serial_01_calibration_demo.py:SOP-01 串口桥维护/校准流程dm_serial_02_control_modes_demo.py:SOP-02 串口桥常规控制(4 模式,不做校准/配置写入)dm_serial_03_status_demo.py:SOP-03 串口桥状态监视dm_serial_04_enable_setzero_no_delay_demo.py:SOP-04 串口桥复现(set_zero后立刻控制)dm_serial_05_setzero_timing_ab_test.py:SOP-05 串口桥置零等待 A/B 测试dm_serial_06_recover_no_reboot_demo.py:SOP-06 串口桥软件恢复(不重启主机)dm_serial_07_enable_setzero_enable_rotate_demo.py:SOP-07 串口桥稳健顺序(disable -> set_zero -> enable -> control)dm_serial_08_negative_enable_setzero_guard_demo.py:SOP-08 串口桥负向测试(enable态set_zero应被核心拒绝)dm_serial_leader_monitor_demo.py:Damiao 串口桥 leader 监视(enable-all + 指定 ID 全状态流)robstride_wrapper_demo.py:RobStride ping / 读参 / mit / vel 示例quad_vendor_pos_binding_demo.py:Python binding 四电机同步位置示例(不经过 ws_gateway)quad_vendor_binding_ws_demo.py:Python binding WS 桥后端(用于网页控制)quad_vendor_binding_ws_demo.html:quad_vendor_binding_ws_demo.py的网页 UIhexfellow_canfd_demo.py:Hexfellow CAN-FD 示例(仅mit/pos-vel)full_modes_demo.py:Damiao 全模式示例pid_register_tune_demo.py:Damiao 参数调优示例scan_ids_demo.py:Damiao 快速扫描(历史辅助脚本)pos_ctrl_demo.py:Damiao 一次性位置指令multi_motor_ctrl_demo.py:Damiao 多电机控制(-id/-pos一一映射)mit_pos_switch_demo.py:两阶段模式切换示例(MIT 后切 POS_VEL)pos_repl_demo.py:Damiao 交互式位置控制
快速运行(按厂商/场景)
Damiao:enable then set_zero,expect guard reject):
dm-serial 时序说明(置零序列)
- 现象:执行
set_zero_position()后紧接着ensure_mode(...),可能触发register 10 not received超时。 - 根因模式:通常是 dm-serial 的时序窗口(桥接延迟 + 电机内部状态切换),不是普通控制模式逻辑错误。
- 核心守卫规则:
set_zero_position()仅在disable()之后允许。 - 核心稳定等待规则:
set_zero_position()后核心层固定等待20 ms(Python 不暴露该参数)。 - 推荐稳健序列:
disable(或disable_all)set_zero_positionenable(或enable_all)ensure_mode- 进入控制循环
- 一旦触发超时,先尝试软件恢复(
disable -> clear_error -> enable -> retry),再考虑重启主机/设备。
pos-vel(示例:电机 4 和 7,位置按顺序映射):
4 和 7,目标 -3):
Damiao 覆盖说明
Damiao 示例已经覆盖高层 SDK 的完整常用面:- 控制模式:
mit/pos-vel/vel/force-pos - 传输路径:
Controller(channel)+Controller.from_dm_serial(...) - 维护接口:
clear_error、set_zero_position、set_can_timeout_ms、request_feedback - 寄存器接口:
get/write f32、get/write u32、store_parameters - 扫描与调参流程
变更范围说明
- 当前 v0.4.1 示例已对齐 ABI 加锁、Python 关闭后调用守卫、
CoreController自动清理行为和 Damiao gateway 状态同步修复。 - 浏览器控制推荐使用随包提供的
ws_gateway;脚本化联调可直接使用 Python binding 示例。