通道兼容说明(PCAN + slcan + Damiao 串口桥)
- Linux SocketCAN 直接使用网卡名:
can0、can1、slcan0。 - 串口类 USB-CAN 需先创建并拉起
slcan0:sudo slcand -o -c -s8 /dev/ttyUSB0 slcan0 && sudo ip link set slcan0 up。 - 仅 Damiao 可选串口桥链路:
--transport dm-serial --serial-port /dev/ttyACM0 --serial-baud 921600。 - Damiao 串口桥完整接口与命令模板见
motor_cli/README.zh-CN.md第3.6节(英文见motor_cli/README.md)。 - Linux SocketCAN 下
--channel不要带@bitrate(例如can0@1000000无效)。 - Windows(PCAN 后端)中,
can0/can1映射PCAN_USBBUS1/2,可选@bitrate后缀。
状态
WS API 主链路已实现。 内置网页上位机(tools/ws_test_client.html)仍在持续开发中。
传输
- 协议:WebSocket
- V1 载荷:JSON 文本帧
- 按
--dt-ms周期推送状态
统一模式映射(草案)
目标:应用层优先使用统一操作集;厂商专属操作保留可用,但不作为默认推荐路径。统一控制模式(应用层,固定基线)
若某厂商不支持这四种基线模式,网关统一返回
unsupported。
厂商映射表(统一模式 -> 厂商原生)
统一核心操作支持矩阵
模式参数差异说明
mit:统一字段一致,但各厂商内部缩放/编码不同,由网关适配层处理。 HighTorque 细节:当前协议路径会忽略kp/kd。pos_vel:仅对具备等价模式的厂商可用。vel:方向与量纲转换由厂商适配层内部处理。force_pos:Damiao 原生支持;HighTorque 映射到 pos+vel+tqe;其他厂商不支持。
WS capabilities 响应结构(草案)
建议:客户端连接后先调用 {"op":"capabilities"},根据返回能力矩阵自动适配 UI 与流程。
响应示例
多关节状态与鉴权说明
damiao_state_many: 通过dm-serial一次逻辑请求刷新所有已发现达妙关节。 状态快照包含motor_id、feedback_id与model,浏览器上位机可按关节合并整臂遥测, 而非把所有反馈都当作当前 target。状态读取在返回前以有界超时请求新鲜反馈。- Token 鉴权: 浏览器客户端可在 WebSocket URL query 中带
?motorbridge_ws_token=...传入MOTORBRIDGE_WS_TOKEN(header 鉴权与非回环 token 要求不变)。 - 单电机命令收敛: 单电机操作不再向多个已发现电机扩散,而是收敛到显式 target。
- RobStride 扫描: 逐个、精确、顺序地探测 host/feedback ID(Windows PCAN 安全)。 后续轮次会跳过已发现的 ID。
param_stream enabled=false: 关闭流不再打开或重开硬件会话。
构建
运行
- 默认推荐使用
127.0.0.1:9002(本机回环)。 - 若绑定到非回环地址(例如
0.0.0.0:9002),必须设置环境变量MOTORBRIDGE_WS_TOKEN。 - WS 客户端需在握手请求中带上
x-motorbridge-token: <token>或Authorization: Bearer <token>。
Windows 实验支持(PCAN-USB)
项目主线仍以 Linux 为主。Windows 支持为实验性能力,当前通过 PEAK PCAN 后端实现。- 安装 PEAK 驱动与 PCAN-Basic 运行时(
PCANBasic.dll)。 - Windows 启动网关时可使用
can0@1000000:
入站命令示例
出站帧
成功响应:说明
--vendor damiao|robstride|hexfellow|myactuator|hightorque用于设置会话默认厂商。set_target可在单个会话中动态切换厂商/transport/通道/串口/型号/ID。continuous=true会在每个 tick 持续发送该控制命令。stop用于清除持续控制。set_id按厂商处理:- Damiao:先写
MST_ID,再写ESC_ID。 - RobStride:使用
SET_DEVICE_ID更新设备 ID。
- Damiao:先写
- Damiao 专属操作:
write/get_register_*与dm-serialtransport。 - RobStride 专属操作:
robstride_ping、robstride_read_param、robstride_write_param。 - MyActuator 专属操作:
current、pos、version、mode-query。 - HighTorque 专属操作:
read。 - 后续 V2 可升级为二进制帧,同时保留同一语义。
简易上位机(快速联调)
- 文件:
integrations/ws_gateway/tools/ws_test_client.html - 四电机同步专用示例:
examples/web/ws_quad_sync_hmi.html - 直接浏览器打开(双击或
xdg-open),连接ws://127.0.0.1:9002。 - 当前状态:开发中(界面与交互会持续调整)。
- 若要稳定联调,建议优先使用 JSON 直连客户端(wscat/websocat/自定义客户端)。
- 动态设备工作流:
- 同一页面扫描 Damiao 与 RobStride
- 扫描结果进设备表(vendor + motor_id + feedback_id + model)
- 可选择任意扫描到的设备作为当前目标,执行使能/失能/速度/MIT
- 支持勾选批量操作:批量使能/停转/失能、批量 MIT 同步到角度
- 四电机同角度拖杆控制建议用本地静态服务打开:
python3 -m http.server 18080- 浏览器访问
http://127.0.0.1:18080/examples/web/ws_quad_sync_hmi.html