主题模式
C30D 底板小车:运动控制与地面站
本页介绍小车低速运动测试、ROS2 地面站操作方式,以及多车网络和 ID 配置。
1. 小车运动控制测试
1.1 测试前安全要求
- 首次测试将驱动轮架空,或确保前后至少数米无障碍;
- 使用较小速度,例如
0.1 m/s; - 一人操作终端,一人观察小车;
- 保持电源开关或急停位置可立即触及;
- 不要在人员脚边直接进行首次闭环测试。
1.2 检查控制话题
bash
ros2 topic type /robot_2/cmd_vel
ros2 topic info /robot_2/cmd_vel -v消息类型应为:
text
geometry_msgs/msg/Twist并应看到 bridge_node 订阅该话题。
1.3 低速前进
bash
ros2 topic pub --rate 10 \
/robot_2/cmd_vel \
geometry_msgs/msg/Twist \
"{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {z: 0.0}}"观察车轮方向和响应是否正常。
1.4 转向测试
bash
ros2 topic pub --rate 10 \
/robot_2/cmd_vel \
geometry_msgs/msg/Twist \
"{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {z: 0.2}}"不同底盘类型对角速度的物理响应可能不同,应从小值开始。
1.5 停止小车
bash
ros2 topic pub --rate 10 \
/robot_2/cmd_vel \
geometry_msgs/msg/Twist \
"{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {z: 0.0}}"控制终端按 Ctrl+C 后,建议再发送一次零速度命令,确认小车停止。不要只依赖停止话题发布进程。
1.6 控制不生效的检查顺序
bash
ros2 topic info /robot_2/cmd_vel -v
ros2 node list | grep bridge
ss -lunp | grep ':8888'
sudo tcpdump -ni any udp port 8888依次确认:
/robot_2/cmd_vel有发布者;- 当前唯一的
bridge_node是订阅者; - 桥接知道该车最近使用的 UDP 源 IP 和源端口;
- 地面站确实发出了返回小车的 UDP 包;
- WiFi 模块处于双向透传模式;
- WiFi TX 已连接 C30D PD2/RX;
- C30D 固件当前处于允许接收 ROS 控制的模式。
2. ROS2 地面站操作
2.1 启动环境
进入地面站目录前,先加载 ROS2 环境:
bash
source /opt/ros/humble/setup.bash
source "$WS/install/setup.bash"
cd "$WS/ground/ground"
./start.sh如果现场目录不同,以实际包含 start.sh 的地面站目录为准。
2.2 推荐操作顺序
- 在地面站中选择
wheelswarm平台; - 点击“开始”,初始化 ROS2Manager;
- 打开节点管理或车辆配置页面;
- 启动“小车协议桥接”或
wheelswarm_bridge; - 查看日志中的桥接启动和动态发现信息;
- 检查真实车辆列表是否出现
/robot_2; - 打开 ROS2 状态页,确认速度、IMU、电池和里程计;
- 使用低速命令完成运动验证。
2.3 手动桥接与 UI 桥接二选一
地面站配置中桥接节点通常为:
yaml
auto_start: false这表示 UI 打开后不会自动启动桥接,需要用户在界面中启动。应选择以下一种方式:
- 调试命令行时,手动运行
ros2 launch wheelswarm_bridge bridge.launch.py; - 正式使用地面站时,停止手动桥接,再由 UI 启动桥接。
不要同时使用两种方式,否则 UDP 8888 可能冲突,UI 也可能无法正确显示进程状态。
2.4 UI 显示“桥接关闭”但手动桥接正常
UI 可能只跟踪由自身 NodeLauncher 启动的进程。此时:
- 停止命令行手动启动的桥接;
- 检查
8888已释放; - 在 UI 中点击“开始”;
- 由节点管理页面启动
wheelswarm_bridge; - 查看 UI 日志和真实车辆列表。
3. 多车配置
3.1 网络规划
建议在路由器中为地面站和每个 WiFi 模块设置 DHCP 静态租约,例如:
| 设备 | 固定 IP | ROS2 ID |
|---|---|---|
| 地面站 | 192.168.2.128 | 不适用 |
| 小车 2 | 192.168.2.45 | robot_2 |
| 小车 3 | 192.168.2.46 | robot_3 |
| 小车 4 | 192.168.2.47 | robot_4 |
每个 WiFi 模块都配置为相同的 UDP 目标:
text
192.168.2.128:8888桥接根据 UDP 源 IP 区分不同车辆。
3.2 多车 vehicles.yaml 示例
yaml
udp_port: 8888
online_timeout: 5.0
auto_register: true
vehicles:
- id: 2
mapped_id: 2
name: robot_02
ip: 192.168.2.45
protocol: stm32_wheeltec
robot_type: ackermann_robot
control_interface: velocity_twist
enabled: true
- id: 3
mapped_id: 3
name: robot_03
ip: 192.168.2.46
protocol: stm32_wheeltec
robot_type: ackermann_robot
control_interface: velocity_twist
enabled: true修改后重新构建并重启桥接:
bash
cd "$WS"
colcon build --packages-select wheelswarm_bridge --symlink-install
source install/setup.bash
ros2 launch wheelswarm_bridge bridge.launch.py3.3 多车验收
bash
ros2 topic hz /robot_2/velocity
ros2 topic hz /robot_3/velocity
ros2 topic echo /vehicle_info控制时只修改目标话题编号:
text
/robot_2/cmd_vel
/robot_3/cmd_vel先逐车单独验收,再同时上电。这样能快速发现 IP 重复、编号重复或接线问题。
完成单车或多车的低速控制验证后,继续进行 故障排查与验收。
