项目背景

外骨骼机器人在康复医疗、工业辅助和军事领域都有广泛的应用前景。本项目实现了一套完整的脚踝外骨骼机器人控制系统,已于近期完成 ROS1 → ROS2 平台迁移硬件架构重设计

v2.0 重大升级:从 ROS1 Melodic (Ubuntu 18.04) 全面迁移至 ROS2 Humble (Ubuntu 22.04),CAN 架构重写,IMU 协议升级,控制器能力大幅增强。

技术架构

整个系统运行在 Ubuntu 22.04 + ROS2 Humble 环境下,采用 colcon 构建系统。

C++ Python CAN总线 Modbus ROS2

can_ankle — 5 模式自适应步态控制器

核心控制包已从简单的力矩/速度控制升级为完整的5 模式状态机自适应步态控制器

状态机流程:

1
STAND_MODE → TORQUE_MODE → PRE_TORQUE_MODE → TORQUE_DRIVE_MODE → VELOCITY_MODE → STAND_MODE

关键特性:

  • 自适应步速估计:根据支撑相时间通过指数模型 pace = -ln((t2-c1)/a1) / b1 实时计算步速
  • PID 自适应调参:Kp/Ki/Kd 根据步速分 5 档动态调整(Kp 范围 20-60)
  • 坡度辅助力矩:利用 IMU 四元数 z 分量估计地面坡度,计算 assist_torque = 8/π * atan(slope/2)
  • 浮动补偿:基于理论/实际摆动时间差动态调整
  • 两种控制模式:Mode 1——余弦形力矩曲线 + 自适应上升/下降时间;Mode 2——固定 0.18s/0.21s 曲线
  • 支撑相位置补偿:交替记录位置,回位校正

CAN 总线架构 — 双协议重设计

从旧版直接 VCI_USBCAN2 调用升级为 Python CAN Bridge + 内嵌 CAN 子进程 双层架构。

  • 硬件:CANalyst-II (USB 04d8:0053, 1 Mbps),替代旧的 USBCAN2
  • 电机:CANopen Node 83,SDO COB-ID 0x653
  • Layer 1can_bridge.py — python-can + canalystii 接口,发布 /can_rx / 订阅 /can_tx
  • Layer 2:C++ 内嵌 CAN 子进程,通过 posix_spawn() + 双向管道通信,避免 DDS 中断

IMU 驱动已完成重大协议升级:

对比项 旧版 新版
帧头 FC 0x5A 0xA5
帧长 不定长 82 字节 (2H+2L+76B+2T)
波特率 921600 115200
固件 旧版 v1.6.8+ (2025-07-17)

发布 7 个 ROS2 Topic(原来 ~3 个):

  • /imu — sensor_msgs/Imu(Eigen 四元数坐标旋转)
  • /euler_angles — Vector3 (roll/pitch/yaw)
  • /mag_pose_2d — Pose2D 磁北极航向
  • /magnetic — Vector3 磁力计
  • /gps/fix — NavSatFix GPS
  • /system_speed — Twist 机体速度
  • /NED_odometry — Odometry NED 位姿估计

新增 TF 广播节点 (imu_tf.cpp):world → gyro_link 变换 + 可配置位置偏移。

力传感器 — Modbus RTU 重构

Modbus CRC16 19200bps

从旧版 ASCII 文本协议彻底重构为工业 Modbus RTU 协议

  • 功能码 0x03(读保持寄存器),寄存器 0x0FA0/0x0FA1
  • 从站 ID 1,CRC16 Modbus 校验
  • 可配置比例系数(默认 0.01),20Hz 循环
  • 支持调试模式(TX/RX hex dump)

新增节点

节点 功能
serial_sendCommand_node 足底开关串口读取 + 步态相位时序发布(6 个 Topic:单支撑/双支撑/摆动相等)
serial_encoder_node Modbus RTU 编码器读取
storeTopicMSG_node 步态相位时间数据记录到文件
storeVelMSG_node 编码器角度/力矩数据记录到文件
can_test_node CAN 通信正弦速度测试
imu_tf IMU 坐标系 TF 广播

安全保障

  • 编码器限位:±45 度
  • 力传感器过载:300N
  • 站立超时:支撑相 > 5s 触发
  • 指令序列验证:严格 0x41→0x42→0x43→0x44 次序,违规自动回零
  • cmd_vel 超时 500ms 自动停机

开发心得

这个项目是我深入理解机器人控制系统的入门之作。从 ROS1 到 ROS2 的迁移让我深刻体会到 DDS 中间件的优势与挑战;CAN 双协议架构的设计教会我处理实时通信的可靠性;5 模式状态机的调参过程则让我对控制理论有了切身的理解。

机器人 控制算法 ROS2