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
  • Damiao 串口桥完整接口与命令模板见 motor_cli/README.zh-CN.md3.6 节(英文见 motor_cli/README.md)。
  • Linux SocketCAN 下 --channel 不要带 @bitrate(例如 can0@1000000 无效)。
  • Windows(PCAN 后端)中,can0/can1 映射 PCAN_USBBUS1/2,可选 @bitrate 后缀。
高性能 Rust WebSocket 网关(V1:JSON over WS)。

状态

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_idfeedback_idmodel,浏览器上位机可按关节合并整臂遥测, 而非把所有反馈都当作当前 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
Windows 电机验证命令:

入站命令示例

出站帧

成功响应:
失败响应:
状态流:

说明

  • --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 专属操作:write/get_register_*dm-serial transport。
  • RobStride 专属操作:robstride_pingrobstride_read_paramrobstride_write_param
  • MyActuator 专属操作:currentposversionmode-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