☰
自动驾驶学习路线:从感知规划到仿真部署的全链路指南
2026/9/30 6:15:58 网站建设 项目流程

每年都会收到好几批私信,问的问题基本都指向同一个方向:想学自动驾驶,但资料太多了,不知道从哪下手。GitHub星标列表里躺着一堆自动驾驶开源项目,收藏夹里存了几十个视频,买书也买了不少,结果一个月后还停在“看安装教程”这一步。这个问题我太熟悉了,自动驾驶和普通Web开发不一样,它横跨感知、定位、预测、规划、控制、仿真、嵌入式部署多个环节,任何一个环节单独拎出来都能让人学上大半年。这篇内容我想用自己踩过坑之后重新梳理的顺序,把视频、书籍、开源项目、数据集和仿真工具串成一条主线,重点解决三个问题:学什么、按什么顺序学、怎么验证自己真的学会了。无论你是刚毕业想入行的学生,还是准备从传统软件开发转过来的工程师,这条主线应该都能用得上。

1. 动笔之前先定方向:感知、规划控制还是仿真测试

1.1 自动驾驶系统的四层骨架

很多人一上来就打开某个全栈开源项目,想直接把整个系统看懂,结果十有八九在编译阶段就放弃了。更靠谱的做法是先建立系统分层概念,搞清楚每个模块到底负责什么。

我的理解里,一套完整的自动驾驶系统可以简化成四层:环境感知层负责回答“周围有什么”,核心任务包括目标检测、语义分割、车道线检测、障碍物跟踪;定位与状态估计层回答“我在哪、我以什么速度在动”,涉及GPS/IMU融合、激光雷达点云配准、视觉里程计;决策规划层回答“接下来要怎么走”,包括行为预测、轨迹规划、路径规划;控制执行层回答“方向盘该打多少、油门刹车该踩多重”,常见算法有PID、LQR、MPC。仿真测试不在这四层之内,但它像骨架一样把四层串起来,帮你在没有实车的情况下验证整个系统。

1.2 不同方向的学习重心差异

热词里经常看到“嵌入式开源项目”“C++开源项目学习”“FPGA开源项目”“STM32开源项目”,说明很多读者关注的不只是算法岗。这里必须先明确一点:自动驾驶方向的学习资料,因为岗位不同,差异非常大。

如果目标是算法岗,重心应该放在深度学习、点云处理、多传感器融合、轨迹规划这些内容上,主流语言是Python和C++,常用工具是PyTorch、ROS2、CARLA。如果目标是工程落地岗,比如做域控制器、底盘线控、传感器驱动,那重心要放在嵌入式Linux、实时操作系统、CAN总线通信、C++性能优化、TensorRT部署上,STM32和FPGA确实是常见载体。仿真测试岗位又不一样,更需要对场景编辑、传感器仿真、车辆动力学建模有概念,Carsim、NI、VTD、CARLA这类工具是主要工作对象。

1.3 先选方向再找资料,避免收藏一大堆却不匹配

我见过太多人犯同一个错误:算法方向还没想清楚,先跑去买了STM32开发板;做着嵌入式开发,又觉得必须把深度学习论文刷完。我跟你说,这种“大而全”的学习方式,在自动驾驶领域几乎是死路一条。

那怎么选?我的建议是:用排除法。先问自己对“在电脑上训练模型、看检测框、调曲线”有没有兴趣,如果有,优先走感知和规划方向。如果更享受“让代码跑在真实硬件上,看电机和屏幕响应”的成就感,那就走嵌入式与部署方向。两条路不是完全隔离的,但入门阶段一定只选一条,用半年到一年时间跑通一个闭环,比什么都学更有效。

2. 视频课程食用指南:从入门到能听懂论文答辩

2.1 零基础视觉课:CS231n 与多伦多大学专项课程

视频资料这块,我踩过最深的坑就是跟着营销号“学自动驾驶”,学了一堆名词但完全没有体系。真正值得反复刷的,还是那些背景扎实的课程。

如果你是零基础,首推斯坦福的 CS231n(Convolutional Neural Networks for Visual Recognition),这门课虽然是叫“视觉识别”,但它就是自动驾驶感知板块的地基。前几节课讲图像分类、CNN卷积核怎么工作,中段讲目标检测和语义分割,后面的可视化与注意力机制又和自动驾驶中的可解释性研究直接相关。这门课配合官方作业去刷,不要光看视频,作业会让你从零实现反向传播、训练一个完整分类器,这比看十遍视频有用得多。

