ROS 2 与 CANopen 集成
目标:把 CANopen 驱动器接到 ros2_control,成为可被控制器管理的硬件接口
主仓库:https://github.com/ros-industrial/ros2_canopen
1. 在机器人软件栈中的位置
1 | MoveIt / 自定义上层 |
对比 EtherCAT 路径:
| CANopen | EtherCAT | |
|---|---|---|
| 传输 | CAN | 以太网 + ESC |
| 典型周期 | 数 ms ~ 数十 ms | 0.25~2 ms 常见 |
| 同步 | SYNC / 软件 | DC 硬件同步更强 |
| ROS 集成 | ros2_canopen | ethercat_driver_ros2 等 |
| 适用 | 外设、低轴数、成本敏感 | 多轴高动态本体 |
2. ros2_canopen 能做什么
(以 upstream README/包说明为准,克隆后请再核对版本)
- 管理 CANopen 总线与节点生命周期
- 通过配置(常 YAML + EDS/DCF)描述网络
- 提供与
ros2_control对接的硬件插件 - 支持驱动器(402)与通用设备代理模式
本地源码:../开源项目/ros2_canopen
3. 典型集成步骤(概念)
系统准备
- 启用
can0(ip link set can0 up type can bitrate 1000000) - 确认
candump can0能看到心跳
- 启用
准备设备描述
- 厂商 EDS
- 生成/填写 DCF 或 ros2_canopen 配置中的节点参数
编写 ros2_control URDF/xacro
<ros2_control>插件指向 CANopen 硬件接口- joint 与 Node-ID / 对象映射对应
Launch
- 启动 controller_manager + 硬件
- 加载
joint_state_broadcaster/joint_trajectory_controller等
使能验证
- 先只读状态
- 再小范围位置命令
- 确认 Fault / Following error 处理
4. 与 python-canopen 的分工
| 工具 | 用途 |
|---|---|
| python-canopen | 开发前期:探活、改 OD、验证 PDO 映射 |
| ros2_canopen | 运行期:纳入 ROS 2 控制循环 |
建议:先用 Python 把单轴 402 使能跑通,再迁到 ros2_control。
5. 常见坑
- 把 CANopen 当 EtherCAT 用:周期过短导致总线过载
- Node-ID/波特率与配置文件不一致
- 未处理 Heartbeat 丢失 → 控制器仍在发轨迹
- 单位换算(编码器计数 ↔ rad)错误
- 多节点 COB-ID 冲突
- 在 Operational 热改 PDO 映射
6. 相关阅读
- 协议基础:本目录 00~04
- 开源栈:
05-开源协议栈对比.md - EtherCAT 对照:
../../EtherCAT/协议/06-ROS2与EtherCAT集成.md
下一篇:07-组网调试与排障.md
正在加载留言…