## 核心更新 ### 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>
379 lines
12 KiB
Markdown
379 lines
12 KiB
Markdown
# 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
|