# 从零到全国冠军：一个ROS1视觉巡航赛机器人的完整开源方案

> 本文介绍了一个斩获中国机器人及人工智能大赛全国一等奖的ROS1视觉巡航赛机器人完整工作空间，详细解析其系统架构、核心模块、导航算法与比赛策略。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-06-13T16:45:36.000Z
- 最近活动: 2026-06-13T16:52:18.738Z
- 热度: 161.9
- 关键词: ROS1, 机器人, 自主导航, SLAM, 计算机视觉, 竞赛机器人, 激光雷达, ICP定位, PID控制
- 页面链接: https://www.zingnex.cn/forum/thread/ros1
- Canonical: https://www.zingnex.cn/forum/thread/ros1
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者**: Javi-vahe
- **来源平台**: GitHub
- **原始标题**: Abot-Cruise-Workspace
- **原始链接**: https://github.com/Javi-vahe/Abot-Cruise-Workspace
- **发布时间**: 2026-06-13

---

## 项目背景与竞赛历程

在中国机器人及人工智能大赛（CRAIC）这样的顶级赛事中，新参赛队伍往往面临着巨大挑战。本项目作者作为首次参赛的选手，面对的是拥有多年技术积累的"祖传国一代码"队伍和校内三年经验的强劲对手。在约20天的高强度开发和调试周期内，作者从零开始构建了一套完整的竞赛机器人系统，最终在激烈的校内竞争中脱颖而出（同一学校仅有一支队伍能获得国一），以打破赛事历史记录的绝对领先优势斩获全国一等奖。

这个开源项目不仅是一个代码仓库，更是一份宝贵的竞赛机器人开发实战经验总结。

---

## 系统整体架构

该工作空间基于ROS1（推荐Melodic版本）构建，围绕Abot轮式移动机器人平台打造了一套完整的竞赛级机器人系统。整体架构采用经典的分层设计：

### 硬件驱动层
- **abot_base**: 底盘串口驱动与里程计融合，支持轮速里程计和IMU数据融合
- **abot_imu**: IMU数据采集与原始消息发布，配合Madgwick滤波实现姿态估计
- **lidar_filters**: 激光雷达数据过滤，提升感知数据质量

### 感知与定位层
- **robot_slam**: 集成gmapping建图、地图加载与导航功能
- **jie_ware**: 自定义激光定位模块lidar_loc，采用ICP配准算法替代传统AMCL
- **视觉模块**: 包含find_object_2d目标识别、AR Tag跟踪、火焰检测、人脸识别等多个视觉功能包

### 规划与控制层
- **pid_follow_planner**: 自定义PID路径跟踪局部规划器，这是系统的核心竞争优势之一
- **move_base**: 全局路径规划与导航框架

### 任务调度层
- **robot_slam**: 多目标点巡航、任务节点封装、比赛流程编排
- **track_tag**: AR Tag跟踪与射击触发
- **robot_voice**: 语音识别、TTS语音合成与语音助手

---

## 核心技术亮点解析

### 1. 自定义激光定位方案

作者完全摒弃了传统的AMCL定位方案，转而采用基于ICP（迭代最近点）配准的自定义激光定位节点lidar_loc。该方案的核心思想是将实时激光扫描数据与预先构建的地图进行匹配，通过迭代优化计算机器人的精确位姿。

这种方案的优势在于：
- 在竞赛环境中对动态障碍物更具鲁棒性
- 定位精度更高，满足精确巡航的需求
- 配合自定义的costmap清理逻辑，避免导航过程中的路径规划失败

### 2. PID路径跟踪局部规划器

这是系统的另一大技术亮点。作者没有使用ROS标准的DWA或TEB局部规划器，而是从零开发了一个基于PID控制的路径跟踪器。关键参数包括：

- plan_frequency: 规划频率
- max_x_speed / max_y_speed: 最大线速度约束
- goal_dist_tolerance: 目标点距离容差
- prune_ahead_distance: 路径前瞻距离
- p_value / i_value / d_value: PID控制参数

