17. 键盘与 ROS 2 速度控制¶
17.1 学习目标¶
启动 ROS 2 底盘和键盘节点,观察键盘输入如何变成 cmd_vel,并确认命令方向、话题发布者和底盘动作一致。
17.2 适用范围¶
适用于包含 turn_on_wheeltec_robot 和 wheeltec_robot_keyboard 的 ROS 2 工作空间。包名不同的镜像可沿用方法,但不能照抄命令。
17.3 操作前检查¶
- 第 16 章遥控底盘通过。
- 主控通信设备稳定存在。
- 场地清空,速度从默认低值开始。
- 没有其他导航或遥控节点同时发布速度。
17.4 工作原理¶
键盘节点读取按键,生成 geometry_msgs/msg/Twist 并发布到速度话题。底盘驱动订阅该话题,把 linear.x、linear.y 和 angular.z 转成轮速或阿克曼转角。
当多个节点同时发布同一话题时,底盘可能交替接收不同命令。测试前必须先查发布者;键盘终端的输出无法说明底盘还收到了哪些节点的命令。
17.5 操作步骤¶
1. 启动底盘¶
ROS 2 启动命令按清单运行节点并传入参数;底盘启动文件会把底盘驱动及其配置组合起来。
在机器人主控终端中加载正确 ROS 2 和工作空间,然后执行当前镜像的底盘启动命令。常见示例:
ros2 launch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch.py
2. 确认速度话题¶
另开主控终端:
ros2 topic list | grep cmd_vel
ros2 topic info /cmd_vel --verbose
记录实际话题名、类型、发布者和订阅者。若系统使用命名空间,话题可能不是根路径 /cmd_vel。
3. 启动键盘节点¶
常见示例:
ros2 run wheeltec_robot_keyboard wheeltec_keyboard
保持终端焦点,根据当前终端提示使用按键。常见版本使用 k 停止,速度调整键包括 q/z 等;实际按键以运行时提示为准。
4. 同时观察消息¶
在第三个主控终端中执行:
ros2 topic echo /cmd_vel
短按前进,确认 linear.x 为小的正值;按停止,确认各项回到 0。只有麦轮或全向轮才测试非零 linear.y。阿克曼使用前进加转向,不测试原地自旋。
5. 检查并发发布者¶
测试结束再次执行:
ros2 topic info /cmd_vel --verbose
若有多个发布者,逐个停止。正式系统可使用速度复用器管理优先级,但首次验收应保持单一发布者。
17.6 验收标准¶
- 键盘节点是明确的速度发布者。
- 正
linear.x使机器人前进,停止键可靠归零。 linear.y只在支持横移的车型生效。- 转向方向与第 15 章坐标测试一致。
- 松开控制后没有其他节点继续发送非零速度。
17.7 故障排查¶
| 现象 | 处理 |
|---|---|
| 按键无效 | 确认终端焦点、键盘布局和节点是否仍运行 |
| 话题有值但底盘不动 | 查订阅者、底盘节点、串口和使能状态 |
| 停止后又运动 | 查多个发布者和导航残留进程 |
| 左右横移无效 | 确认底盘是否支持全向运动及键盘模式 |
| 阿克曼转向异常 | 降低速度,确认没有发送原地旋转命令 |