| src | ||
| .gitignore | ||
| CHANGELOG.md | ||
| COMPLETE_STARTUP_GUIDE.md | ||
| nav.sh | ||
| README.md | ||
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
编译
cd /home/robofish/MOVE_AI
colcon build --symlink-install
source install/setup.bash
📡 启动流程
方式一:分步启动(推荐调试)
1️⃣ 启动串口驱动
ros2 launch rm_serial_driver serial_driver.launch.py
2️⃣ 启动导航系统
ros2 launch rm_nav_bringup nav.launch.py
3️⃣ 启动视觉系统
Sentry 哨兵(推荐):
ros2 launch rm_vision_bringup sentry_vision.launch.py
其他机器人类型:
# 标准步兵
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️⃣ 启动决策节点
ros2 launch rm_decision decision.launch.py
方式二:一键启动(待实现)
ros2 launch rm_bringup full_system.launch.py
🎯 标定工具
视觉系统提供了完整的标定工具链:
相机标定
# 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
自定义参数:
# 指定配置文件和输出目录
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
🧪 测试命令
查看话题列表
ros2 topic list
监控关键话题
# 查看决策输出
ros2 topic echo /data_ai
# 查看底盘速度
ros2 topic echo /cmd_vel_move
# 查看视觉自瞄
ros2 topic echo /vision/aim
# 查看导航状态
ros2 topic echo /nav_status
发送导航目标
NAV 模式(路径规划)
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 模式(直接控制)
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}"
可视化
# 启动 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 # 导航模式
🐛 调试技巧
检查节点状态
ros2 node list
ros2 node info /rm_decision
检查话题连接
ros2 topic info /data_ai
查看参数
ros2 param list /rm_decision
ros2 param get /rm_decision enable_aim
日志级别
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