1. 课程定位与核心价值拆解
1.1 这门课到底在讲什么
“自动驾驶1-2 欢迎来到课程”这个标题,乍一看像是一句客套话,但放在整个自动驾驶课程体系里,它其实是整条学习路径的入口锚点。我翻过不少同类课程的开篇章节,大多数要么一上来就堆公式,要么直接甩代码,新手还没搞清楚“感知、决策、控制”分别对应车上的哪些硬件,就被劝退了。而这个开篇的设计思路明显不同——它把“建立全局认知”放在了第一位。
从课程编号“1-2”能看出,这是第一模块的第二讲,前接“1-1 课程总览”,后续大概率是“1-3 自动驾驶分级标准”或“1-4 传感器概述”之类的内容。这种编排逻辑很清晰:先用一讲告诉你“这门课要带你走多远”,再用一讲告诉你“我们沿着什么路线走”,最后才进入具体技术点。说白了,这一讲的核心任务不是教你写代码,而是帮你画一张地图,让你知道后面每一站大概在什么位置。
我个人的判断是,这一讲适合三类人:第一类是刚接触自动驾驶的在校学生,需要快速建立领域框架;第二类是从其他方向转过来的工程师,比如从传统车辆工程、机器人或计算机视觉转行,需要知道自己的技能栈能对应到自动驾驶的哪个环节;第三类是对自动驾驶感兴趣的产品经理或投资人,不需要动手实操,但需要理解技术边界和关键难点。如果你属于这三类中的任何一类,这一讲值得认真看两遍。
1.2 为什么开篇要讲“欢迎”而不是直接上技术
很多人会觉得“欢迎来到课程”这种内容水,但我实际做过课程设计之后发现,开篇讲什么、怎么讲,直接决定了后续的完课率。自动驾驶这个领域有个特点:知识密度极高,且跨学科严重。一个典型的自动驾驶系统涉及计算机视觉、雷达信号处理、传感器融合、路径规划、控制理论、嵌入式系统、功能安全等多个方向。如果开篇不把这些模块之间的关系讲清楚,学员学到第三周就会迷失——不知道自己学的这个算法在整个系统里到底扮演什么角色。
所以这一讲的设计意图,我理解是三个层面:建立坐标系,让你知道每个技术点在整个自动驾驶栈中的位置;降低认知负荷,先给框架再填细节,避免一上来就被细节淹没;明确学习路径,告诉你先学什么后学什么,哪些是核心哪些是扩展。这三点做到了,后面哪怕遇到再难的内容,你也能找到自己的位置。
提示:如果你已经有一定基础,这一讲可以快速浏览,但建议重点关注课程中给出的模块划分图和技能树,那些图往往比文字更有信息量。
2. 自动驾驶课程的知识体系与模块划分
2.1 典型自动驾驶课程的五大模块
虽然不同课程的具体编排有差异,但一个完整的自动驾驶入门到进阶课程,通常绕不开五个核心模块。我在对比了多个公开课程大纲之后,总结出下面这个通用框架,你可以把它当作学习路线的参考。
| 模块 | 核心内容 | 关键技能 | 建议投入时间占比 |
|---|---|---|---|
| 环境感知 | 摄像头、激光雷达、毫米波雷达、超声波 | 目标检测、语义分割、点云处理 | 30% |
| 定位与建图 | GNSS、IMU、视觉里程计、SLAM | 多传感器融合、地图匹配 | 20% |
| 决策规划 | 行为预测、路径规划、运动规划 | 搜索算法、优化方法、强化学习 | 25% |
| 控制执行 | 横向控制、纵向控制、轨迹跟踪 | PID、MPC、车辆动力学 | 15% |
| 系统集成 | 中间件、仿真、功能安全、测试 | ROS/ROS2、CARLA、ISO标准 | 10% |
这个比例不是随便定的。感知占30%是因为它是整个系统的输入源头,数据质量直接决定后续所有环节的上限。决策规划占25%是因为它最考验算法设计能力,也是各家方案差异最大的地方。控制占15%是因为在低速场景下控制难度相对可控,但在高速场景下控制精度要求极高。系统集成虽然只占10%,但它是把前面所有模块串起来的关键,缺了它整个系统跑不起来。
2.2 各模块之间的依赖关系
理解模块之间的依赖关系,比单独学每个模块更重要。我见过不少学员,感知学得很好,但不知道感知输出的结果怎么给到规划模块用;规划也学得不错,但不知道规划出的轨迹怎么转成控制指令。这就是典型的“模块孤岛”问题。
用一句话概括依赖链:感知提供环境信息,定位提供自车状态,规划基于两者做出决策,控制把决策转化为执行,系统集成把这一切串起来并保证可靠性。这条链上任何一个环节出问题,整个系统都会失效。比如感知漏检了一个行人,规划再完美也没用;定位漂移了半米,规划出的路径可能直接撞上护栏。
所以这一讲如果讲得好,应该会花不少篇幅解释这条依赖链,而不是简单罗列模块名称。你在学习时也要有意识地问自己:我现在学的这个技术,它的输入是什么、输出是什么、下游是谁在用?
2.3 从课程编号看学习节奏
“1-2”这个编号暗示了课程的整体节奏。第一模块通常是导论性质,用4到6讲把全局框架搭起来,包括课程介绍、分级标准、系统架构、传感器概览、开发工具链等。第二模块开始进入具体技术,比如感知部分会从图像基础讲起,逐步过渡到目标检测和语义分割。
我建议的学习节奏是:第一模块不要跳,哪怕你觉得内容简单也要过一遍,因为后面所有内容都建立在这个框架之上。第二模块开始可以根据自己的基础选择性加速,比如你已经有深度学习基础,图像分类那部分可以快速过,重点看目标检测在自动驾驶场景下的特殊处理。第三模块之后基本没有捷径,每个算法都需要动手实现一遍才能真懂。
注意:不要在第一模块就陷入细节。有些学员看到“传感器概述”就跑去研究激光雷达的物理原理,结果两周过去了还在第一模块。正确的做法是先建立框架,细节留到对应模块再深入。
3. 学习自动驾驶前需要打好的基础
3.1 数学与编程基础要求
自动驾驶不是纯软件问题,也不是纯算法问题,它对基础的要求比较综合。我按重要性排个序,你可以对照自己的情况查漏补缺。
数学方面,线性代数是第一优先级。矩阵运算、特征值分解、坐标变换,这些在感知、定位、控制里到处都是。你不需要成为数学系水平,但至少要能看懂矩阵乘法、理解旋转矩阵和平移向量的含义。概率论排第二,因为传感器有噪声,状态估计离不开贝叶斯滤波。微积分排第三,控制里的PID和MPC都需要对微分方程有基本概念。优化理论排第四,规划模块大量使用凸优化和非线性优化。
编程方面,Python是入门首选,生态好、上手快,大部分教学代码和开源项目都用Python。C++是进阶必备,实际车载系统对实时性要求高,最终部署基本都用C++。ROS或ROS2是工具链核心,不会ROS基本没法做系统集成。Linux命令行是日常操作环境,这个不用多说。
| 基础项 | 最低要求 | 建议水平 | 学习资源类型 |
|---|---|---|---|
| 线性代数 | 理解矩阵运算和坐标变换 | 能推导旋转矩阵 | 公开课+习题 |
| 概率论 | 理解条件概率和贝叶斯公式 | 能推导卡尔曼滤波 | 教材+代码实现 |
| Python | 能写函数和类 | 熟练使用NumPy | 官方文档+小项目 |
| C++ | 能看懂基本语法 | 理解指针和内存管理 | 教材+刷题 |
| ROS | 知道节点和话题概念 | 能写简单发布订阅 | 官方教程+仿真 |
3.2 工具链与开发环境准备
这一讲虽然不涉及具体编码,但通常会提到后续要用到的工具链。我建议在学完这一讲之后,就把环境搭起来,不要等到要用的时候再折腾。
操作系统:Ubuntu是主流选择,版本建议20.04或22.04,这两个版本的ROS支持最完善。如果你用Windows,可以装双系统或者用虚拟机,但虚拟机跑仿真会比较卡,后期建议还是上原生Ubuntu。
ROS安装:ROS1和ROS2目前并存,新手建议直接学ROS2,因为新项目基本都在往ROS2迁移。安装方式推荐apt安装,不要源码编译,除非你有特殊需求。安装完之后跑一遍小海龟仿真,确认基本功能正常。
仿真环境:CARLA是最常用的自动驾驶仿真器,基于Unreal Engine,画面逼真但对显卡要求高。LGSVL是另一个选择,轻量一些但更新不如CARLA活跃。如果显卡不够,可以先用Gazebo做算法验证,虽然场景简单但足够跑通流程。
Python环境:强烈建议用conda管理虚拟环境,不要直接在系统Python里装包。自动驾驶相关的包版本冲突很常见,虚拟环境能帮你省很多麻烦。核心包包括NumPy、OpenCV、PyTorch或TensorFlow、Matplotlib。
提示:环境搭建过程中遇到问题,优先查官方文档和GitHub Issues,不要一上来就在群里问。大部分报错信息都能搜到解决方案,自己解决一次比问十次收获更大。
3.3 车辆工程与交通规则常识
这一点经常被忽略,但实际很重要。你不需要成为车辆工程师,但至少要理解几个基本概念:车辆的运动学模型(自行车模型是最常用的简化)、轮胎的侧偏特性、制动距离与速度的关系。这些在控制模块会直接用到。
交通规则方面,你需要知道车道线类型(实线、虚线、双黄线)、交通标志含义、优先通行规则。这些在规划模块会转化为约束条件。比如实线不能变道,这就是一个硬约束;路口右转要让直行,这是一个软约束但违反会导致事故。
我个人的经验是,花半天时间看一下车辆工程的基础章节,再花半天看一下交通规则图解,后面学规划和控制的时候会顺畅很多。否则你可能会写出数学上正确但物理上不可行的轨迹,或者规划出一条违反交规的路径而不自知。
4. 自动驾驶核心技术点深度解析
4.1 感知模块:从传感器到目标列表
感知模块的任务可以概括为一句话:把原始传感器数据转化为结构化的环境描述。输入是摄像头图像、激光雷达点云、毫米波雷达回波,输出是带类别、位置、速度、朝向的目标列表,以及可行驶区域、车道线等语义信息。
摄像头擅长分类和纹理识别,能读出交通标志上的文字,但测距精度差,受光照影响大。激光雷达测距精度高,能直接得到三维点云,但成本高且对雨雾敏感。毫米波雷达测速准、穿透力强,但分辨率低,难以区分近距离的多个目标。所以实际系统都是多传感器融合,取长补短。
融合的层次有三种:数据级融合,把原始数据对齐后一起处理,信息损失最小但计算量大;特征级融合,各自提取特征后再融合,平衡了性能和算力;目标级融合,各自输出目标列表再关联,实现简单但信息损失最大。目前量产方案多用目标级融合,因为算力可控且便于模块化开发。
感知模块的难点在于长尾场景。正常行驶场景下,检测准确率很容易做到95%以上,但剩下的5%才是决定系统能不能上路的關鍵。比如被遮挡一半的行人、侧翻的货车、施工路段的临时标志,这些场景训练数据少,模型容易失效。解决思路包括数据增强、仿真生成、主动学习等,但至今没有完美方案。
4.2 定位与建图:知道自己在哪
定位模块要回答两个问题:我在哪和周围是什么样。前者是自车定位,后者是环境建图。两者相互依赖,定位需要地图作为参考,建图需要准确的定位来拼接。
GNSS在开阔环境下能提供米级定位,但城市峡谷和隧道里信号丢失,需要IMU和轮速计来推算。IMU短期精度高但会漂移,轮速计在打滑时失效。视觉里程计通过相邻帧的特征匹配来估计运动,但光照变化和纹理缺失会导致失败。激光里程计精度高但点云匹配计算量大。
实际系统通常用多传感器融合方案,比如GNSS+IMU+轮速计的紧组合,再用视觉或激光做校正。卡尔曼滤波及其变种(扩展卡尔曼、无迹卡尔曼、粒子滤波)是主流方法。近年来基于优化的方法(因子图优化)也越来越流行,因为它能更好地处理历史信息。
高精地图是另一个关键。它不同于导航地图,精度要到厘米级,包含车道线、路沿、交通标志、信号灯位置等丰富信息。高精地图的制作和维护成本极高,所以现在有轻地图甚至无图的趋势,依靠实时感知来替代部分地图功能。但完全无图目前还做不到,因为感知在远距离和遮挡场景下可靠性不够。
4.3 决策规划:从A点到B点的智慧
规划模块分三层:任务规划决定走哪条路,比如从家到公司走高速还是走地面;行为规划决定当前该做什么,比如跟车、变道、超车、让行;运动规划生成具体的轨迹,包括位置、速度、时间信息。
任务规划本质是图搜索问题,Dijkstra和A*是最常用的算法。行为规划常用有限状态机或行为树,优点是逻辑清晰可解释,缺点是状态多了之后维护困难。近年来也有用强化学习做行为决策的研究,但量产落地还很少,主要因为安全性和可解释性难以保证。
运动规划的方法分两大类:基于采样的方法(RRT、RRT*)和基于优化的方法(EM Planner、凸优化)。采样方法概率完备,但生成的轨迹不平滑;优化方法轨迹平滑,但容易陷入局部最优。实际系统常用两者结合,先用采样找到可行解,再用优化做平滑。
规划模块最大的挑战是交互场景。无保护左转、匝道汇入、环岛通行,这些场景需要理解其他交通参与者的意图并做出博弈决策。目前主流方案还是基于规则的博弈,比如用代价函数来平衡安全和效率。但规则越写越多,系统越来越复杂,维护成本急剧上升。这也是为什么端到端方案近年来受到关注,它试图用一个神经网络直接完成从感知到规划的映射,但目前还处于研究阶段。
4.4 控制执行:让车听话
控制模块的任务是让车辆精确跟踪规划出的轨迹。横向控制管方向盘,纵向控制管油门和刹车。两者通常解耦处理,因为横向和纵向的动力学特性差异较大。
横向控制最常用的是纯跟踪和Stanley方法。纯跟踪的原理很简单:在轨迹上找一个前视点,计算车辆当前朝向与前视点方向的夹角,用这个夹角来控制方向盘。前视距离是关键参数,太短会导致震荡,太长会导致切弯。Stanley方法同时考虑前轮偏角和横向误差,在低速下表现更好。
纵向控制常用PID控制器。P项响应当前误差,I项消除稳态误差,D项抑制超调。三个参数的整定是个经验活,通常先用齐格勒-尼科尔斯方法得到初始值,再根据实际表现微调。高速场景下,风阻和坡度会影响加速度,需要做前馈补偿。
进阶方案是模型预测控制。它利用车辆动力学模型预测未来一段时间内的状态,通过求解优化问题得到最优控制序列。MPC的优点是能处理约束(比如方向盘转角限制、加速度限制),缺点是计算量大,对实时性要求高。随着车载芯片算力提升,MPC在量产项目中的应用越来越多。
注意:控制模块的调试一定要在仿真里先跑通,再上实车。实车调试风险高,一个参数错误就可能导致事故。仿真里可以放心大胆地试,实车上必须保守再保守。
5. 实操入门:从零跑通第一个自动驾驶仿真
5.1 环境搭建与依赖安装
这一讲虽然不要求动手,但如果你已经迫不及待想跑点东西,可以跟着下面的步骤走一遍。整个过程大概需要两到三个小时,取决于网速和电脑配置。
第一步,确认系统版本。打开终端,输入lsb_release -a,确认是Ubuntu 20.04或22.04。如果是其他版本,ROS安装可能会遇到依赖问题。
第二步,安装ROS2 Humble。依次执行以下命令:
sudo apt update && sudo apt install curl gnupg lsb-release sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null sudo apt update sudo apt install ros-humble-desktop第三步,配置环境变量。在~/.bashrc末尾添加source /opt/ros/humble/setup.bash,然后执行source ~/.bashrc。
第四步,验证安装。新开终端,输入ros2 run demo_nodes_cpp talker,再开一个终端输入ros2 run demo_nodes_cpp listener,如果能看到消息收发,说明ROS2安装成功。
第五步,安装CARLA。从官网下载对应版本的压缩包,解压后运行./CarlaUE4.sh。第一次启动会编译着色器,需要等几分钟。看到城市画面后,说明仿真器就绪。
5.2 第一个仿真场景:直线巡航
环境搭好之后,我们跑一个最简单的场景:车辆在直道上以恒定速度巡航。这个场景虽然简单,但包含了感知、规划、控制的基本流程。
首先,启动CARLA服务端:
./CarlaUE4.sh -quality-level=Low然后,新建一个Python脚本,连接CARLA并生成车辆:
import carla import time client = carla.Client('localhost', 2000) client.set_timeout(10.0) world = client.get_world() blueprint_library = world.get_blueprint_library() vehicle_bp = blueprint_library.filter('vehicle.*')[0] spawn_point = world.get_map().get_spawn_points()[0] vehicle = world.spawn_actor(vehicle_bp, spawn_point) vehicle.set_autopilot(True) time.sleep(60) vehicle.destroy()这段代码利用CARLA内置的自动驾驶功能,让车辆自动巡航。虽然简单,但你可以通过CARLA的 spectator 视角观察车辆的行驶轨迹,感受一下规划和控制的实际效果。
如果你想自己实现控制逻辑,可以关闭autopilot,手动设置油门和方向盘:
vehicle.set_autopilot(False) control = carla.VehicleControl() control.throttle = 0.5 control.steer = 0.0 vehicle.apply_control(control)这样车辆会以50%油门直行。你可以修改throttle和steer的值,观察车辆的反应。这就是最基础的控制实操。
5.3 数据采集与可视化
跑通基本控制之后,下一步是采集传感器数据并可视化。以摄像头为例:
camera_bp = blueprint_library.find('sensor.camera.rgb') camera_bp.set_attribute('image_size_x', '800') camera_bp.set_attribute('image_size_y', '600') camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) camera = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle) def save_image(image): image.save_to_disk('output/%06d.png' % image.frame) camera.listen(save_image)这段代码会在车辆前方安装一个摄像头,每帧图像保存到output目录。你可以用OpenCV读取这些图像,做目标检测或车道线检测的练习。
激光雷达的数据采集类似,只是传感器类型换成sensor.lidar.ray_cast,保存格式换成点云。点云可视化可以用Open3D或Mayavi,也可以转成鸟瞰图再用OpenCV显示。
提示:CARLA的传感器数据量很大,长时间采集会占满硬盘。建议设置采集时长或帧数限制,及时清理不需要的数据。
6. 常见问题与排查技巧实录
6.1 环境配置类问题
问题一:ROS2安装后找不到命令。最常见的原因是环境变量没配置。检查~/.bashrc里有没有source语句,或者手动执行source /opt/ros/humble/setup.bash看是否正常。如果还不行,检查安装是否完整,用dpkg -l | grep ros-humble查看已安装的包。
问题二:CARLA启动报显卡错误。CARLA对显卡有一定要求,至少需要4GB显存。如果显存不够,可以降低画质等级,用-quality-level=Low启动。如果是NVIDIA显卡,确保安装了正确的驱动,用nvidia-smi检查驱动状态。
问题三:Python包版本冲突。这是最烦人的问题之一。解决方案是用conda创建独立环境,每个项目一个环境。如果已经冲突了,用pip list查看版本,手动降级或升级冲突的包。实在不行就重建环境,把依赖写进requirements.txt一次性安装。
6.2 仿真运行类问题
问题四:车辆不动或乱动。先检查autopilot是否开启,再检查控制指令是否合理。如果油门给得太大,车辆会猛冲;如果方向盘角度太大,车辆会画龙。建议从很小的油门和零方向盘开始,逐步增加。
问题五:传感器数据为空。检查传感器是否正确attach到车辆上,检查传感器类型和属性设置是否正确。摄像头要设置图像尺寸,激光雷达要设置通道数和范围。如果数据还是空,可能是仿真器时间没推进,需要调用world.tick()或设置同步模式。
问题六:仿真速度太慢。CARLA默认以实时速度运行,如果电脑性能不够,可以设置固定时间步长并加速。在设置里把fixed_delta_seconds设为0.05,然后用world.tick()手动推进,这样仿真速度可以比实时快很多。
6.3 学习路径类问题
问题七:学完基础之后不知道下一步学什么。这是最常见的问题。我的建议是选一个具体场景深入,比如“城市道路跟车”或“高速匝道汇入”,然后围绕这个场景把感知、规划、控制都做一遍。不要贪多,一个场景做透比十个场景都浅尝辄止收获大得多。
问题八:理论懂了但代码写不出来。这是典型的“眼高手低”。解决方案只有一个:动手写。从最简单的开始,比如自己实现一个PID控制器,再实现一个纯跟踪算法。写不出来就查资料,查完再写。写够一万行代码,自然就通了。
问题九:不知道自己的水平够不够找工作。一个简单的判断标准:你能不能独立完成一个仿真场景下的自动驾驶demo,从感知到控制全链路跑通。如果能,基本达到了入门水平。如果能进一步优化性能、处理边界场景,那就达到了进阶水平。
| 问题类型 | 典型表现 | 排查思路 | 解决方向 |
|---|---|---|---|
| 环境配置 | 命令找不到、包冲突 | 检查环境变量和版本 | 重建虚拟环境 |
| 仿真运行 | 车辆不动、数据为空 | 检查控制指令和传感器 | 调整参数或同步模式 |
| 学习路径 | 不知道学什么、写不出代码 | 选定场景深入 | 动手实现核心算法 |
| 性能优化 | 仿真太慢、检测不准 | 检查算力瓶颈和数据质量 | 降画质或增强数据 |
7. 从入门到进阶的路线建议
7.1 第一阶段:建立框架与跑通流程
这个阶段的目标是“知道有什么”和“能跑起来”。具体来说,学完导论模块,理解自动驾驶的五大模块和依赖关系;搭好开发环境,能启动仿真器并控制车辆;跑通一个最简单的感知-规划-控制链路,哪怕每个环节都是用现成工具。
时间投入建议两到四周,取决于你每天能投入多少时间。这个阶段不要追求深度,追求广度。每个模块都摸一下,知道大概是怎么回事就行。遇到不懂的术语先记下来,后面学到对应模块再回头理解。
我见过不少学员在这个阶段就卡住了,原因是想一口吃成胖子。比如一上来就想自己写一个目标检测网络,结果两周过去了连数据加载都没搞定。正确的做法是用现成模型先跑通,再逐步替换成自己的实现。
7.2 第二阶段:深入核心算法与动手实现
这个阶段的目标是“知道为什么”和“能改”。具体来说,深入每个模块的核心算法,理解其原理和适用场景;能自己实现关键算法,比如卡尔曼滤波、A*、PID;能修改开源代码来适配自己的需求。
时间投入建议三到六个月。这个阶段是最苦的,但也是收获最大的。你需要大量阅读论文和开源代码,同时自己动手写。我的建议是每个算法都从零实现一遍,不要直接调库。调库谁都会,但只有自己实现过,才能真正理解算法的边界和坑。
比如卡尔曼滤波,公式看起来简单,但实际调参时过程噪声和观测噪声怎么设,初始状态怎么给,这些都没有标准答案。只有自己踩过坑,才知道怎么处理。
7.3 第三阶段:系统集成与性能优化
这个阶段的目标是“能跑好”和“能落地”。具体来说,把各个模块集成到一个完整的系统中,处理模块间的通信和时序问题;优化系统性能,满足实时性要求;处理边界场景,提高系统鲁棒性。
时间投入建议六个月以上。这个阶段更多是工程问题而非算法问题。你需要理解ROS2的通信机制、掌握C++的性能优化技巧、学会用profiling工具找瓶颈。这些技能在课程里往往讲得少,但在实际工作中极其重要。
我个人的体会是,从“能跑”到“跑好”的距离,比从“不会”到“能跑”的距离还要长。因为前者只需要理解原理,后者需要处理无数细节。但正是这些细节,决定了系统能不能真正上路。
提示:不要等到三个阶段都走完才去找工作。完成第二阶段就可以开始投简历了,第三阶段的经验可以在工作中积累。很多公司更看重你的学习能力和动手能力,而不是你已经会了多少。
7.4 持续学习与社区参与
自动驾驶是一个快速发展的领域,新技术层出不穷。保持学习的最好方式是参与社区。GitHub上有很多优秀的开源项目,比如Autoware、Apollo、CARLA,你可以读代码、提Issue、甚至提交PR。参与开源不仅能提升技术,还能积累作品集。
学术方面,关注顶会论文,比如CVPR、ICRA、ITSC。不需要每篇都精读,但要知道领域的前沿方向。比如近年来端到端自动驾驶、占用网络、大模型在自动驾驶中的应用,都是热门方向。
最后,保持动手。看再多论文和课程,不动手都是空的。我见过太多人收藏了几百个教程,但一个都没跑过。选一个方向,扎进去,做出来,这比什么都重要。
这个内容后续还可以这样扩展:如果你对感知方向感兴趣,可以深入研究BEV感知和占用网络;如果对规划感兴趣,可以研究基于学习的规划方法和博弈论;如果对系统感兴趣,可以研究功能安全和预期功能安全。每个方向都足够深,够你钻研好几年。