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

393 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 完整启动流程文档
## 系统架构
```
┌─────────────────┐
│ 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: 编译所有包
```bash
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**
```bash
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 启动完成!
```
**故障排查:**
```bash
# 如果串口打开失败,检查设备
ls -l /dev/ttyACM*
ls -l /dev/ttyUSB*
# 添加串口权限
sudo usermod -a -G dialout $USER
# 重新登录生效
# 或临时授权
sudo chmod 666 /dev/ttyACM0
```
### 步骤 3: 验证串口通信
**终端 2查看 MCU 数据**
```bash
source install/setup.bash
ros2 topic echo /data_mcu
```
**预期输出:**
```yaml
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**
```bash
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启动视觉**
```bash
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: 验证话题连接
```bash
# 查看所有话题
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: 测试导航功能
```bash
# 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: 测试视觉控制(如果视觉节点运行)
```bash
# 查看视觉发送的云台控制指令
ros2 topic echo /gimbal/vision
# 应该看到:
# mode: 0/1/2
# yaw: ...
# pitch: ...
# vx, vy, wz: ...
```
## 最小启动配置
如果只需要测试串口通信和导航:
```bash
# 终端 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
```
## 完整启动配置(包含视觉)
```bash
# 终端 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`
```bash
#!/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 数据"
```
使用方法:
```bash
chmod +x start_all.sh
./start_all.sh
```
## 关闭流程
```bash
# 方式 1: 在每个终端按 Ctrl+C
# 方式 2: 使用脚本关闭所有节点
pkill -f rm_serial_driver
pkill -f rm_simple_move
pkill -f standard_mpc
```
## 常见问题
### Q1: 串口打开失败
```bash
# 检查设备
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 变换是否正常
## 调试工具
```bash
# 查看所有节点
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
```
## 性能监控
```bash
# 查看节点资源占用
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`