Skip to main content
本文件只聚焦 Damiao:把 Python 绑定里 Damiao 常用接口、四种控制模式、参数配置和完整执行顺序讲清楚。
English version: README.md

1) 通道与运行前提

  1. Linux SocketCAN 直接用 can0/can1/slcan0
  2. Linux 下 --channel 不要写 @bitrate(例如 can0@1000000 无效)。
  3. Windows PCAN 后端中,can0/can1 映射 PCAN_USBBUS1/2(可带 @bitrate)。
  4. 运行示例前建议设置:

2) Damiao 标准执行流程(必须理解)

  1. 创建控制器并绑定电机(Controller + add_damiao_motor)。
  2. 上电使能(ctrl.enable_all())。
  3. 切换或确认控制模式(motor.ensure_mode(...))。
  4. 按模式发送命令(send_mit/send_pos_vel/send_vel/send_force_pos)。
  5. 按需读反馈(request_feedback/get_state 或脚本中的打印)。
  6. 测试结束失能(motor.disable()ctrl.disable_all())。

3) Damiao 接口总览(Python 绑定)

3.1 Controller 侧

  • Controller(channel="can0")
  • Controller.from_dm_serial(serial_port="/dev/ttyACM0", baud=921600)
  • add_damiao_motor(motor_id, feedback_id, model)
  • enable_all()
  • disable_all()
  • poll_feedback_once()
  • shutdown()
  • close_bus()

3.2 Motor 侧

  • 基础控制:
    • enable()
    • disable()
    • ensure_mode(mode, timeout_ms)
    • send_mit(pos, vel, kp, kd, tau)
    • send_pos_vel(pos, vlim)
    • send_vel(vel)
    • send_force_pos(pos, vlim, ratio)
  • 反馈与维护:
    • request_feedback()
    • get_state()
    • clear_error()
    • set_zero_position()
    • set_can_timeout_ms(timeout_ms)
    • store_parameters()
  • 寄存器读写:
    • get_register_f32(rid, timeout_ms)
    • write_register_f32(rid, value)
    • get_register_u32(rid, timeout_ms)
    • write_register_u32(rid, value)

4) 四种模式怎么用(方法 + 参数)

4.1 MIT(全参数混合控制)

方法:send_mit(pos, vel, kp, kd, tau) 参数:
  • pos:目标位置,单位 rad
  • vel:目标速度,单位 rad/s
  • kp:位置刚度(无量纲)
  • kd:速度阻尼(无量纲)
  • tau:前馈力矩,单位 Nm
常用起步参数:kp=2~10, kd=0.05~0.5, tau=0.1~1.0

4.2 POS_VEL(位置 + 速度上限)

方法:send_pos_vel(pos, vlim) 参数:
  • pos:目标位置,单位 rad
  • vlim:速度上限,单位 rad/s
常用场景:先安全到位,再切其它模式。

4.3 VEL(纯速度)

方法:send_vel(vel) 参数:
  • vel:目标速度,单位 rad/s
常用场景:连续旋转、速度响应测试。

4.4 FORCE_POS(位置 + 力矩限幅)

方法:send_force_pos(pos, vlim, ratio) 参数:
  • pos:目标位置,单位 rad
  • vlim:速度上限,单位 rad/s
  • ratio:力矩/电流限幅比例,范围 0~1(不是精确恒扭矩)
常用场景:需要到位,但不想“死顶”太狠。

5) Damiao 示例脚本与用途

  • python_wrapper_demo.py:MIT 最小闭环
  • full_modes_demo.py:四模式统一入口
  • scan_ids_demo.py:Damiao 扫描
  • pos_ctrl_demo.py:单次位置目标
  • multi_motor_ctrl_demo.py:多电机控制(-id/-pos 一一对应)+ SDK 每步耗时日志
  • mit_pos_switch_demo.py:多电机模式切换测试(MIT -> POS_VEL)
  • pos_repl_demo.py:交互式位置控制
  • pid_register_tune_demo.py:寄存器调参
  • damiao_maintenance_demo.py:维护接口(清错、置零、超时、反馈)
  • damiao_register_rw_demo.py:寄存器 f32/u32 读写 + 存参
  • damiao_dm_serial_demo.py:Damiao 串口桥传输链路
  • dm_serial_mode_switch_200_demo.pydm-serial 连续切换四模式(每模式可设循环次数,默认 200)
  • dm_serial_status_like_cli_demo.pydm-serial 查询当前模式 + 关键寄存器 + 实时状态(类 CLI 输出)
  • dm_serial_leader_monitor_demo.pydm-serial leader 监控(指定 ID 全状态上报 + 启动时全体使能)

6) 按顺序实操命令(推荐)

6.1 扫描

6.2 MIT(最小验证)

6.3 四模式统一入口

6.4 维护接口

6.5 寄存器读写

6.6 串口桥链路(Damiao 专用)

6.7 多电机位置控制 + 每步 SDK 计时(4号与7号示例)

说明:
  • -id 后可传多个电机 ID(空格或逗号都可)。
  • -pos-id 顺序一一对应。
  • --trace-sdk 1:打印每次 SDK 调用耗时(add/enable/ensure/send/get_state/close)。
  • --timing-log 1:打印汇总统计(平均、最小、最大、总耗时)。

6.8 模式切换测试(MIT 与 POS_VEL,4号与7号示例)

说明:
  • --mit-hold-loops 0 表示仅验证 MIT 切换,不发 MIT 控制循环。
  • --pos-hold-loops 50 表示在 POS_VEL 下执行 50 个循环。

6.9 dm-serial 专用:四模式切换证明 + 状态查询

7) 结束动作(务必执行)

推荐在结束前明确失能:
这样可以避免电机在使能状态下持续输出。