MOVE_AI/COMPLETE_STARTUP_GUIDE.md
Robofish 5c0752c7db feat: 重构系统架构,添加决策节点和ROS2视觉集成
## 核心更新

### 1. 决策节点 (rm_decision)
- 新增决策节点作为系统核心控制器
- 整合视觉自瞄控制(云台)和运动控制(底盘)
- 50Hz控制频率,实时决策
- 订阅: /data_mcu, /data_ref, /vision/aim, /nav_status, /cmd_vel_move
- 发布: /data_ai (综合控制), /nav_goal (导航目标)

### 2. 消息系统重构
- 新增 DataAim.msg - 视觉自瞄控制(仅云台)
- 新增 ChassisMode.msg - 底盘模式定义
- 新增 GimbalState.msg - 云台状态数据
- 修改 DataAI.msg - 综合控制指令(云台+底盘)

### 3. 视觉系统 ROS2 集成
- 创建 GimbalROS 适配器,替代直接串口通信
- 订阅 /data_mcu 获取云台状态
- 发布 /vision/aim 输出云台控制指令
- 修改所有视觉任务文件使用 ROS2 接口

### 4. 视觉系统标准化 (rm_vision_bringup)
- 添加 package.xml 使 rm_vision 成为标准 ROS2 包
- 创建 sentry_vision.launch.py - Sentry 专用启动
- 创建 calibration.launch.py - 统一标定工具
- 支持参数化启动不同类型的视觉程序

### 5. 数据流架构
MCU ↔ Serial Driver → Vision/Decision → Simple Move → Nav2

## 启动方式改进
之前: cd build/mr_vision && ./standard_mpc configs/standard4.yaml
现在: ros2 launch rm_vision_bringup sentry_vision.launch.py

## 文档更新
- 完善 README.md,添加完整系统架构图
- 新增 CHANGELOG.md 记录更新历史
- 添加详细的启动流程和标定工具说明

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-05 15:47:25 +08:00

8.5 KiB
Raw Permalink Blame History

完整启动流程文档

系统架构

┌─────────────────┐
│   rm_vision     │ 视觉节点
│  (GimbalROS)    │
└────────┬────────┘
         │ /gimbal/vision (DataAI)
         │ 云台控制指令
         ↓
┌─────────────────┐
│ rm_serial_driver│ 串口驱动
└────────┬────────┘
         │ 串口
         ↓
┌─────────────────┐
│      MCU        │ 下位机
└─────────────────┘
         ↑
         │ /data_mcu (DataMCU)
         │ 云台状态反馈
         │
┌─────────────────┐
│  rm_simple_move │ 导航节点
└─────────────────┘
         │ /cmd_vel_move (Twist)
         │ 底盘控制指令
         ↓
┌─────────────────┐
│ rm_serial_driver│
└─────────────────┘

话题映射表

话题 类型 方向 说明
/data_mcu rm_msgs/DataMCU MCU → 上位机 云台状态(姿态、弹速等)
/data_ref rm_msgs/DataRef MCU → 上位机 裁判系统数据
/gimbal/vision rm_msgs/DataAI 视觉 → MCU 视觉云台控制指令
/cmd_vel_move geometry_msgs/Twist 导航 → MCU 底盘运动控制指令
/nav_goal rm_msgs/NavGoal 决策 → 导航 导航目标点
/nav_status rm_msgs/NavStatus 导航 → 决策 导航状态反馈
/current_pose geometry_msgs/PoseStamped 导航 → 决策 当前位置

完整启动流程

步骤 1: 编译所有包

cd ~/MOVE_AI

# 编译消息包
colcon build --packages-select rm_msgs

# 编译串口驱动
colcon build --packages-select rm_serial_driver

# 编译导航节点
colcon build --packages-select rm_simpal_move

# 编译视觉(如果需要)
colcon build --packages-select mr_vision

# 加载环境
source install/setup.bash

步骤 2: 启动串口驱动(核心节点)

终端 1启动 rm_serial_driver

source install/setup.bash
ros2 run rm_serial_driver rm_serial_driver --ros-args \
  -p device_name:=/dev/ttyACM0 \
  -p baud_rate:=115200

预期输出:

========================================
RM Serial Driver 启动中...
  设备: /dev/ttyACM0
  波特率: 115200
========================================
话题配置:
  发布: /data_mcu (MCU状态)
  发布: /data_ref (裁判系统)
  订阅: /gimbal/vision (视觉控制)
  订阅: /cmd_vel_move (导航控制)
✓ 串口打开成功
RM Serial Driver 启动完成!

故障排查:

# 如果串口打开失败,检查设备
ls -l /dev/ttyACM*
ls -l /dev/ttyUSB*

# 添加串口权限
sudo usermod -a -G dialout $USER
# 重新登录生效

# 或临时授权
sudo chmod 666 /dev/ttyACM0

步骤 3: 验证串口通信

终端 2查看 MCU 数据

source install/setup.bash
ros2 topic echo /data_mcu

预期输出:

mode: 0
q0: 1.0
q1: 0.0
q2: 0.0
q3: 0.0
yaw: 0.0
yaw_vel: 0.0
pitch: 0.0
pitch_vel: 0.0
bullet_speed: 15.0
bullet_count: 0
---

如果能看到数据,说明串口通信正常!

步骤 4: 启动导航节点(可选)

终端 3启动 rm_simple_move

source install/setup.bash
ros2 launch rm_simpal_move simple_move.launch.py

预期输出:

[rm_simple_move]: 话题配置:
[rm_simple_move]:   输入: /nav_goal
[rm_simple_move]:   输出: /cmd_vel_move (统一输出)
[rm_simple_move]:   PID模式: 直接计算发布到 /cmd_vel_move
[rm_simple_move]:   NAV模式: Action /navigate_to_pose → 导航 → /cmd_vel → 转发到 /cmd_vel_move
[rm_simple_move]:   状态: /nav_status, /current_pose
[rm_simple_move]: RMSimpleMove 启动

