ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

自动驾驶学习路线:从感知规划到仿真部署的全链路指南

自动驾驶学习路线:从感知规划到仿真部署的全链路指南 每年都会收到好几批私信问的问题基本都指向同一个方向想学自动驾驶但资料太多了不知道从哪下手。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 与多伦多大学专项课程视频资料这块我踩过最深的坑就是跟着营销号“学自动驾驶”学了一堆名词但完全没有体系。真正值得反复刷的还是那些背景扎实的课程。如果你是零基础首推斯坦福的 CS231nConvolutional 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 是车辆动力学仿真软件NLNI一般指实时测试与硬件在环平台VTDVirtual 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三个月后你翻外文资料的速度会有质的飞跃。第三一定要养成记录的习惯。我现在的习惯是每次跑通一个开源项目就在自己的博客里写一篇复盘内容包括环境版本、主要改动、遇到的坑和最终效果。这个过程表面上是在输出实际上是在逼自己把每个模块的逻辑理清楚。过半年再回头看你会发现自己进步得非常快。自动驾驶的学习路径注定比普通软件开发更宽、更深但也不需要神话它。先把方向定清楚视频、书籍、开源项目、数据集仿真四块搭配着来每一步都亲手操作用可量化的标准检验自己就能一直往前推进。希望这份资料与学习思路能让你少走一些我当年走过的弯路。
返回列表