跳转至

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 故障排查

现象 处理
按键无效 确认终端焦点、键盘布局和节点是否仍运行
话题有值但底盘不动 查订阅者、底盘节点、串口和使能状态
停止后又运动 查多个发布者和导航残留进程
左右横移无效 确认底盘是否支持全向运动及键盘模式
阿克曼转向异常 降低速度,确认没有发送原地旋转命令

章节导航

上一章:遥控底盘:APP、PS2 与航模遥控 · 返回本篇 · 下一章:串口通信协议