多伦多大学在 Coursera 上的 Self-Driving Cars 专项课程是另一套被严重低估的资源。它一共四门:自动驾驶导论、状态估计与定位、视觉感知、运动规划与控制,再加一个综合项目。这套课程的优点是从车辆运动学模型开始讲,把坐标系变换、卡尔曼滤波、PID和MPC这些核心概念全部过一遍,课程节奏适合在上班之余慢慢学。缺点也很明显,没有中文配音,语速偏快,依赖字幕看会有点累,但知识密度确实很高。

2.2 中文与本土生态资源:Apollo 公开课与 Udacity 的结构化练习

国内生态里,百度 Apollo 的开发者公开课是绕不开的一份资料。Apollo 这个项目本身就是一套完整的自动驾驶开源系统,配套课程从环境感知、高精度地图与定位,到预测、规划、控制,都有模块化讲解。看这套课的时候,建议打开 Apollo 的代码仓库对照着看,效果远好于单纯刷视频。课程时间不长,我印象里比较适合用来搭整体框架。

Udacity 的自动驾驶工程师纳米学位虽然收费,但如果只是想把练习题目和项目思路拿来参考,依然很有价值。它的Term2涉及大量传感器融合和状态估计,Term3聚焦规划与控制,项目设计得比较“去校园化”,特别像企业里真实的算法任务。有人会问:我看网上的免费搬运版行不行?我的看法是,重点不是付费或免费,而是你要把每个项目的设计文档读透,然后自己动手重写一遍。如果只是把别人跑好的视频截图看一遍,那就真的浪费了。

2.3 视频课的正确刷法

结合我自己带过的新人和带自己的经验,视频课要遵守三个原则。

第一,一门课没写完作业,不要开下一门课。自动驾驶的所有感知、规划、控制知识都是环环相扣的,你在状态估计里没搞懂卡尔曼滤波,后面看多传感器融合一定会卡住。

第二,45分钟一节的课,至少安排两小时学习时间。因为你需要中途暂停去查公式推导、去画数据流图、去翻别人写的笔记。只看不暂停的视频刷法,基本等于看纪录片。

第三,把课程中的作业和开源项目做映射。比如学完CS231n的检测部分,就去跑一下Ultralytics YOLO的官方demo;学完多伦多课程里的MPC控制,就去打开一个MPC开源实现,看代码是怎样把矩阵运算落到工程里的。这种映射一旦建立起来,你会突然发现论文里的名词开始“活”了。

3. 书架上的常备书:几本书撑起知识框架

3.1 感知与深度学习

视频能帮你建立直观印象,但很多细节还是得回到书里。

深度学习这块,最值得放书架的不是新出的工具书,而是 Goodfellow 那本《Deep Learning》。它的英文版叫 Deep Learning,中文俗称“花书”。这本书前几章讲线性代数、概率与信息论时很劝退,但坚持看到优化算法和卷积网络部分,就会明白为什么自动驾驶算法那么多 tricks,底层还是梯度、损失函数和正则化。说实话,我至今还会随手翻它的反向传播一章,每次都有新体会。

感知领域还有一本工程向的书值得推荐:Szeliski 的《Computer Vision: Algorithms and Applications》,中文是《计算机视觉:算法与应用》。它不像教科书那样只讲数学推导,而是直接告诉你各种视觉问题目前的主流 pipeline,摄像头标定、立体视觉、光流、分割都有涉及。这本书厚了点,我一般建议当工具书用,遇到某个具体问题时去翻对应章节,不必从头到尾啃。

3.2 状态估计、规划与控制

如果让我选一本对自动驾驶规划控制工程师最重要的书,我会选 Thrun 等人写的《Probabilistic Robotics》,概率机器人学。卡尔曼滤波、粒子滤波、栅格地图、马尔可夫定位这些核心方法都在这本书里有严谨但不算难懂的讲解。它解决的最大问题是让你理解“不确定性”:传感器有噪声,模型有误差,系统怎么在这种不完美状态下依然估计出车的位置和姿态。这个思路贯穿自动驾驶整个软件栈。

