通道兼容说明(PCAN + slcan + CAN-FD + Damiao 串口桥)
- Linux SocketCAN 直接使用网卡名:
can0、can1、slcan0。 - 串口类 USB-CAN 需先创建并拉起
slcan0:sudo slcand -o -c -s8 /dev/ttyUSB0 slcan0 && sudo ip link set slcan0 up。 - CAN-FD 链路可通过 CLI(
--transport socketcanfd)和 Python SDK(Controller.from_socketcanfd(...))使用,Hexfellow 必须走该链路。 - 仅 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后缀。
motor_abi 的 Python 绑定层。
English version: README.md
README 导航(先看哪个)
如果你是第一次接触这个目录,建议按下面顺序阅读:- 本文档 README.zh-CN.md 作用:Python binding 总览(安装、API 范围、常用命令)。
- examples/READMEzh_cn.md(中文) / examples/README.md(英文)
作用:所有 Python 示例的入口说明(从最简单到高级示例)。
2.5.
../motorbridge-docs作用:正式 Mintlify 文档站入口(教程 + API 手册风格)。 - get_started/README.zh-CN.md / get_started/README.md 作用:pip 安装用户的快速上手路径(安装 -> 扫描 -> 运行)。
- DAMIAO_PYTHON_REFERENCE.zh-CN.md 作用:Damiao Python 接口参考,偏“按接口查参数”。
- DAMIAO_binding.md 作用:Damiao 绑定实现说明,偏“原理/实现细节”。
- README.md 作用:英文版总览(给英文协作成员)。
- 如果你主要想“马上跑起来”,优先看
examples/READMEzh_cn.md的“新手优先(最简单的 2 个示例)”。 - 如果你主要想查 CLI 参数,去
../../motor_cli/README.zh-CN.md。
范围
- 当前目标包版本:
0.4.1。 - 版本可通过
motorbridge.__version__、motorbridge.get_version()和motorbridge-cli -v获取。 - ABI 元数据 helper:
motorbridge.abi_version()返回当前加载的 ABI 库版本。motorbridge.abi_capabilities()返回当前加载 ABI 的能力 JSON,并转换为 Pythondict。
0.4.1新增 ABI 版本/能力发现,并通过bindings/api_surface.json跟踪 Python/C++ binding parity。- 高层 API:
Controller、Motor、Mode - CLI:
motorbridge-cli - 网关启动命令(pip 安装后进入 PATH):
motorbridge-gateway -- --bind 127.0.0.1:9002 ...
- 安全说明:
- 本地使用建议保持回环地址
127.0.0.1。 - 若绑定到非回环地址(
0.0.0.0或网卡 IP),启动前必须设置MOTORBRIDGE_WS_TOKEN。 - 客户端需在握手中携带 token:
x-motorbridge-token或Authorization: Bearer ...。
- 本地使用建议保持回环地址
- macOS 运行说明(仅当出现动态库加载错误时需要):
- 通用方式获取网关路径(不写死本机路径):
GW="$(python3 -c "import motorbridge, pathlib; print(pathlib.Path(motorbridge.__file__).resolve().parent/'bin'/'ws_gateway')")" - 使用包内
lib目录设置动态库路径:PKG_DIR="$(python3 -c "import motorbridge, pathlib; print(pathlib.Path(motorbridge.__file__).resolve().parent)")"DYLD_LIBRARY_PATH="$PKG_DIR/lib:${DYLD_LIBRARY_PATH:-}" "$GW" --bind 127.0.0.1:9002 --vendor damiao --channel can0 --model auto --motor-id 0x01 --feedback-id 0x11 --dt-ms 20
- 通用方式获取网关路径(不写死本机路径):
- Controller 构造入口:
Controller(channel=\"can0\")(SocketCAN/PCAN 路径)Controller.from_socketcanfd(channel=\"can0\")(CAN-FD 路径,Hexfellow 必须使用)Controller.from_dm_serial(serial_port=\"/dev/ttyACM0\", baud=921600)(仅 Damiao 串口桥)
- 厂商入口:
- Damiao:
add_damiao_motor(...) - Hexfellow:
add_hexfellow_motor(...) - MyActuator:
add_myactuator_motor(...) - RobStride:
add_robstride_motor(...) - HighTorque:
add_hightorque_motor(...)
- Damiao:
- 状态查询统一范式:
- 推荐统一使用
request_feedback() -> poll_feedback_once() -> get_state()。 - RobStride 路径在 ABI 内部已做兼容处理,可按同一范式调用(
robstride_ping()仍保留可用)。
- 推荐统一使用
统一模式映射摘要(顶层协议 -> 厂商原生)
| 顶层统一模式 | Damiao | RobStride | Hexfellow | MyActuator | HighTorque |
|---|---|---|---|---|---|
Mode.MIT | 原生 MIT | 原生 MIT | 原生 MIT(模式 5) | 不支持 | 映射到原生 pos+vel+tqe |
Mode.POS_VEL | 原生 POS_VEL | 映射到原生 Position(run_mode=1 + limit_spd(0x7017) + loc_ref(0x7016)) | 原生 POS_VEL(模式 1) | Position 设定流程 | 映射到原生 pos+vel+tqe |
Mode.VEL | 原生 VEL | 原生 Velocity | 不支持 | 原生 Velocity 设定流程 | 原生速度命令 |
Mode.FORCE_POS | 原生 FORCE_POS | 不支持 | 不支持 | 不支持 | 映射到原生 pos+vel+tqe |
- RobStride 统一高层当前覆盖
MIT/POS_VEL/VEL。 TORQUE/CURRENT对 RobStride 仍为参数级能力(robstride_write_param_*),尚未提供独立统一模式。- RobStride 支持
rs-00到rs-06;调用add_robstride_motor(...)时请传真实型号,因为参数读写使用第 4 章通用运行参数表。 - RobStride 建议默认使用
feedback-id=0xFD;扫描默认尝试0xFD,0xFF,0xFE,0x00,0xAA。 - RobStride 的
feedback_id/host_id不是电机device_id;扫描命中的电机 ID 看probe/device_id。
快速开始
CLI 示例
Damiao:rs-00 到 rs-06)。系列内控制方法一致;v0.4.1 参数读写继续使用第 4 章通用运行表。
RobStride MIT 与 POS_VEL 快速验证:
Windows 实验支持(PCAN-USB)
项目主线仍以 Linux 为主。Windows 支持为实验性能力,当前通过 PEAK PCAN 后端实现。- 安装 PEAK 驱动与 PCAN-Basic 运行时(
PCANBasic.dll)。 - Windows 下建议使用
can0@1000000(映射到PCAN_USBBUS1,1Mbps)。
示例程序
- Damiao wrapper 示例:
examples/python_wrapper_demo.py - Hexfellow CAN-FD 示例:
examples/hexfellow_canfd_demo.py(仅 MIT / POS_VEL) - Damiao 维护接口示例:
examples/damiao_maintenance_demo.py - Damiao 寄存器读写示例:
examples/damiao_register_rw_demo.py - Damiao 串口桥链路示例:
examples/damiao_dm_serial_demo.py - RobStride wrapper 示例:
examples/robstride_wrapper_demo.py - Damiao 全模式示例:
examples/full_modes_demo.py - Damiao 扫描 / 调参 / 位置辅助:
examples/scan_ids_demo.pyexamples/pid_register_tune_demo.pyexamples/pos_ctrl_demo.pyexamples/pos_repl_demo.py
Damiao 全覆盖状态
Python 示例中 Damiao 用法已覆盖到位:- 控制模式:
mit/pos-vel/vel/force-pos - 传输链路:
Controller(channel)与Controller.from_dm_serial(...) - 维护接口:
clear_error、set_zero_position、set_can_timeout_ms、request_feedback- Damiao 置零规范:先
disable(),再set_zero_position() - Python 不暴露置零等待参数;核心层内置固定
20ms稳定等待
- Damiao 置零规范:先
- 寄存器接口:
get/write f32、get/write u32、store_parameters
端到端示例命令
说明
id-dump仍是 Damiao 工作流;id-set支持 Damiao 和 RobStride;scan支持damiao|hexfellow|myactuator|robstride|hightorque|all。- RobStride
id-set中,--new-motor-id修改device_id;--feedback-id仍是上位机侧 host_id。 - RobStride
motor_id/device_id会校验为1..255;feedback_id/host_id会校验为0..255,避免ctypes静默截断。 - RobStride 扫描会通过指定 host_id 的 ABI helper 精确探测每个
--feedback-ids;非法 host_id 会直接报错,不会静默回退。 - MyActuator 在 ABI wrapper 中不支持
Mode.MIT与send_force_pos。 - Hexfellow 在 ABI wrapper 中支持
MIT与POS_VEL,VEL/FORCE_POS会返回不支持。 - Damiao 的完整调参参考仍保留在:
PyPI 自动发布(GitHub Actions)
仓库已新增.github/workflows/pypi-publish.yml。
- Tag 自动发布策略:
- 推送
vX.Y.Z-> 同一套产物同时发布到 TestPyPI 和 PyPI
- 推送
- 手动发布:在 GitHub Actions 运行
Python Publish,可选:testpypi(仅发布 TestPyPI)pypi(仅发布 PyPI)
一次性配置(token 模式)
- 在 PyPI 创建 API token,并配置仓库 secret:
PYPI_API_TOKEN。 - 在 TestPyPI 创建 API token,并配置仓库 secret:
TEST_PYPI_API_TOKEN。 - 每次上传必须使用全新版本号(例如
0.1.6、0.1.7)。