
写这篇合集的起因很简单我身边每隔一阵就有人问我“想学自动驾驶到底从哪下手”我每次都要把视频、书、开源项目重新捋一遍。后来干脆给自己定了个规矩碰到就问不如把脑子里的资源整理成一份能直接照着走的地图这次分享的就是这份地图。先说清楚这篇文章定位。它不是那种“收藏了就等于学了”的链接堆砌而是按学习路径组织的资源体系视频负责快速建立直觉书籍负责把算法讲透开源项目负责让你动手跑起来数据集和仿真工具负责验证你的想法。无论你是刚接触自动驾驶的学生、想转行的工程师还是已经在做感知、控制、仿真相关工作的从业者都能从这里找到自己需要的那一层。我会把每类资源的选择理由、使用方法、以及踩过的坑都写出来你完全可以把它当作一份带注释的书单和工具箱。1. 资料合集的整体设计思路刚入行那会儿我也走过弯路买了一大堆书收藏了几十个GitHub仓库结果一个月过去代码没跑通几个书也只看完序言。后来我复盘才发现问题不在于资料不够而在于资料之间没有形成递进关系。这份合集之所以把视频、书籍、开源项目分成三条线是因为它们各自解决的是不同层次的问题。视频解决的是“这是什么”的问题让大脑快速建立画面感书籍解决的是“为什么是这样做”的问题把数学推导和应用场景连起来开源项目解决的是“我该怎么实现”的问题给你一套能跑的代码作为参照系。三条线交错推进比单刷任何一个维度都要快。1.1 我为什么按“视频-书籍-代码”的顺序组织举个例子你第一次听说“语义分割”这个概念先看视频里车辆实时识别车道线和行人的画面你会立刻明白感知模块在做什么。然后去看语义分割的综述和经典论文搞清楚FCN、UNet、DeepLab这些网络结构是怎么一步步演进的。最后打开开源项目找到具体模型和训练代码看看数据怎么加载、loss怎么设计、模型怎么部署到嵌入式设备上。这个顺序遵循的是认知规律具体的体验先于抽象的理论抽象的理论先于工程实现。反过来如果一上来就对着源码啃很容易被工程细节淹没三个月后连整体框架都没摸清。我自己吃过这个亏第一次看Apollo代码的时候从感知到决策到控制几千个文件完全不知道从哪里看起。后来重新按照“先看视频演示-再看架构设计文档-最后看核心模块源码”的顺序才真正看进去。1.2 不同基础的人使用这套资料的方式不同这条路径不是固定流水线需要根据自己的基础做减法或加法。完全没有编程和机器学习背景的话重点关注视频资源和入门书籍先建立整体认知再看开源项目时只需要理解代码结构不用纠结每个细节。有Python和深度学习基础的话可以跳过部分入门视频直接从多传感器融合或规划控制方向的书籍开始然后去改开源项目里的模型结构或参数。本身就是做传统汽车电子或嵌入式开发的那可以借着这套资料完成向智能驾驶方向的转身从ST系列嵌入式移植案例和自动驾驶操作系统这类开源项目切入会比从零学算法更快找到手感。1.3 这份合集覆盖的四大能力模块如果给自动驾驶工程师需要的能力做个拆分大致可以分成四块感知算法能力、决策规划能力、控制与系统集成能力、仿真与数据能力。视频和书籍解决前两块的理论问题开源项目负责把理论和工程串起来而数据集与仿真工具是验证各项能力的试验场。每一类资源里我都会挑出“最值得先看”的部分而不是罗列所有选项。选择标准有三个资料是否还在持续更新、社区活跃度是否够高、是否和当前行业主流技术栈匹配。因为自动驾驶技术迭代太快三年前的书可能已经过时两年前的项目可能已经不再维护选资料本质上是在选信息的新鲜度和质量。2. 视频与书籍先把地图画出来再谈具体路线视频和书一个管广度一个管深度。视频用几分钟到几十分钟的时间让你理解系统怎么运转书用几百页的篇幅让你明白每一个模块内部的细节。这两样都不可替代。2.1 视频资源从五分钟科普到体系化课程的阶梯我比较推荐先看两类视频一类是解决“整体认知”的科普向视频另一类是解决“系统学习”的课程向视频。前者帮你理解自动驾驶行业在做什么、有哪些上下游角色后者帮你真正进入工程师的工作状态。具体我常推荐的资源如下表资源类型推荐理由适合阶段公开的行业科普视频如TED、Waymo技术分享科普向建立整体认知了解技术边界和商业落地入门Coursera多伦多大学《Self-Driving Cars Specialization》课程向从感知、状态估计到规划控制体系完整带编程作业系统学习MIT 6.S094《Deep Learning for Self-Driving Cars》课程向课程视频公开作业和代码开源侧重深度学习在驾驶中的应用进阶B站上优秀的UP主复现类视频复现向手把手教你跑通某个开源项目能快速解决环境配置问题动手阶段如果你之前没有看过任何系统性课程我的建议是不要贪多选一门课程从头跟到尾。Coursera多伦多大学那门课我已经推荐过很多人它的作业设计很贴近实际工程——比如卡尔曼滤波那一节会让你真的在真实数据上做传感器融合而不是只推导公式。当然这类课程需要一点线性代数和概率论基础如果遇到公式卡壳翻一翻知乎或是B站的数学基础课程就能补上。这里有个经验看视频课程时一定要做笔记而且笔记要“按自己的话总结”而不是抄板书。因为自动驾驶的知识体系庞杂不做输出的学习等于没学两周后你就只记得“好像学过卡尔曼滤波”但完全不知道状态更新方程怎么推导。2.2 书籍资源直接看原版别只看中文译本书是必须要读的特别是算法方向。视频可以帮你快速了解全貌但如果你想深入理解某个模块比如代价函数如何设计、损失函数为什么这样收敛书里的推导和上下文是视频给不了的。自动驾驶领域值得反复翻的书我按模块列几个总体架构方向推荐《Autonomous Driving Changes and Big Data》这类综述性书籍能帮你建立全局观了解车辆平台、传感器配置、软件框架之间的关系。感知方向《Deep Learning》经典教材是基础配合《Computer Vision: Algorithms and Applications》来学视觉特征和三维几何会非常顺。状态估计方向概率机器人领域的经典教材必读里面的卡尔曼滤波、粒子滤波、贝叶斯网络都是自动驾驶定位和传感器融合的底层方法。规划控制方向《Planning Algorithms》对路径规划和运动规划讲得很深另外还有一本专门讲无人驾驶车辆模型预测控制的书籍对MPC控制讲得很细。系统与安全方向涉及功能安全、预期功能安全SOTIF、冗余设计等话题可以看ISO 26262和ISO 21448相关的工程类书籍。这里我特别想强调一点有英文阅读能力就不要看中文译本直接看原版。倒不是说翻译质量一定差而是算法领域的术语翻译不统一比如occupancy grid有的翻译成“占据栅格”有的翻译成“占用网格”读起来很撕裂。更关键的是中文版通常会滞后一年半载自动驾驶这种快速演进的领域滞后就是信息贬值。2.3 视频和书籍怎么搭配效率最高我自己的习惯是“视频开窍、书籍深化、代码验证”三步法。步骤很简单先找一段20分钟左右的视频把目标内容总览一遍搞清楚核心概念长什么样。然后带着问题去翻书只看和视频相关的章节不求一次全懂但求把公式和流程图理清楚。最后打开一个与之对应的开源项目找到相关代码把书上的公式和代码变量一一对应起来。这个过程听起来慢但其实是最快的方式。因为它把抽象的概念连着看了三遍而且每一遍的视角不同。我试过只刷书效率最低因为视觉和空间直觉很难从文字中获得只刷视频也不行遇到细节问题会卡死因为视频不会给你完整的推导过程。3. 开源项目这是你进入自动驾驶工程师状态最快的方式如果说视频和书籍是在“学”那么开源项目就是在“做”。你不需要自己从零写一套自动驾驶系统而是要站在巨人肩膀上——读它的架构改它的参数跑它的demo最后把它改造成你自己的实验平台。3.1 框架级开源项目大而全适合系统学习和二次开发自动驾驶领域有几个绕不开的框架级项目这类项目通常涵盖感知、定位、规划、控制全链路是学习系统架构最好的教材但也要注意它们的学习曲线比较陡峭。第一个是百度的Apollo这应该是国内知名度最高的自动驾驶开源平台。代码量巨大模块划分清晰配套文档详细还提供了仿真平台。学习Apollo的关键在于抓住主线不要上来就全看。我建议从最简单的那条链路开始跟踪感知模块输出障碍物交给预测模块处理轨迹预测然后决策规划模块生成轨迹最后控制模块计算油门刹车。把这条主链路的代码流程理顺比看完所有模块的源码更有效。第二个是Autoware源于名古屋大学的开源自动驾驶项目使用ROS 2作为中间件模块化程度很高社区也比较活跃。相对于ApolloAutoware更加灵活适合研究和实验场景很多高校实验室都在用它做算法验证。如果你想做算法层面的快速迭代比如换一种路径规划算法测试效果Autoware的改动成本会比Apollo更低。第三个是OpenPilot由Comma.ai公司开源这个项目比较特殊它更多面向后装辅助驾驶改装。你可以把代码部署到特定硬件上集成在真车中运行社区里有大量用户分享实测数据。它的特点是轻量级架构非常简洁代码量比Apollo小一个数量级非常适合作为第一次完整阅读的自动驾驶源码项目。这三个框架级项目怎么选我的建议是想搞清楚工业级完整架构的看Apollo想做研究和算法实验的看Autoware想低成本真车验证的看OpenPilot。三者不冲突可以按顺序依次接触。3.2 方向型开源项目小而美的专项突破框架级项目什么都覆盖但正因为覆盖广每个方向的代码深入程度反而有限。想在某一个具体方向钻下去要找方向型开源项目。感知方向强烈推荐看MOT多目标跟踪相关项目和语义分割项目。自动驾驶中的行人、车辆检测不是单张图片的事而是要连续跟踪这就涉及多目标跟踪算法。去GitHub搜一下“多目标跟踪”开源项目你会发现很多基于检测加跟踪模式的项目配合可视化工具能非常直观地看到算法效果。语义分割也是热词里提到的方向适合用来理解感知模块如何把像素语义化再结合BEV鸟瞰视角方案了解现在行业主流做法。规划控制方向有专门做轨迹预测和路径规划的单点开源项目。比如一些高校开源的场景决策项目会把路口博弈、换道决策这类经典场景拆开讲解。这类项目通常数据量小、模块独立特别适合拿来精读。定位方向可以看基于视觉或激光雷达的SLAM项目。我推荐先跑通视觉SLAM再用激光雷达SLAM做对比分析这样能直观感受到两种传感器在定位精度和鲁棒性上的差异。3.3 交叉领域开源项目嵌入式、FPGA、C同样重要搜索引擎热词里频繁出现嵌入式开源项目、STM32开源项目、FPGA开源项目、C开源项目学习说明很多人注意到自动驾驶不只是算法问题也是系统工程问题。真车上跑的不是Python脚本而是经过裁剪的C代码甚至部署在FPGA或嵌入式GPU上。这块我要多说一句很多算法出身的人容易忽略工程能力但在自动驾驶行业中部署能力往往决定了算法能不能落地。数据标注完、模型训练好如果不了解嵌入式平台上INT8量化、算子优化、内存对齐等概念性能就是上不去。在嵌入式方向我推荐从STM32平台起步。不要太急着直接啃自动驾驶大项目先找一些综合性的STM32开源项目比如做一个小型循迹车或遥控车改造理解传感器读取、电机控制、PWM调速、串口通信这些底层能力。有了这个基础之后再去看嵌入式平台上的人工智能推理框架比如TFLite Micro在MCU上的部署流程就会顺畅很多。在FPGA方向可以关注一些基于ZYNQ或Xilinx器件的开源项目用硬件描述语言做车道线检测加速器或卷积神经网络推断加速器。这类项目能让你理解为什么车载计算平台里既有GPU又有FPGA——不同芯片各司其职。C是自动驾驶算法工程化的基本语言怎么强调都不过分。如果你是从Python转过来的我建议专门过一遍现代C核心特性尤其是智能指针、移动语义、模板和内存管理。后再去读那些框架级开源项目的C源码你会发现顺畅很多。关于C开源项目学习我的经验是不要孤立学C而是在阅读自动驾驶源码时带出什么查什么这样效果最好。另外如果手头有遥控车模型你可以关注1:18通用2.4G遥控车改装开源项目。这类项目通常给出了从底层硬件接线到上层控制算法的一整套方案把遥控车的比例转向、速度反馈和嵌入式控制板结合起来可以作为低成本的线控底盘实验平台。虽然不能和真车底盘相比但用来验证循迹、避障、简单路径规划的逻辑完全够用。4. 数据集与仿真验证自动驾驶想法的最佳试练场有了一堆开源项目之后你面临的下一个问题就是数据从哪来场景怎么搭总不能在真马路上做实验。这就引出了自动驾驶中容易被忽视、但实际不可或缺的两个底座公开数据集和仿真平台。4.1 自动驾驶数据集把真实世界变成可计算的“题集”自动驾驶算法是需要数据喂养的尤其是感知和预测算法。公开数据集相当于标准化的“题集”一边是传感器原数据一边是标注好的答案算法在数据上训练和评测才能按照统一的标准比拼。常用数据集我列一下数据集主要传感器特点适用场景KITTI双目相机、激光雷达、GPS最早的自动驾驶公开数据集之一规模中等三维目标检测、立体匹配、光流nuScenes相机、激光雷达、毫米波雷达带有21类标注和丰富的场景属性多模态感知、多传感器融合、预测Waymo Open Dataset相机、激光雷达规模大场景分布广三维检测、运动预测、域适应ApolloScape相机、激光雷达、高精地图偏重型标注丰富语义分割、轨迹预测、场景理解新手很容易犯的错是“贪大”一上来就下载几百GB的数据集还没解压完就放弃了。我的建议是先选KITTI这类小规模但标注清晰的数据集入门把读取、预处理、可视化流程跑通再去处理nuScenes或Waymo这样大规模、多模态的数据。因为数据格式转换和可视化本身就是一个学习过程如果开始就陷入海量文件的管理中很容易劝退。另外一个经验是拿到数据集千万别直接用先写一个可视化的脚本把图像、点云、标注框叠加在一起显示出来。这一步能帮你快速理解数据集格式的来龙去脉比如相机坐标和激光雷达坐标是怎么对齐的标注框是三维的还是二维的对应传感器安装在哪里。很多算法效果不好回头排查发现是数据坐标变换理解错了这种坑在自动驾驶里尤其常见。4.2 仿真工具与carsim、ni、vtd联合仿真怎么搭一套完整闭环真实路测成本高、周期长、还有安全风险所以仿真平台在自动驾驶开发流程里扮演的角色越来越重。我之前看过一个说法自动驾驶99%的测试和验证都是在仿真中完成的直到最后阶段才会进入真实道路测试。虽然数字在不同厂商间有差异但思路是认同的仿真先行。常用的仿真工具主要有两类。一类是CARLA这种基于虚幻引擎的模拟器开源、场景丰富、支持传感器仿真和自动驾驶协议接口很多学术研究都在上面做。另一类是传统车辆动力学仿真跟实时系统的组合也就是热词里频繁提到的carsim、ni和vtd联合仿真。carsim、ni和vtd联合仿真这个课题很多高校和企业在做因为它解决的是一个关键问题单一仿真工具无法覆盖完整的自动驾驶测试需求。具体来说VTDVirtual Test Drive擅长模拟道路交通场景和传感器生成逼真的虚拟世界CarSim擅长车辆动力学建模能精准还原车辆的加速、制动、转向和悬架特性NI的软硬件平台比如VeriStand和实时机则负责把两者实时耦合起来并输出控制信号与数据采集。联合仿真课题难在哪我认为有三个层次。第一个层次是接口打通。car Sim和VTD各自用各自的数据格式和通信协议中间需要借助NI平台做协议转换和同步通常通过UDP、共享内存等方式交互。你看到的资料里如果涉及“联合仿真课题”大概率是在这个环节遇到了问题。第二个层次是时间同步。真实运行时车辆动力学模型需要高频更新通常几百赫兹而场景仿真器可能只需要几十赫兹的更新频率两者之间如何插值、如何对齐时间戳直接影响仿真的真实性和稳定性。第三个层次是场景一致性。VTD中看到的障碍物位置必须与CarSim内部的碰撞检测模型一致否则就会出现“视觉上避开了但动力学上撞上了”这种矛盾。如果你准备自己做联合仿真实验我的建议是从官方示例开始跑不要先急于从零搭建整个链路。先把示例的通信报文抓下来用Wireshark或NI的监控工具看数据流搞清楚哪条消息在更新车辆位置哪条消息在传递控制指令。当你能完整解释每一条报文的作用时离掌握这套工具链就不远了。4.3 语义分割从数据集到仿真场景的桥梁前面提到语义分割在热词里很常见这里单独讲一下。语义分割的任务是把图像中的每个像素分类为道路、车辆、行人、交通标志等语义类别是自动驾驶感知系统中非常基础的能力。如果你在无人车上看到那种把现场画面涂成不同颜色的效果背后就是语义分割模型在实时推理。学习语义分割资源上可以把视频、开源项目、数据集三者串起来先看视频理解FCN、UNet、DeepLab这些经典结构的原理再从开源项目里找一个训练好的模型跑推理最后用实际数据集的标注做评估量化mIoU平均交并比等指标。在仿真环境中语义分割还有一个独特优势——仿真器可以直接输出物体的Ground Truth标签不需要人工标注。CARLA这类仿真器就提供了语义分割相机可以一键生成逐像素标注图。你可以用这些数据训练模型再迁移到真实数据上做微调这也是目前行业里解决标注成本高的常用思路之一。当你能在仿真中生成语义分割训练数据、在开源模型中完成训练、在真实数据集上验证泛化性能时“感知”这一环就不只是一个理论概念了而是你亲手跑通的一条流水线。5. 动手实战路线把资料转化为能力的一条最好走的路径资料列了一大堆如果不用起来它们就只是收藏夹里的数字。下面这条实战路线是我跟身边人反复验证过的你可以按自身情况调整节奏但大方向不会错。5.1 第一阶段用CARLA或VTD跑通一个小任务第一阶段目标不是研究多深而是“跑通”。安装好仿真器选择一个有自动驾驶接口的版本让自带示例中的车辆在场景中自动行驶起来同时读取摄像头的图像流。别小看这一步很多人在这个动作上卡了好几天。这个阶段最常遇到的环境问题是版本不匹配CARLA版本和Python API版本不匹配、虚幻引擎渲染报错、NVIDIA驱动和CUDA版本冲突。建议严格按照官方文档推荐的版本组合进行安装不要混搭网上教程用的“另一套版本”。我见过太多人因为某个教程推荐了一个比较新的版本就和官方文档不一致结果花了一整天在填包的坑。跑通之后记录下几个关键信息仿真器实时画面帧率是多少、CPU和GPU占用率如何、API返回的数据长什么样。这些就是你后续做算法实验的性能基线。5.2 第二阶段用开源项目做算法改装第二阶段把开源项目和仿真平台结合起来。选一个你感兴趣的方向比如在CARLA里跑语义分割模型或者用Autoware在仿真环境中验证路径规划算法。具体操作建议先用项目自带的数据或仿真器生成的数据跑通别人的训练和推理流程然后调低学习率、修改批大小等超参数观察效果差异再尝试修改一层网络结构比如把骨干网络换掉或加一个注意力模块量化和对比模型效果。这个过程是训练深度学习能力最扎实的方法因为你不是在“做一个新项目”而是在“修改一个能跑的项目”成功概率和控制感都会强很多。做完一个闭环以后继续找下一个方向。比如你已做通感知模块就转向规划模块在CARLA里自定义一个场景要求车辆从A点自动开到B点并避开障碍物然后对比不同规划算法在同一场景下的表现。这种方向对比实验往往能帮你积累出对算法最直观的经验。5.3 第三阶段从仿真到低成本硬件验证仿真验证了逻辑但不代表代码在真实硬件上一定能跑。如果条件允许建议进入第三阶段——低成本硬件验证。起点可以是ST系列嵌入式开发板配合IMU、编码器、超声波传感器等模块做小车的底盘控制。你会发现仿真里一个指令就能完成的转向动作在真实硬件上要处理PWM校准、电机死区、轮速反馈等一大堆细节这些才是汽车电子工程师日常面对的问题。然后可以做成一个带有简单感知功能的小车实验平台树莓派或Jetson Nano作为主控USB摄像头作为视觉传感器在室内场景中跑通车道线识别和避障。这条路很像热词里提到的“遥控车改装开源项目”的玩法只不过你可以把改装目标从娱乐玩具升级成“研究平台”。这里我给一个重要的实操建议硬件调试时先确保底层驱动正常再做逻辑控制。很多同学一上来就直接写自主避障算法摄像头图像模糊、电机驱动抖动还去调算法参数最后容易得出“算法不行”的结论。但真实瓶颈可能在硬件稳定性上——供电不足导致电机转速波动、摄像头帧率不稳定导致检测延迟诸如此类。把底层指标先量化出来尤其是延时和抖动再逐步往上走这个习惯会帮你省下大量DEBUG时间。6. 常见问题与排查技巧实录写到这里我忍不住要把这些年看到和遇到的问题集中列一下因为大部分学习者的困境往往不是资料不够而是被同样的问题卡住了。6.1 仿真环境配置的常见问题环境问题占掉初学者一半时间的现象太普遍了。CARLA启动后黑屏或崩溃最常见的原因是显卡驱动不支持直接X或者Vulkan版本过旧这时候别急着卸载重装先检查驱动和Vulkan。VTD联合仿真连不上CarSim先确认TCP/UDP端口是否被防火墙拦截再确认两个软件是否在同一台机器或同一局域网内。Autoware在ROS 2环境下编译报错很多时候是依赖版本冲突建议直接用官方提供的Docker镜像而不是自己搭建基础环境。给一个通用技巧所有仿真工具安装前先看官方文档中的“System Requirements”和“Compatibility”部分并严格按它们匹配版本。老话说得好——版本不匹配是万恶之源特别是自动驾驶生态里框架升级频繁牵一发动全身。6.2 数据集和标注的坑数据集最常见的坑有三个。一个是坐标系统不对齐。KITTI和nuScenes的相机坐标、激光雷达坐标、车辆坐标定义都不同转换时单位不统一毫米、米混用或旋转矩阵顺序错误都会导致可视化时标注框乱飞。建议动手前先按官方文档补齐坐标变换工具链把结果可视化出来确认没有偏差再向下走。另一个是数据类别不平衡。公开数据集中行人、自行车等小目标的标注数量远小于车辆如果直接训练模型容易对小目标漏检。建议损失函数中引入类别权重或对少样本类别做数据增强。第三个是传感器标定。在真实场景中激光雷达和相机的外参标定不好融合出来的点云和图像永远是对不齐的。开源标定工具不少但标定过程需要反复精调不要指望一次跑通就一劳永逸。6.3 开源项目读代码的常见心态与方法问题读开源项目最容易出现的心理问题是“从头到尾逐行看完”这几乎注定要失败。Apollo这种项目的代码量比一般工业系统还大没有人能一行行读完。正确的方法应该是“按模块按链路”读。先找一张项目的整体架构图官方网站或论文中通常都有在图中找出你关注的一条链路然后从入口函数开始沿着数据流在一到两个关键模块里深入其他部分先跳过。你下一次读再换另一条链路。几次迭代后整个项目的全貌就自然清晰了。另一个方法是“带着任务读”。比如你是想搞清楚碰撞检测是怎么实现的那就直接在GitHub上搜“collision”或“safety”相关代码读一个具体函数比泛泛浏览整个项目有效得多。6.4 心态层面的真实建议最后说点掏心窝的话。自动驾驶是一个多学科交叉的领域算法、系统、硬件、安全、法规都绕不开任何人都很难在短期内全部掌握。有挫败感是正常的没必要给自己太大压力。我自己带过不少人也见过很多学习者最后真正走出来的不是那些一开始最“聪明”的而是那些能把一个大目标拆成小块、然后一块块搞定的人。今天跑通一个语义分割模型明天读懂一条规划代码后天在仿真里调通一次自动刹车把这些小成果积累起来半年后回看你会发现自己已经走了很远。这套资料合集的最终目的不是让你“知道很多”而是让你“做出来一点”——哪怕只是从代码运行界面里看到自己修改的自动驾驶策略真的让车辆在虚拟世界中平稳避开障碍那个瞬间的成就感值得你投入所有时间。