做控制方向的话,《Vehicle Dynamics and Control》(Rajamani 著,中文译名《车辆动力学及控制》)是一本非常经典的书。它从车辆单轨模型讲起,涉及横向动力学、纵向动力学、智能车辆巡航控制、自动紧急制动等内容,重点是可以直接和车辆工程知识对接。真车实车测试或者做 Carsim 仿真时,很多参数及边界条件的设定逻辑都来自这本书。

还有一本国内读者更熟悉的《视觉SLAM十四讲》,书名看似只做视觉SLAM,但它把李群李代数、图优化、回环检测讲得特别清楚。自动驾驶里高精地图与定位团队问的问题,很大一部分可以用这里面的思想回答。

3.3 仿真和工程实践类书

工程实践方面,Packt 出版社出过一本《Hands-On Autonomous Driving with CARLA》,这本书控制在一个很舒服的深度:教你怎么安装 CARLA、用 Python API 控制车辆、采集传感器数据、训练一个端到端驾驶模型。虽然它的代码有些地方版本兼容性需要改,但作为仿真入门的伴随读物非常合适。它比官方文档多了一层“作者思路”,能帮你理解为什么仿真环境里要先做地图坐标变换,再做传感器标定。

ROS 相关的书则建议直接用官方文档入门,别贪书多。ROS2 和 ROS1 差异很大,很多书的示例还停在 ROS1,照着写会报一堆错。如果一定要推荐一本,《Programming Robots with ROS》可以当概念入门,但实操时遇到问题还是老老实实查官方 tutorial。

4. 开源项目实战:感知、规划与部署三线推进

4.1 感知仓库:OpenPCDet 与 MMDetection3D

自动驾驶开源项目里,感知这条线最适合新人下手的不是商用级别的框架,而是研究向且文档完整的项目。

OpenPCDet 是香港中文大学 MMLab 开源的点云3D目标检测库,它把 PointPillars、SECOND、CenterPoint、PV-RCNN 等主流方法都做进了同一套代码框架里。我第一次用它训练 KITTI 数据集时,最大的感受是“很正”,数据加载、模型定义、训练评估流程都很规范,直接在官方配置上改参数就能跑通。学习的时候建议先跑 PointPillars,因为它把点云转成伪图像的思想特别适合理解鸟瞰视角特征表达。

MMDetection3D 则来自 OpenMMLab 体系,它不只做点云,还支持视觉和点云多模态融合检测,标定文件、坐标系转换这些内容都处理得比较完整。如果你之前用过 MMDetection 做2D检测,再看 MMDetection3D 会特别顺手。两个项目二选一行不行?我的建议是都装一下,但重点研究其中一个。感知方向的网上面试经常问“你用哪个库实现、为什么这么搭”,用两个库对比过之后,你自己心里会更能答得圆。

4.2 全栈系统:Apollo 与 Autoware

想理解整辆车的软件架构,Apollo 和 Autoware 是最好的两个样本。

Apollo 是百度开源的自动驾驶平台,模块划分很清晰:localization、perception、prediction、planning、control、routing、canbus,每个模块都有独立文件夹和可视化工具 DreamView。代码量大,但每个模块都能单独编译运行。我之前给新人推荐的路线是:不要试图读完所有代码,先跑通 DreamView 的 sim_control 模式,让车在仿真环境里沿着路由点跑起来,然后顺着 planning 模块的代码找算法入口,理解轨迹是“怎么从一条参考线一步步生成出来的”。

Autoware 那边更偏 ROS2 生态,目前叫 Autoware Universe。它的安装方式比 Apollo 复杂,但优点是非常模块化,可以直接替换感知或规划插件。Autoware 的学习价值在于:它是目前很多高校课题组做算法实车部署的基础,你开源社区里搜一圈就知道,很多实车项目都基于 Autoware 改的。跑通 Autoware 之后,你对 ROS2 的节点通信、生命周期、参数服务的理解会上一个台阶。

4.3 嵌入式部署:Jetson、STM32、FPGA 各管一段

很多做算法的人习惯性忽略嵌入式开源项目,直到真上车才发现问题:训练好的模型怎么在车规级计算平台上跑?传感器数据经过什么接口送进来?控制指令怎么发给底盘?

