MOVE_AI/README.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

379 lines
12 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

# MOVE_AI
青岛理工大学 QUT MOVE 战队 RoboMaster 比赛上位机代码仓库
支持步兵/英雄/无人机、哨兵、雷达等兵种,集成导航、自瞄、决策等功能。
---
## 📋 目录
- [系统架构](#系统架构)
- [功能模块](#功能模块)
- [快速开始](#快速开始)
- [启动流程](#启动流程)
- [话题接口](#话题接口)
- [测试命令](#测试命令)
---
## 🏗️ 系统架构
```
┌─────────────────────────────────────────────────────────────────┐
│ 下位机 (MCU) │
│ (STM32 + 电机 + IMU + 传感器) │
└────────────────────────────┬────────────────────────────────────┘
│ 串口通信
┌─────────────────────────────────────────────────────────────────┐
│ rm_serial_driver (串口驱动) │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 发布: /data_mcu (MCU状态) │ │
│ │ /data_ref (裁判系统数据) │ │
│ │ /gimbal/state (云台状态) │ │
│ │ 订阅: /data_ai (综合控制指令) │ │
│ └──────────────────────────────────────────────────────────┘ │
└───────┬─────────────────────────────────────────────┬───────────┘
│ │
↓ ↓
┌──────────────────┐ ┌──────────────────┐
│ rm_vision │ │ rm_decision │
│ (视觉系统) │ │ (决策节点) │
├──────────────────┤ ├──────────────────┤
│ 订阅: │ │ 订阅: │
│ /gimbal/state │ │ /data_mcu │
│ │ │ /data_ref │
│ 发布: │ │ /vision/aim │
│ /vision/aim ─────┼─────────────────────────→ /nav_status │
│ (云台控制) │ │ /cmd_vel_move │
└──────────────────┘ │ │
│ 发布: │
┌──────────────────┐ │ /data_ai ────────┼──┐
│ rm_simple_move │ │ /nav_goal │ │
│ (运动控制) │ └────────┬─────────┘ │
├──────────────────┤ │ │
│ 订阅: │ │ │
│ /nav_goal ←──────┼──────────────────────────────────┘ │
│ │ │
│ 发布: │ │
│ /cmd_vel_move ───┼───────────────────────────────────────────────┘
│ /nav_status │
└────────┬─────────┘
┌──────────────────┐
│ Nav2 Stack │
│ (导航系统) │
├──────────────────┤
│ - 路径规划 │
│ - 避障 │
│ - 定位 │
└──────────────────┘
```
---
## 🔧 功能模块
### 1. **rm_serial_driver** - 串口驱动
- 与下位机 MCU 进行串口通信
- 接收 MCU 状态、裁判系统数据、云台状态
- 发送综合控制指令到 MCU
### 2. **rm_vision** - 视觉系统
- 自瞄识别与跟踪
- 能量机关识别
- 输出云台控制指令yaw/pitch 角度、速度、加速度)
### 3. **rm_simple_move** - 运动控制
- **PID 模式**:直接速度控制
- **NAV 模式**:调用 Nav2 进行路径规划和导航
- 输出底盘速度指令
### 4. **rm_decision** - 决策节点(核心控制器)
- 整合视觉自瞄控制(云台)
- 整合运动控制指令(底盘)
- 根据裁判系统、导航状态做决策
- 输出统一的 `/data_ai` 控制指令
### 5. **Nav2** - 导航系统
- 全局路径规划
- 局部避障
- SLAM 定位
---
## 🚀 快速开始
### 环境要求
- Ubuntu 22.04
- ROS 2 Humble
- C++17
### 编译
```bash
cd /home/robofish/MOVE_AI
colcon build --symlink-install
source install/setup.bash
```
---
## 📡 启动流程
### 方式一:分步启动(推荐调试)
#### 1⃣ 启动串口驱动
```bash
ros2 launch rm_serial_driver serial_driver.launch.py
```
#### 2⃣ 启动导航系统
```bash
ros2 launch rm_nav_bringup nav.launch.py
```
#### 3⃣ 启动视觉系统
**Sentry 哨兵(推荐):**
```bash
ros2 launch rm_vision_bringup sentry_vision.launch.py
```
**其他机器人类型:**
```bash
# 标准步兵
ros2 launch rm_vision_bringup vision.launch.py vision_type:=standard_mpc
# 平衡步兵
ros2 launch rm_vision_bringup vision.launch.py vision_type:=balance_infantry_mpc
# 自瞄调试模式
ros2 launch rm_vision_bringup vision.launch.py vision_type:=auto_aim_debug_mpc
# 能量机关调试
ros2 launch rm_vision_bringup vision.launch.py vision_type:=auto_buff_debug_mpc
# 自定义配置文件
ros2 launch rm_vision_bringup vision.launch.py config:=sentry.yaml
```
#### 4⃣ 启动决策节点
```bash
ros2 launch rm_decision decision.launch.py
```
### 方式二:一键启动(待实现)
```bash
ros2 launch rm_bringup full_system.launch.py
```
---
## 🎯 标定工具
视觉系统提供了完整的标定工具链:
### 相机标定
```bash
# 1. 采集标定图像(按 's' 保存,'q' 退出)
ros2 launch rm_vision_bringup calibration.launch.py calibration_type:=capture
# 2. 标定相机内参
ros2 launch rm_vision_bringup calibration.launch.py calibration_type:=calibrate_camera
# 3. 手眼标定
ros2 launch rm_vision_bringup calibration.launch.py calibration_type:=calibrate_handeye
# 4. 机器人-世界手眼标定
ros2 launch rm_vision_bringup calibration.launch.py calibration_type:=calibrate_robotworld_handeye
# 5. 视频分割工具
ros2 launch rm_vision_bringup calibration.launch.py calibration_type:=split_video
```
**自定义参数:**
```bash
# 指定配置文件和输出目录
ros2 launch rm_vision_bringup calibration.launch.py \
calibration_type:=capture \
config:=calibration.yaml \
output_folder:=my_calibration_data
```
---
## 📊 话题接口
### 核心话题
| 话题名称 | 消息类型 | 发布者 | 订阅者 | 说明 |
|---------|---------|--------|--------|------|
| `/data_mcu` | `rm_msgs/DataMCU` | serial_driver | decision | MCU 状态数据 |
| `/data_ref` | `rm_msgs/DataRef` | serial_driver | decision | 裁判系统数据 |
| `/gimbal/state` | `rm_msgs/GimbalState` | serial_driver | vision | 云台状态(姿态、速度) |
| `/vision/aim` | `rm_msgs/DataAim` | vision | decision | 视觉自瞄控制(仅云台) |
| `/nav_goal` | `rm_msgs/NavGoal` | decision | simple_move | 导航目标 |
| `/nav_status` | `rm_msgs/NavStatus` | simple_move | decision | 导航状态反馈 |
| `/cmd_vel_move` | `geometry_msgs/Twist` | simple_move | decision | 底盘速度指令 |
| `/data_ai` | `rm_msgs/DataAI` | decision | serial_driver | 综合控制指令(云台+底盘) |
### 数据流向
```
视觉控制流:
MCU → /gimbal/state → Vision → /vision/aim → Decision → /data_ai → MCU
底盘控制流:
Decision → /nav_goal → SimpleMove → /cmd_vel_move → Decision → /data_ai → MCU
导航反馈流:
SimpleMove → /nav_status → Decision
```
---
## 🧪 测试命令
### 查看话题列表
```bash
ros2 topic list
```
### 监控关键话题
```bash
# 查看决策输出
ros2 topic echo /data_ai
# 查看底盘速度
ros2 topic echo /cmd_vel_move
# 查看视觉自瞄
ros2 topic echo /vision/aim
# 查看导航状态
ros2 topic echo /nav_status
```
### 发送导航目标
#### NAV 模式(路径规划)
```bash
ros2 topic pub --once /nav_goal rm_msgs/msg/NavGoal \
"{mode: 1, target_x: 4.0, target_y: -4.0, target_angle: 0.0, max_speed: 1.0, tolerance: 0.1}"
```
#### PID 模式(直接控制)
```bash
ros2 topic pub --once /nav_goal rm_msgs/msg/NavGoal \
"{mode: 0, target_x: 1.0, target_y: 0.5, target_angle: 0.0, max_speed: 0.5, tolerance: 0.05}"
```
### 可视化
```bash
# 启动 RViz 查看导航
rviz2 -d $(ros2 pkg prefix rm_bringup)/share/rm_bringup/rviz/nav.rviz
# 查看 TF 树
ros2 run tf2_tools view_frames
```
---
## 📝 消息定义
### DataAim视觉自瞄 - 仅云台)
```
uint8 mode # 0:空闲 1:自瞄 2:小符 3:大符
float32 yaw # 偏航角
float32 yaw_vel # 偏航角速度
float32 yaw_acc # 偏航角加速度
float32 pitch # 俯仰角
float32 pitch_vel # 俯仰角速度
float32 pitch_acc # 俯仰角加速度
```
### DataAI综合控制 - 云台+底盘)
```
uint8 mode # 云台模式
float32 yaw, yaw_vel, yaw_acc
float32 pitch, pitch_vel, pitch_acc
float32 vx, vy, wz # 底盘速度
uint8 reserved # 底盘模式
```
### NavGoal导航目标
```
uint8 MODE_PID = 0 # PID 直接控制
uint8 MODE_NAV = 1 # Nav2 导航
uint8 mode
float32 target_x, target_y, target_angle
float32 max_speed, tolerance
```
### ChassisMode底盘模式
```
uint8 MODE_MANUAL = 0 # 手动控制
uint8 MODE_FOLLOW = 1 # 跟随云台
uint8 MODE_SPIN = 2 # 小陀螺
uint8 MODE_NAV = 3 # 导航模式
```
---
## 🐛 调试技巧
### 检查节点状态
```bash
ros2 node list
ros2 node info /rm_decision
```
### 检查话题连接
```bash
ros2 topic info /data_ai
```
### 查看参数
```bash
ros2 param list /rm_decision
ros2 param get /rm_decision enable_aim
```
### 日志级别
```bash
ros2 run rm_decision decision_node --ros-args --log-level debug
```
---
## 📂 项目结构
```
MOVE_AI/
├── src/
│ ├── rm_serial_driver/ # 串口驱动
│ ├── rm_vision/ # 视觉系统
│ ├── rm_nav/ # 导航相关
│ │ └── rm_simple_move/ # 运动控制
│ ├── rm_decision/ # 决策节点
│ ├── rm_msgs/ # 消息定义
│ └── rm_bringup/ # 启动文件
└── README.md
```
---
## 🤝 贡献
欢迎提交 Issue 和 Pull Request
## 📄 许可证
本项目采用 MIT 许可证。
---
**青岛理工大学 QUT MOVE 战队** | RoboMaster 2026