Drobotics logo DROBOTICSTechnical Library

Rover Guide

ROS2 底盘控制节点 | Wheeltec Driver 完整链路验证 + 阿克曼转向测试

All Rover

ROS2 底盘控制节点

Wheeltec Driver · C30D 控制器 · /cmd_vel 完整链路验证 + 阿克曼转向测试

ROS2 功能包 Python 节点 colcon 编译 /cmd_vel 话题 阿克曼底盘响应 转向控制验证
创建 ROS2 功能包
mkdir -p ~/ugv_ws/src cd ~/ugv_ws/src ros2 pkg create --build-type ament_python wheeltec_driver --dependencies rclpy geometry_msgs
通过 功能包 wheeltec_driver 已创建,目录结构生成完毕。
编写底盘控制节点
cd ~/ugv_ws/src/wheeltec_driver/wheeltec_driver nano cmd_vel_driver.py
节点功能:订阅 /cmd_vel 话题,接收 geometry_msgs/msg/Twist 消息,将速度控制指令通过串口发送至 C30D 控制器。
chmod +x cmd_vel_driver.py
配置 console_scripts 入口
nano ~/ugv_ws/src/wheeltec_driver/setup.py
entry_points={ 'console_scripts': [ 'cmd_vel_driver = wheeltec_driver.cmd_vel_driver:main', ], },
其中 cmd_vel_driver 是终端执行名称,wheeltec_driver.cmd_vel_driver:main 指向 cmd_vel_driver.py 中的 main() 函数。
编译 ROS2 工作空间
cd ~/ugv_ws colcon build
Starting >>> wheeltec_driver
Finished <<< wheeltec_driver [6.88s]
Summary: 1 package finished [8.49s]
加载环境变量
source ~/ugv_ws/install/setup.bash ros2 pkg list | grep wheeltec
wheeltec_driver
通过 ROS2 已识别 wheeltec_driver 功能包。
通过 验证节点是否注册成功
ros2 pkg executables wheeltec_driver
wheeltec_driver cmd_vel_driver
通过 cmd_vel_driver 节点已成功注册到 ROS2 系统。
启动底盘控制节点
ros2 run wheeltec_driver cmd_vel_driver
节点启动后,等待接收 /cmd_vel 控制指令。
发送 /cmd_vel 控制指令测试
打开新终端,加载环境变量:
source ~/ugv_ws/install/setup.bash
前进 (0.2 m/s)
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist \ "{linear: {x: 0.2}, angular: {z: 0.0}}"
通过 底盘电机正常响应,ROS2 控制链路已打通。
停止运动
ros2 topic pub --once /cmd_vel geometry_msgs/msg/Twist \ "{linear: {x: 0.0}, angular: {z: 0.0}}"
或在运行节点的终端中按 Ctrl + C 停止节点。
阿克曼转向控制测试
ROS2 标准 Twist 消息中:
linear.x → 后轮驱动速度
angular.z → 前轮转向角度
对于阿克曼底盘:后轮负责驱动,前轮负责转向,转向舵机通过连杆机构控制前轮偏转角度。
左转测试
ros2 topic pub --once /cmd_vel geometry_msgs/msg/Twist \ "{linear: {x: 0.2}, angular: {z: 0.5}}"
控制效果:后轮驱动电机开始旋转 → 前轮转向舵机向左偏转 → 底盘进入左转运动状态

ROS2日志输出:cmd_vel: vx=200 mm/s, wz=500
vx = 200 mm/s (前进速度 0.2 m/s)
wz = 500 (转向角速度 0.5 rad/s)
右转测试
ros2 topic pub --once /cmd_vel geometry_msgs/msg/Twist \ "{linear: {x: 0.2}, angular: {z: -0.5}}"
控制效果:后轮驱动电机开始旋转 → 前轮转向舵机向右偏转 → 底盘进入右转运动状态

ROS2日志输出:cmd_vel: vx=200 mm/s, wz=-500
停止与回正测试
ros2 topic pub --once /cmd_vel geometry_msgs/msg/Twist \ "{linear: {x: 0.0}, angular: {z: 0.0}}"
控制效果:后轮停止转动 → 转向舵机回到中位 → 底盘停止运动

ROS2日志输出:cmd_vel: vx=0 mm/s, wz=0
转向控制说明
本项目采用阿克曼转向结构(Ackermann Steering):
  • 前轮 → 转向
  • 后轮 → 驱动
在测试过程中:
• 前轮不会主动旋转,只改变转向角度
• 后轮负责提供驱动力,旋转驱动车辆前进

该控制方式与汽车转向原理一致,也是目前移动机器人和无人车平台广泛采用的底盘结构。
ROS2 Twist ↓ /cmd_vel ↓ Wheeltec Driver ↓ C30D Controller ↓ Steering Servo + Drive Motor ↓ Ackermann Chassis
测试结论
ROS2 节点验证
测试项目测试结果
ROS2 功能包创建通过 通过
Python 控制节点创建通过 通过
console_scripts 节点入口配置通过 通过
colcon 编译通过 通过
ROS2 功能包识别通过 通过
ROS2 可执行节点识别通过 通过
阿克曼运动控制验证
测试项目测试结果
前进控制通过 通过
停止控制通过 通过
左转控制通过 已发送控制指令
右转控制通过 已发送控制指令
/cmd_vel 速度控制通过 通过
ROS2 日志输出通过 通过
阶段结论
ROS2 系统已能够通过标准 /cmd_vel 话题向 WHEELTEC GWR500 底盘发送运动控制指令,包括前进、后退、左转、右转和停止。底盘电机和转向舵机均能正常响应。

该结果证明 ROS2 上位机与 C30D 底层控制器之间的基础控制链路已经成功打通,为后续里程计、TF、SLAM 建图、Nav2 导航和多车协同控制开发提供了坚实基础。

平台:WHEELTEC GWR500 · C30D · Raspberry Pi 4B · ROS2 Humble
(c) 卓博泰科技 · ROS2 阿克曼底层驱动开发记录