这种自定义规划器能够更好地适应竞赛场地的特殊需求，实现更平滑、更精确的路径跟踪。

### 3. 分区块多目标点巡航策略

比赛任务并非简单的单点导航，而是采用"场地分区块末端制导解耦合多任务巡航序列"的复杂策略。系统将场地按中点划分为4个区块（Block 1-4），每个区块配置独立的：

- 识别点坐标（goalList_X/Y/Yaw_Block_N）
- 目标点坐标
- 终点坐标

机器人通过/block_judge服务实时判断当前所在区块，并动态切换识别/等待状态，实现高效的任务调度。

### 4. "狂暴模式"策略设计

为应对国赛规则变化（区块识别结果产生链式影响），作者在launch文件中加入了"狂暴模式"。该模式抓住官方规则漏洞（规则未规定识别必须按顺序执行），采用非顺序识别策略，实测可比其他跑法快约20秒。这种对规则的深入理解和创造性应用，体现了竞赛策略设计的重要性。

---

## 关键运行流程

### 建图流程

```bash
roscore
roslaunch abot_bringup robot_with_imu.launch
roslaunch robot_slam gmapping.launch
roslaunch robot_slam view_mapping.launch
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
```

地图保存使用：
```bash
roslaunch robot_slam save_map.launch
```

### 导航/巡航赛流程

```bash
roscore
roslaunch track_tag usb_cam_with_calibration.launch
roslaunch find_object_2d find_object_2d.launch
roslaunch track_tag ar_track_camera.launch
roslaunch abot_bringup robot_with_imu.launch
roslaunch robot_slam navigation.launch
roslaunch robot_slam view_nav.launch
roslaunch robot_slam multi_goal.launch
```

---

## 技术栈与依赖

### 核心依赖
- **操作系统**: Ubuntu 18.04（推荐）
- **ROS版本**: ROS Melodic
- **Python**: Python 2.7 / Python 3混合
- **构建工具**: catkin_make

### 关键ROS包
- 导航: move_base, gmapping, map_server, robot_pose_ekf
- 感知: rplidar_ros, ar_track_alvar, usb_cam
- 视觉: cv_bridge, image_transport
- 仿真: gazebo_ros

### 第三方库
- OpenCV
- Eigen3
- Qt5
- 串口通信库
- 语音SDK

---

## 移植与使用建议

虽然项目理论上可以迁移到Ubuntu 20.04 + ROS Noetic，但需要额外处理：

1. Python2到Python3的兼容性修改
2. 旧版gnome-terminal -e启动脚本适配
3. 第三方库接口变化
4. 专用串口/摄像头/语音SDK的重新配置

因此，作者建议直接使用官方提供的镜像进行部署，以获得最佳体验。

---

## 实战价值与启发

这个项目的开源价值远超代码本身：

1. **完整的竞赛级系统参考**: 从硬件驱动到任务调度，展示了竞赛机器人开发的全流程
2. **创新的技术方案**: 自定义ICP定位和PID规划器的实践，证明了标准方案并非唯一选择
3. **策略与技术的结合**: "狂暴模式"展示了竞赛中规则理解和策略设计的重要性
4. **工程化思维**: 模块化的包结构、清晰的命名规范、完善的launch文件组织

对于正在准备机器人竞赛的团队，这是一个不可多得的学习资源。对于机器人爱好者，这也是理解ROS1系统架构和导航算法的优质案例。

---

## 结语

从零开始，在20天内击败拥有多年积累的队伍，打破赛事历史记录——这个项目的背后不仅是技术实力，更是系统化的工程思维和对竞赛规则的深入理解。开源这样一个完整的竞赛级工作空间，体现了作者对技术社区的回馈精神。无论你是竞赛选手、机器人开发者还是ROS学习者，这个项目都值得深入研究。
