学习路线总览¶
全局知识地图¶
Ubuntu/Git/VSCode/SSH] B[ch02 C++ 基础
变量/指针/class/STL] C[ch03 Linux 基础
文件系统/Shell/vim] D[ch04 ROS2 核心
节点/话题/TF2/Launch] E[ch05 OpenCV
二值化/轮廓/形态学] end subgraph 核心篇 F[ch06 系统架构
数据流/消息/协议] G[ch07 装甲板检测
灯条匹配/YOLO/MLP] H[ch08 目标跟踪
EKF/状态机/跳变] I[ch09 PnP 解算
相机模型/Yaw优化] J[ch10 弹道与瞄准
弹道模型/aiming/射击] end subgraph 进阶篇 K[ch11 标定系统
内参/外参/手眼] L[ch12 进阶主题
MPC/全向感知/决策] end A --> B A --> C B --> D B --> E C --> D D --> F E --> G F --> G G --> H G --> I H --> J I --> J K -.-> G K -.-> I L -.-> H L -.-> J style A fill:#e8f5e9,stroke:#388e3c style B fill:#e8f5e9,stroke:#388e3c style C fill:#e8f5e9,stroke:#388e3c style D fill:#e3f2fd,stroke:#1565c0 style E fill:#e3f2fd,stroke:#1565c0 style F fill:#fff3e0,stroke:#e65100 style G fill:#fff3e0,stroke:#e65100 style H fill:#fff3e0,stroke:#e65100 style I fill:#fff3e0,stroke:#e65100 style J fill:#fff3e0,stroke:#e65100 style K fill:#f3e5f5,stroke:#6a1b9a style L fill:#f3e5f5,stroke:#6a1b9a
箭头含义:实线 = 必须先学,虚线 = 建议了解
阶段 1:工具基础(第 1 周)¶
目标:能在 Ubuntu 上写代码、编译、运行、远程调试。
| 任务 | 内容 | 检验标准 |
|---|---|---|
| 安装 Ubuntu | 22.04 LTS(双系统/WSL/虚拟机) | 能打开终端执行命令 |
| 学会基本命令 | cd, ls, cat, grep, chmod, sudo |
能在终端里找到文件、改权限 |
| 安装 VSCode | + C/C++ 插件 + Remote SSH | 能远程编辑工控机上的文件 |
| 学会 Git | clone, add, commit, push, pull |
能 clone 代码仓库并编译 |
| SSH 远程连接 | ssh user@ip,配好免密登录 |
能从自己电脑连上工控机 |
在代码里怎么用:你做的第一件事就是 git clone 代码仓库,然后在 Ubuntu 上 cmake 编译。编译报错时需要看懂终端输出。
对应章节:ch01 开发环境
阶段 2:C++ 编程(第 2-4 周)¶
目标:能看懂代码里的每一种 C++ 语法。
| 任务 | 内容 | 对应代码中的例子 |
|---|---|---|
| 变量和类型 | int, float, double, bool, string |
EKF 状态向量全是 double |
| 函数 | 参数传递、返回值 | double predict(double dt) |
| 指针和引用 | *, &, const& |
cv::Mat& image 到处都是 |
| class | 成员变量、成员函数、构造函数 | class Detector, class Tracker |
| STL 容器 | vector, map, pair |
vector<Armor> 装甲板列表 |
| 头文件/源文件 | .hpp 和 .cpp 的关系 |
detector.hpp + detector.cpp |
重点难点
指针和引用(红色标记)是 C++ 最难也是最重要的部分。代码里到处都是 cv::Mat&, const auto&, std::shared_ptr。这部分一定要花时间搞懂。
对应章节:ch02 C++ 基础
阶段 3:Linux + ROS2(第 5-7 周)¶
目标:能在 ROS2 里写一个发布者和订阅者,理解节点/话题/服务。
| 任务 | 内容 | 在自瞄系统中的体现 |
|---|---|---|
| ROS2 核心概念 | 节点、话题、服务 | 检测器是节点,/detector/armors 是话题 |
| 写发布者/订阅者 | C++ rclcpp | 检测器发布装甲板,跟踪器订阅 |
| TF2 坐标变换 | 广播、监听、message_filter | odom → gimbal_link → camera_link |
| Launch 文件 | Python launch | vision_bringup.launch.py 启动所有节点 |
| 自定义消息 | .msg 文件 |
Armor.msg, Target.msg |
| Component | composable node | 相机和检测器在同一进程零拷贝 |
学习建议
先用 ros2 topic list/echo/pub 命令行工具感受话题通信,再写代码。ROS2 的命令行工具非常好用,是调试的利器。
对应章节:ch03 Linux、ch04 ROS2
阶段 4:OpenCV(第 7-8 周,与 ROS2 同步学)¶
目标:能看懂检测器里的每一行 OpenCV 代码。
| 任务 | 内容 | 在检测器中的应用 |
|---|---|---|
| 图像读取显示 | imread, imshow |
摄像头画面获取 |
| 颜色空间转换 | cvtColor, BGR/GRAY |
灯条颜色判断 |
| 阈值处理 | threshold, OTSU |
灯条二值化 |
| 轮廓检测 | findContours, minAreaRect |
灯条检测的核心 |
| 形态学操作 | 腐蚀、膨胀 | 图像预处理 |
| 透视变换 | getPerspectiveTransform |
数字识别裁剪 |
对应章节:ch05 OpenCV
阶段 5:代码走读(第 9-12 周)¶
目标:完整理解自瞄系统每一行代码的含义。
读代码的顺序:
Armor.msg] --> B[2. 检测器
detector.cpp] B --> C[3. 数字识别
classifier.cpp] C --> D[4. PnP 解算
pnp_solver.cpp] D --> E[5. EKF 跟踪
ekf.cpp] E --> F[6. 跟踪器
tracker.cpp] F --> G[7. 串口通信
serial_driver.cpp] G --> H[8. 弹道解算
trajectory.cpp] H --> I[9. 瞄准决策
aimer.cpp] I --> J[10. 启动文件
launch.py] style A fill:#e8f5e9 style B fill:#e3f2fd style E fill:#fff3e0 style I fill:#f3e5f5
| 顺序 | 文件 | 章节 | 难度 | 关键点 |
|---|---|---|---|---|
| 1 | Armor.msg, Target.msg |
ch06 | ★☆☆ | 先理解数据结构 |
| 2 | detector.cpp |
ch07 | ★★☆ | 灯条检测全流程 |
| 3 | number_classifier.cpp |
ch07 | ★★☆ | MLP 数字识别 |
| 4 | pnp_solver.cpp |
ch09 | ★★★ | PnP 位姿解算 |
| 5 | extended_kalman_filter.cpp |
ch08 | ★★★ | EKF 数学实现 |
| 6 | tracker.cpp |
ch08 | ★★★★ | 状态机 + 跳变处理 |
| 7 | rm_serial_driver.cpp |
ch06 | ★★☆ | 串口通信协议 |
| 8 | trajectory.cpp |
ch10 | ★★★ | 弹道解算 |
| 9 | aimer.cpp |
ch10 | ★★★★ | coming/leaving angle |
| 10 | vision_bringup.launch.py |
ch06 | ★★☆ | 启动流程 |
读代码的黄金法则
不要从 main() 开始读。 先看数据结构(msg 文件),再看每个模块的输入输出(Topic),最后看具体算法实现。就像组装乐高:先看盒子上的成品图,再看每块积木,最后才是拼装步骤。
阶段 6:进阶深入(持续)¶
掌握基础后,根据兴趣选择方向:
| 方向 | 内容 | 章节 | 难度 |
|---|---|---|---|
| MPC 轨迹规划 | TinyMPC、轨迹视角的自瞄 | ch12 | ★★★★★ |
| 全向感知 | 多相机融合、目标优先级 | ch12 | ★★★★ |
| YOLO 检测 | OpenVINO 推理、模型训练 | ch07, ch12 | ★★★★ |
| 导航决策 | Nav2、自主决策 | ch12 | ★★★ |
| 标定系统 | 内参、外参、手眼标定 | ch11 | ★★★ |
| SLAM | 同时定位与建图 | 参考资料 | ★★★★★ |
常见问题¶
我是零基础,这些能学会吗?
能。本手册从零开始,每一步都有解释。但需要坚持,至少投入 2-3 个月才能独立看懂代码。关键是每天花 1-2 小时,不要断。
需要什么硬件?
一台能装 Ubuntu 的电脑(真机/虚拟机/WSL 都行)。工控机和相机是后期调试用的,初期用虚拟机就够了。
Python 和 C++ 学哪个?
视觉组主要用 C++(性能好、OpenCV C++ 接口更快)。Python 可以作为辅助(快速原型、数据处理、模型训练)。
学不会怎么办?
多问、多写、多调试。遇到看不懂的代码,先 grep 搜索函数定义,再顺着调用链往上追。本手册每一节都有"为什么这么干"的解释,帮你建立直觉。
这些知识以后有用吗?
非常有用。C++、ROS2、计算机视觉、状态估计、控制理论——这些是机器人、自动驾驶、AI 领域的核心技能。RM 的经历在简历上非常加分。