步骤 5: 启动视觉节点(如果需要)

终端 4启动视觉

source install/setup.bash

# 方式 1: 使用已修复的 standard_mpc
./build/mr_vision/standard_mpc configs/standard.yaml

# 方式 2: 使用其他视觉节点(需要先修复)
# ./build/mr_vision/balance_infantry_mpc configs/balance_infantry.yaml

预期输出:

[GimbalROS] Initialized with ROS2 topics
[GimbalROS]   Subscribe: /data_mcu
[GimbalROS]   Publish: /gimbal/vision
[GimbalROS] Waiting for first quaternion...
[GimbalROS] First q received.

测试流程

测试 1: 验证话题连接

# 查看所有话题
ros2 topic list

# 应该看到:
# /data_mcu
# /data_ref
# /gimbal/vision
# /cmd_vel_move
# /nav_goal
# /nav_status
# /current_pose

# 查看话题信息
ros2 topic info /gimbal/vision
ros2 topic info /data_mcu

测试 2: 测试导航功能

# PID 模式导航到 (2, 2)
ros2 topic pub /nav_goal rm_msgs/msg/NavGoal "{
  mode: 0,
  target_x: 2.0,
  target_y: 2.0,
  target_angle: 0.0,
  max_speed: 1.0,
  tolerance: 0.2
}" --once

# 查看导航状态
ros2 topic echo /nav_status

# 查看底盘控制指令
ros2 topic echo /cmd_vel_move

测试 3: 测试视觉控制(如果视觉节点运行)

# 查看视觉发送的云台控制指令
ros2 topic echo /gimbal/vision

# 应该看到:
# mode: 0/1/2
# yaw: ...
# pitch: ...
# vx, vy, wz: ...

最小启动配置

如果只需要测试串口通信和导航:

# 终端 1: 串口驱动
ros2 run rm_serial_driver rm_serial_driver

# 终端 2: 导航节点
ros2 launch rm_simpal_move simple_move.launch.py

# 终端 3: 发送导航目标
ros2 topic pub /nav_goal rm_msgs/msg/NavGoal "{mode: 0, target_x: 1.0, target_y: 1.0, target_angle: 0.0, max_speed: 1.0, tolerance: 0.2}" --once

完整启动配置(包含视觉)

# 终端 1: 串口驱动
ros2 run rm_serial_driver rm_serial_driver

# 终端 2: 导航节点
ros2 launch rm_simpal_move simple_move.launch.py

# 终端 3: 视觉节点
./build/mr_vision/standard_mpc configs/standard.yaml

# 终端 4: 监控(可选)
ros2 topic echo /data_mcu

启动脚本

创建一个启动脚本 start_all.sh

#!/bin/bash

# 启动所有节点
cd ~/MOVE_AI
source install/setup.bash

# 启动串口驱动(后台)
gnome-terminal -- bash -c "source install/setup.bash && ros2 run rm_serial_driver rm_serial_driver; exec bash"

# 等待串口驱动启动
sleep 2

# 启动导航节点(后台)
gnome-terminal -- bash -c "source install/setup.bash && ros2 launch rm_simpal_move simple_move.launch.py; exec bash"

# 等待导航节点启动
sleep 2

# 启动视觉节点(如果需要)
# gnome-terminal -- bash -c "source install/setup.bash && ./build/mr_vision/standard_mpc configs/standard.yaml; exec bash"

echo "所有节点已启动!"
echo "使用 'ros2 topic list' 查看话题"
echo "使用 'ros2 topic echo /data_mcu' 查看 MCU 数据"

使用方法:

chmod +x start_all.sh
./start_all.sh

关闭流程

# 方式 1: 在每个终端按 Ctrl+C

# 方式 2: 使用脚本关闭所有节点
pkill -f rm_serial_driver
pkill -f rm_simple_move
pkill -f standard_mpc

常见问题

Q1: 串口打开失败

# 检查设备
ls -l /dev/ttyACM*

# 添加权限
sudo usermod -a -G dialout $USER
# 重新登录

# 或临时授权
sudo chmod 666 /dev/ttyACM0

Q2: 收不到 /data_mcu 数据

  • 检查串口连接是否正常
  • 检查 MCU 是否正常运行
  • 检查波特率是否匹配(默认 115200

Q3: 视觉节点等待四元数超时

  • 确保 rm_serial_driver 已启动
  • 确保 MCU 正在发送数据
  • 检查 /data_mcu 话题是否有数据

Q4: 导航不动

  • 检查 /cmd_vel_move 是否有数据
  • 检查 rm_serial_driver 是否订阅了 /cmd_vel_move
  • 检查 TF 变换是否正常

调试工具

# 查看所有节点
ros2 node list

# 查看所有话题
ros2 topic list

# 查看话题频率
ros2 topic hz /data_mcu

# 查看话题信息
ros2 topic info /gimbal/vision

# 录制数据
ros2 bag record -a

# 查看 TF 树
ros2 run tf2_tools view_frames

性能监控

# 查看节点资源占用
top -p $(pgrep -f rm_serial_driver)

# 查看话题带宽
ros2 topic bw /data_mcu

# 查看话题延迟
ros2 topic delay /data_mcu

下一步

  1. 串口驱动正常运行
  2. 导航节点正常运行
  3. 修复剩余的视觉节点文件
  4. 测试完整的视觉+导航+串口流程

文档

  • 使用指南: GIMBAL_ROS_GUIDE.md
  • 迁移状态: ROS2_MIGRATION_STATUS.md
  • 本文档: COMPLETE_STARTUP_GUIDE.md