跳转至

学习路线总览

全局知识地图

graph TB subgraph 基础篇 A[ch01 开发环境
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 上写代码、编译、运行、远程调试。

graph LR A[安装 Ubuntu] --> B[学终端命令] B --> C[安装 VSCode] C --> D[配 SSH 免密] D --> E[git clone 代码] E --> F[cmake 编译成功]
任务 内容 检验标准
安装 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++ 语法。

graph TD A[变量和类型] --> B[函数] B --> C[指针和引用] C --> D[class 面向对象] D --> E[STL 容器] E --> F[头文件/源文件] F --> G[模板简介] style C fill:#ffcdd2,stroke:#c62828 style D fill:#ffcdd2,stroke:#c62828
任务 内容 对应代码中的例子
变量和类型 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 里写一个发布者和订阅者,理解节点/话题/服务。

graph TD A[ROS2 核心概念] --> B[写发布者/订阅者] B --> C[自定义消息 .msg] C --> D[TF2 坐标变换] D --> E[Launch 文件] E --> F[Component 零拷贝] style D fill:#bbdefb,stroke:#1565c0 style F fill:#bbdefb,stroke:#1565c0
任务 内容 在自瞄系统中的体现
ROS2 核心概念 节点、话题、服务 检测器是节点,/detector/armors 是话题
写发布者/订阅者 C++ rclcpp 检测器发布装甲板,跟踪器订阅
TF2 坐标变换 广播、监听、message_filter odomgimbal_linkcamera_link
Launch 文件 Python launch vision_bringup.launch.py 启动所有节点
自定义消息 .msg 文件 Armor.msg, Target.msg
Component composable node 相机和检测器在同一进程零拷贝

学习建议

先用 ros2 topic list/echo/pub 命令行工具感受话题通信,再写代码。ROS2 的命令行工具非常好用,是调试的利器。

对应章节:ch03 Linuxch04 ROS2


阶段 4:OpenCV(第 7-8 周,与 ROS2 同步学)

目标:能看懂检测器里的每一行 OpenCV 代码。

任务 内容 在检测器中的应用
图像读取显示 imread, imshow 摄像头画面获取
颜色空间转换 cvtColor, BGR/GRAY 灯条颜色判断
阈值处理 threshold, OTSU 灯条二值化
轮廓检测 findContours, minAreaRect 灯条检测的核心
形态学操作 腐蚀、膨胀 图像预处理
透视变换 getPerspectiveTransform 数字识别裁剪

对应章节:ch05 OpenCV


阶段 5:代码走读(第 9-12 周)

目标:完整理解自瞄系统每一行代码的含义。

读代码的顺序

graph LR A[1. 消息定义
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),最后看具体算法实现。就像组装乐高:先看盒子上的成品图,再看每块积木,最后才是拼装步骤。

对应章节:ch06 系统架构ch10 弹道


阶段 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 的经历在简历上非常加分。