ROS 2 与 CANopen 集成

ROS 2 与 CANopen 集成

目标:把 CANopen 驱动器接到 ros2_control,成为可被控制器管理的硬件接口
主仓库:https://github.com/ros-industrial/ros2_canopen


1. 在机器人软件栈中的位置

1
2
3
4
5
6
7
8
9
10
11
MoveIt / 自定义上层

ros2_control Controller Manager

Hardware Interface(SystemInterface 等)

CANopen Master(如 lely / 栈封装)

SocketCAN(can0)

驱动器(CiA 402)

对比 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. 典型集成步骤(概念)

  1. 系统准备

    • 启用 can0ip link set can0 up type can bitrate 1000000
    • 确认 candump can0 能看到心跳
  2. 准备设备描述

    • 厂商 EDS
    • 生成/填写 DCF 或 ros2_canopen 配置中的节点参数
  3. 编写 ros2_control URDF/xacro

    • <ros2_control> 插件指向 CANopen 硬件接口
    • joint 与 Node-ID / 对象映射对应
  4. Launch

    • 启动 controller_manager + 硬件
    • 加载 joint_state_broadcaster / joint_trajectory_controller
  5. 使能验证

    • 先只读状态
    • 再小范围位置命令
    • 确认 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

文章互动

阅读 --

留言

0 条留言

正在加载留言…