## 核心更新 ### 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>
393 lines
8.5 KiB
Markdown
393 lines
8.5 KiB
Markdown
# 完整启动流程文档
|
||
|
||
## 系统架构
|
||
|
||
```
|
||
┌─────────────────┐
|
||
│ 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`
|