NVIDIA Jetson 系列(比如 Jetson Orin Nano)是目前最常见的边缘部署平台,上面跑 TensorRT、DeepStream,配合 ROS2 和 CUDA 加速,能完成一个完整的感知 demo。对应热词里频繁出现的“嵌入式开源项目”,我比较推荐先看那些把小车底盘、Jetson、激光雷达和相机结合的项目,比如社区里的各种 ROS2 自主导航小车。这类项目麻雀虽小但五脏俱全,能让你在桌面尺度体验完整的“感知定位-控制”闭环。

STM32 在自动驾驶领域更多出现在底盘执行机构和车身控制模块。学它的时候不要只看裸机点灯,要往 CAN 通信、PWM 控制舵机、ADC 采集传感器这些方向走。FPGA 则常用于激光雷达点云预处理、相机图像矫正这类高吞吐低延迟任务,学习曲线陡,但确实很多硬件加速岗位点名要这个能力。新手入门的话,我建议先搞懂单片机侧的信号怎么换算成控制量,再考虑上 FPGA 加速。

4.4 跑开源项目的基本功

最后必须聊一个反直觉的事实:跑开源项目最大的障碍,往往不是算法,而是环境搭建。

自动驾驶项目依赖的老版本 PyTorch、CUDAToolkit、ROS 发行版,加上各种点云库、视觉库,互相之间版本冲突很正常。我自己的经验是:一律用 Docker。项目仓库里如果没有现成 Dockerfile,也要自己拿官方镜像为基础,把依赖固化下来。不要在主机的 Python 环境里直接 pip install,你早晚会为这个决定后悔。

C++ 能力同样绕不开,热词里也反复出现“C++开源项目学习”。不要求你成为 C++ 模板元编程专家,但至少要能看懂 CMakeLists、掌握类继承和多态、会分析智能指针的传递逻辑。Apollo 和 Autoware 的核心模块基本都是 C++,不会 C++ 去读这些项目的规划控制代码,基本等于读天书。

5. 数据与仿真:没有实车也能完成闭环测试

5.1 公开数据集怎么选

搞算法不是光看模型结构就行,数据的质量和标注格式决定了你训练流程怎么设计。这个环节我见过很多人随意选了一个数据集就开始跑,跑到一半发现传感器配置和论文对不上,又重新换一套,浪费时间。

KITTI 是历史最悠久、资料最多的自动驾驶数据集,数据是十几年前在德国采集的。但它的量大、开源生态成熟、各类框架官方支持最全,用来入门感知再好不过。nuScenes 来自安波福,采集自波士顿和新加坡,传感器配置更现代,包含6个相机、5个雷达、1个激光雷达和多台毫米波雷达,标注字段丰富,是做多模态感知的主流选择。Waymo Open Dataset 规模大、传感器质量高,不过申请审批流程比前两个麻烦一点,适合做深了之后再考虑。

语义分割方向,Cityscapes 和 Semantic KITTI 是常见组合。Cityscapes 主要做城市街景的2D语义分割,Semantic KITTI 则提供点云逐点语义标签,正好对应热词里反复出现的“自动驾驶语义分割”。建议顺序是:先用 KITTI 跑通3D检测,再用 Semantic KITTI 跑一个点云分割 demo,把这两条线打通,感知方向的核心能力就立住了。

5.2 CARLA 搭一个仿真闭环

仿真平台里,CARLA 现在的社区热度最高。它基于虚幻引擎开发,可以稳定输出相机图像、深度图、语义分割图、激光雷达点云,同时提供车辆动力学接口和行人/车辆/非机动车控制,学术界和工业界都用得很多。

我第一次搭 CARLA 的时候,最头疼的是它和 ROS 的桥接。当前主流的方案是在 Docker 里分别起 CARLA 服务端和 ROS bridge 容器,然后通过客户端脚本控制车辆。整体流程是:启动 CARLA 服务端,加载一张地图和若干车辆演员,然后启动自己的控制脚本,订阅传感器的 topic,用模型推理结果生成控制指令,通过 bridge 发回 CARLA。

CARLA 官方还维护了 Leaderboard 和 ScenarioRunner 这套评估体系,里面有大量“其他车加塞”“行人横穿马路”“前方突然停车”的场景。我建议你至少跑完其中三个最基础的场景,体会一下为什么“感知很准”和“行驶安全”是两回事。仿真里同时要留意 sim-to-real gap,在 CARLA 里调好的控制器参数,到了真车上依然可能需要重新整定。

