Skip to main content

通道兼容说明(PCAN + slcan + Damiao 串口桥)

  • Linux SocketCAN 直接使用网卡名:can0can1slcan0
  • 串口类 USB-CAN 需先创建并拉起 slcan0sudo slcand -o -c -s8 /dev/ttyUSB0 slcan0 && sudo ip link set slcan0 up
  • 仅 Damiao 可选串口桥链路:--transport dm-serial --serial-port /dev/ttyACM0 --serial-baud 921600
  • Linux SocketCAN 下 --channel 不要带 @bitrate(例如 can0@1000000 无效)。
  • Windows(PCAN 后端)中,can0/can1 映射 PCAN_USBBUS1/2,可选 @bitrate 后缀。
本页是 motorbridge 当前 RobStride 控制、参数读写、以及能力边界的完整实用文档。
English version: ROBSTRIDE_API.md

0)运行方式速查(不必每次 cargo run

motor_cli 有三种常见运行方式:
  1. Release 二进制(推荐现场)
  1. 源码方式(开发调试)
  1. Python 包安装后(不编译 Rust)
说明:
  • 本文命令默认写成 motor_cli ... 形式;可等价替换为上面三种入口之一。
  • 如果你已 pip install motorbridge,优先用 motorbridge-cli 即可,不需要每次 cargo run
  • 使用源码目录中的 Python CLI 时,建议加: LD_LIBRARY_PATH=$PWD/target/release:${LD_LIBRARY_PATH}(确保加载当前仓库 ABI 动态库)。

1)通用设备参数

当前支持的 RobStride 型号字符串为:rs-00rs-01rs-02rs-03rs-04rs-05rs-06 这些型号的高层控制调用形态保持一致。运行参数 read-param / write-param 使用协议第 4 章通用表(0x7005..0x702E);--model 仍请填写真实 RS 型号,用于限值和日志。 运行参数表对齐 RobStride 手册第 4 章“可读写单个参数列表”。

2)motor_cli 的 RobStride 模式

当前支持:
  • ping
  • scan
  • enable
  • disable
  • mit
  • pos-vel
  • vel
  • read-param
  • write-param
  • save
大一统“四协议”映射状态:

2.1 Ping

2.2 MIT

MIT 映射说明(统一接口 -> RobStride 原生):
  • 有效参数:--pos--vel--kp--kd--tau(五个都生效)。
  • 单位约定:
    • --posrad
    • --velrad/s
    • --tauNm
    • --kp--kd:MIT 闭环增益

2.3 速度模式

2.4 位置模式(统一 pos-vel 映射)

说明:
  • 统一 pos-vel 已映射为 RobStride 原生 Position 链路:
    • run_mode=1(Position)
    • 0x7017limit_spd)为 --vlim
    • 可选写 0x701Eloc_kp)来自 --loc-kp--kp
    • 0x7016loc_ref)为 --pos
  • --vel--kd--tau 不属于原生 Position 模式,在 --mode pos-vel 下会被忽略。

2.5 两种使用方式(统一封装 / 原生参数)

  • 统一封装方式(推荐上层业务使用):
    • --mode mit
    • --mode pos-vel(已映射到原生 Position)
    • --mode vel
  • 原生方式(调试/协议级验证):
    • --mode read-param --param-id ...
    • --mode write-param --param-id ... --param-value ... --store 1
    • --mode save 可直接执行保存参数动作
    • 典型链路:先写 run_mode(0x7005),再写对应目标参数(如 loc_ref/spd_ref

3)扫描与改 ID

3.1 扫描

联调建议(更快):
说明:
  • 第一阶段:ping + 参数查询探测
  • probe / device_id 是电机 ID。
  • feedback_id / host_id(例如 0xFD)是上位机侧 ID,不是电机 ID。
  • --feedback-ids 是扫描时尝试的 host_id 逗号列表。
  • RobStride motor_id / device_id 必须是 1..255feedback_id / host_id 必须是 0..255
  • 扫描时会精确尝试 --feedback-ids 中列出的 host_id;非法 host_id 会直接报错,不再静默回退。
  • 若全范围无 ping 命中:自动回退到盲探脉冲(观察电机是否转动)。
    • --manual-vel(默认 0.2
    • --manual-ms(默认 200
    • --manual-gap-ms(默认 200

3.2 改设备 ID

Python CLI 等价命令:
与上位机抓包对齐的报文说明:
  • 改 ID 使用 comm_type=7
  • 该操作只修改 RobStride device_id,不会修改 feedback_id / host_id
  • --set-motor-id / --new-motor-id 会校验为 1..255;超范围值会直接报错,不会被截断。
  • 该路径下扩展 ID 组成为:
    • 0x07 [new_id] [host_id] [old_id]
    • 例如(old_id=1new_id=11host_id=0xFD):0x070BFD01
  • 数据区优先使用最近一次 ping 的 UUID token(若拿不到 token 则回退为全 0)。

4)常用参数 ID

5)参数读写

参数访问是使用第 4 章通用运行参数的。0x7000 段的常用运行控制参数由统一控制路径共用;RobStride 手册里的功能码参数,尤其是 0x20000x3000 段,同一个 ID 在不同 RS 型号上可能对应不同名称、数据类型或范围。 读参数:
写参数:
Python binding 示例:

6)协议通信类型覆盖情况

当前 motorbridge 对 RobStride 协议通信类型的覆盖:
  • 已直接使用:0(GET_DEVICE_ID)1(OPERATION_CONTROL)3(ENABLE)4(DISABLE)6(SET_ZERO_POSITION)7(SET_DEVICE_ID)17(READ_PARAMETER)18(WRITE_PARAMETER)22(SAVE_PARAMETERS)
  • 已接收解析:2(OPERATION_STATUS)21(FAULT_REPORT)
  • 协议常量存在但尚未形成高层 API:23(SET_BAUDRATE)24(ACTIVE_REPORT)25(SET_PROTOCOL)

7)完善空间(差距总结)

当前状态:核心闭环已可用(scan/ping/mit/pos-vel/vel/读写参数/改ID/设零/存参)。 当前已知问题(实测):
  1. pos-vel 参数生效性在部分固件上不稳定:
    • --vlim0x7017)和 --kp/loc_kp0x701E)可能回读正常,但体感效果弱或不明显。
    • 当前 MIT 路径相对更稳定。
  2. RobStride 置零已保持统一上层命令,并在内部写 zero_sta(0x7029)=1
    • 正常使用 zero / set_zero_position()
    • 如果需要掉电后仍保持 -pi..pi 上电区间,请配合 store_parameters / --store 1
可优先增强:
  1. CLI 增加更语义化的 current/torque 快捷命令(当前可用写参数实现,但不直观)。
  2. CLI 扫描支持多 feedback-host 候选。
  3. 暴露 SET_BAUDRATE / ACTIVE_REPORT / SET_PROTOCOL 的高层 API。
  4. FAULT_REPORT 独立结构化解码输出。

8)WS 网关 JSON 示例

9)安全建议

  • 先小速度、小循环验证,再逐步增大。
  • 压测前先确认 CAN 接线、终端电阻和接口状态。
  • 长时间控制前先做 ping/读参验证。
  • 始终保留急停路径。