- Core CLI:
motor_cli(Rust,基准实现) - Python CLI:
motorbridge-cli或python -m motorbridge.cli - Python SDK:
from motorbridge import Controller, Mode
通道说明(仅 SocketCAN)
- 本文只讨论 SocketCAN(
can0、can1)。 - Linux 下
--channel不要写@bitrate(例如can0@1000000无效)。 - 排障参考:
../../docs/zh/can_debugging.md。
0)前置
0.1 环境
0.2 通用参数(示例)
MODEL must be the physical RobStride model. Supported values are rs-00 through rs-06; parameter read/write selects the function-code table from this value, so do not use rs-00 as a generic default for every RS motor.
0.3 默认值与原厂协议关系(总览)
- 统一默认反馈 ID:
0xFD(运行时可回退尝试0xFF/0xFE)。 - 统一模式与原厂语义映射:
mit-> 原厂 MIT/阻抗控制帧(pos/vel/kp/kd/tau全有效)。pos-vel-> 原厂位置流程:run_mode=1,loc_ref(0x7016),limit_spd(0x7017)。vel-> 原厂速度流程:run_mode=2,spd_ref(0x700A)。zero/set-zero-> 原厂置零命令序列(需--zero-exp 1才真正下发)。
- 常用原厂参数:
0x7005run_mode0x7016loc_ref0x7017limit_spd0x700Aspd_ref0x7019mechPos0x701BmechVel
0.4 入口差异(你关心的“不同点”)
- 控制语义本身:Core CLI / Python CLI / Python SDK 一致。
- 型号语义:Core CLI / Python CLI / Python SDK 都需要传真实
rs-00到rs-06型号,尤其是参数读写场景。 - 主要差异只在入口:
- CLI:命令行参数入口(
--mode ...)。 - SDK:先
Controller(\"can0\"),再add_robstride_motor(motor_id, feedback_id, model)。
- CLI:命令行参数入口(
- 例外覆盖面:
- Python CLI 已支持 RobStride
id-set,但只修改device_id; feedback_id/host_id是上位机侧 ID,不是电机 ID。- ID 范围会显式校验:
device_id/motor_id/new_motor_id为1..255,feedback_id/host_id为0..255,避免底层u8/ctypes静默截断。
1)扫描(scan)
共同语义:- 在 ID 范围内探测在线设备。
- 有效:
start-id/end-id/feedback-ids/param-timeout-ms。
- 默认完整回退列表:
feedback-ids=0xFD,0xFF,0xFE,0x00,0xAA。 - 扫描输出中的
probe/device_id是电机 ID;feedback_id/host_id不是电机 ID。
- 先走 ping 探测;必要时走参数读取探测。
Core CLI
Python CLI
Python SDK
2)连通性(ping)
共同语义:- 验证某个
motor_id + feedback_id是否可通信。
- 有效:
motor-id/feedback-id。
feedback-id建议0xFD。
- 原厂 ping 帧。
Core CLI
Python CLI
Python SDK
3)使能(enable)/ 4)失能(disable)
共同语义:- 开启或关闭驱动输出。
- 有效:
mode=enable|disable。
- Python CLI 推荐
loop=1。
- 原厂使能/失能控制命令。
Core CLI
Python CLI
Python SDK
5)MIT(统一阻抗)
共同语义:- 五参数闭环控制:
pos/vel/kp/kd/tau。
- 有效:
pos、vel、kp、kd、tau、loop、dt-ms。 - 无效:无。
- 经验建议:
kp=3比kp=0.5更容易看见位置收敛效果。
- 直接映射到 RobStride 原厂 MIT 控制帧。
Core CLI
Python CLI
Python SDK
6)POS_VEL(统一位置速度)
共同语义:- 发“目标位置 + 限速”命令。
- 有效:
pos、vlim(可选kp/loc_kp)。 - 无效:
vel、kd、tau(会被忽略)。
- 建议先
loop=1做到位命令,再观察反馈。
run_mode=1,loc_ref(0x7016),limit_spd(0x7017)。
Core CLI
Python CLI
Python SDK
7)VEL(统一速度)
共同语义:- 速度命令闭环。
- 有效:
vel、loop、dt-ms。 - 无效:
pos、kp、kd、tau。
- 示例:
vel=0.3。
run_mode=2,spd_ref(0x700A)。
Core CLI
Python CLI
Python SDK
8)读参数(read-param)
共同语义:- 读取原厂参数寄存器。
- 有效:
param-id、type、timeout-ms。
- 位置常读:
0x7019 (mechPos),类型f32。
- 原厂 29-bit 扩展帧参数读取通道。
Core CLI
Python CLI
Python SDK
9)写参数(write-param)
共同语义:- 写入原厂参数,可回读验证。
- 有效:
param-id、value、type、verify。
- 示例:
0x700A写f32=0.3。
- 原厂 29-bit 扩展帧参数写入通道。
Core CLI
Python CLI
Python SDK
10)改 ID(set-motor-id)
共同语义:- 修改设备 ID,并建议持久化。
- Core CLI:
--set-motor-id、--store。 - Python CLI:
id-set --vendor robstride --new-motor-id ... --store ... --verify ...。 - Python SDK:
robstride_set_device_id()+store_parameters()。
- 示例改到
126。
- 原厂 set-id 命令流程。
Core CLI
Python CLI
Python SDK
11)写零点(zero / set-zero)
共同语义:- 设置当前机械位置为零点;可选择持久化。
- 有效:
mode=zero|set-zero、zero-exp、store。 - 关键:
--zero-exp 1必须开启,否则不发送实验序列。 - 当前 RobStride 置零流程会内部写
zero_sta(0x7029)=1。
store=1(建议)。
disable -> set_zero_position -> write zero_sta(0x7029)=1 -> (optional) store_parameters。
Core CLI
Python CLI
Python SDK
12)最终口径(给查证者)
- 三通道在 RobStride 上的控制语义已对齐;主要差异在“入口形式”和少量命令覆盖面。
- Python CLI 已支持 RobStride
scan / ping(run) / read-param / write-param / save / id-set。 read-param/write-param既可使用专用子命令,也可使用 Rust CLI 风格的motorbridge-cli run --mode read-param/write-param。- 参数“有效/无效”请以本手册各节为准,尤其:
mit:pos/vel/kp/kd/tau全有效。pos-vel:仅pos/vlim主有效;vel/kd/tau无效。vel:仅vel主有效。
- 若要做最严格复现实验,优先以 Core CLI 作为基准,再对照 Python CLI/SDK。