5.3 Carsim、NI 与 VTD 联合仿真到底在解决什么问题

热词里出现了“carsim、ni和vtd联合仿真课题”,说实话,这个方向在资料合集中容易被忽视,但做工程的人会经常遇到。简单拆开讲:Carsim 是车辆动力学仿真软件,NL(NI)一般指实时测试与硬件在环平台,VTD(Virtual Test Drive)是三维虚拟场景仿真软件。

三者联合的典型场景是这样的:在 Carsim 里建立高精度的车辆动力学模型,模型运行在 NI 的实时机或 PXI 系统上,保证仿真步长确定且能对接真实控制器硬件;VTD 负责渲染道路环境、交通流和传感器信号,向感知模块提供图像和点云;Carsim 输出的车速、横摆角速度等车辆状态再反馈给 VTD,形成闭环。这套系统的价值在于:把“真实控制器”和“虚拟车辆/环境”放在一起做硬件在环测试,很多 OEM 和 Tier1 在算法上车前都要走这一步。

对还在学习阶段的同学来说,直接上手联合仿真条件比较难,因为这三个软件都不是免费开源,而且配置链路很长。我的建议是分两步走:先在 CARLA 里熟悉“虚拟环境+控制算法”的思维模式,再找个机会熟悉 Carsim 的单机仿真和 VTD 的独立场景编辑,最后再去理解它们之间的通信接口设计。把这个过程想通了,你简历上写“熟悉硬件在环流程”才站得住脚。

6. 怎么判断自己真的入门了:一份可执行的自测方案

6.1 四个阶段性验收标准

学了一堆课程和项目,怎么知道自己是不是真的入门了?我给自己和身边朋友常用四个验收标准。

第一,能不看资料画出全系统数据流。从相机/雷达的数据进来,经过感知模块、传感器融合、定位模块,到预测、规划、控制,最终输出给底盘执行器,每一步之间的数据格式是什么、话题名大概叫什么,能说清楚。

第二,能在 KITTI 上训练一个3D检测模型,并且把 mAP 结果复现到论文合理水平。不是用别人训练好的权重直接推理,而是自己从零开始配数据、训练、评估、可视化。

第三,能在 CARLA 里完成一个点对点自动驾驶 demo。小车能避开静态障碍物,能按导航点在模拟城市里开,遇到突然闯出的行人不会撞。哪怕算法很简单,只要这个闭环是通的,说明你已经具备自动驾驶开发的整体工程感。

第四,掌握 C++ 和部署链路的基础能力。能在 Jetson 上把一个 PyTorch 模型转成 TensorRT 引擎,并写一个简单的 ROS2 节点调用它。很多算法工程师卡在“跑得起来但部署不上去”,这一步跨过去,后面路就宽了。

6.2 我踩过的坑和现在的习惯

最后说几个这些年我自己亲身体会到的坑。

第一,不要在 GitHub 上一次性克隆二十个项目。我干过这种事,收藏时很开心,最后全躺在硬盘里。一个项目跑不通,问题大概率出在环境配置而不是你的能力,遇到报错先看 README 下面的常见问题,再检查版本号,不要上来就重装系统。

第二,不要只依赖中文二手资料。自动驾驶迭代太快,很多东西中文社区还没翻译,官方文档和 GitHub Issues 才是最新鲜的土壤。哪怕英文慢一点,一天多看三条 issue,三个月后你翻外文资料的速度会有质的飞跃。

第三,一定要养成记录的习惯。我现在的习惯是每次跑通一个开源项目,就在自己的博客里写一篇复盘,内容包括环境版本、主要改动、遇到的坑和最终效果。这个过程表面上是在输出,实际上是在逼自己把每个模块的逻辑理清楚。过半年再回头看,你会发现自己进步得非常快。

自动驾驶的学习路径注定比普通软件开发更宽、更深,但也不需要神话它。先把方向定清楚,视频、书籍、开源项目、数据集仿真四块搭配着来,每一步都亲手操作,用可量化的标准检验自己,就能一直往前推进。希望这份资料与学习思路,能让你少走一些我当年走过的弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询