跳转到正文

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

依次确认:

  1. /robot_2/cmd_vel 有发布者;
  2. 当前唯一的 bridge_node 是订阅者;
  3. 桥接知道该车最近使用的 UDP 源 IP 和源端口;
  4. 地面站确实发出了返回小车的 UDP 包;
  5. WiFi 模块处于双向透传模式;
  6. WiFi TX 已连接 C30D PD2/RX;
  7. 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 推荐操作顺序

  1. 在地面站中选择 wheelswarm 平台;
  2. 点击“开始”,初始化 ROS2Manager;
  3. 打开节点管理或车辆配置页面;
  4. 启动“小车协议桥接”或 wheelswarm_bridge
  5. 查看日志中的桥接启动和动态发现信息;
  6. 检查真实车辆列表是否出现 /robot_2
  7. 打开 ROS2 状态页,确认速度、IMU、电池和里程计;
  8. 使用低速命令完成运动验证。

2.3 手动桥接与 UI 桥接二选一

地面站配置中桥接节点通常为:

yaml
auto_start: false

这表示 UI 打开后不会自动启动桥接,需要用户在界面中启动。应选择以下一种方式:

  • 调试命令行时,手动运行 ros2 launch wheelswarm_bridge bridge.launch.py
  • 正式使用地面站时,停止手动桥接,再由 UI 启动桥接。

不要同时使用两种方式,否则 UDP 8888 可能冲突,UI 也可能无法正确显示进程状态。

2.4 UI 显示“桥接关闭”但手动桥接正常

UI 可能只跟踪由自身 NodeLauncher 启动的进程。此时:

  1. 停止命令行手动启动的桥接;
  2. 检查 8888 已释放;
  3. 在 UI 中点击“开始”;
  4. 由节点管理页面启动 wheelswarm_bridge
  5. 查看 UI 日志和真实车辆列表。

3. 多车配置

3.1 网络规划

建议在路由器中为地面站和每个 WiFi 模块设置 DHCP 静态租约,例如:

设备固定 IPROS2 ID
地面站192.168.2.128不适用
小车 2192.168.2.45robot_2
小车 3192.168.2.46robot_3
小车 4192.168.2.47robot_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.py

3.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 重复、编号重复或接线问题。

完成单车或多车的低速控制验证后,继续进行 故障排查与验收