第一章:自动驾驶系统概述
各位同学好,我是你们这门课的老朋友。今天咱们聊聊自动驾驶系统的整体面貌。说实话,我入行那会儿,自动驾驶还是个实验室里的概念。现在呢?满大街的测试车在跑。变化真快。
这一章,我会带大家从三个维度切入:分级标准、系统架构、以及嵌入式实时系统的角色。嗯,这些都是后续所有章节的基石。你想想看,如果连车能干什么、系统长什么样都不清楚,后面谈实时调度、谈功能安全,那都是空中楼阁。
1.1 SAE L0-L5 分级标准
先说说分级。SAE J3016 标准把自动驾驶分成了6个等级。我建议你把这个表格记在心里,面试时经常被问到。
| 等级 | 名称 | 核心特征 | 典型场景 |
|---|---|---|---|
| L0 | 无自动化 | 人类全权驾驶,系统仅提供警告 | 倒车雷达、碰撞预警 |
| L1 | 驾驶辅助 | 横向或纵向单一控制 | 定速巡航、车道保持 |
| L2 | 部分自动化 | 横向+纵向同时控制,人类需监控 | 特斯拉Autopilot、ACC+LKA |
| L3 | 有条件自动化 | 系统负责驾驶,人类需接管 | 奥迪A8 Traffic Jam Pilot |
| L4 | 高度自动化 | 限定区域内完全自动驾驶 | Robotaxi、无人配送车 |
| L5 | 完全自动化 | 全场景、全工况,无需人类 | 理想中的无人驾驶 |
关键点:L3 是个分水岭。L3 以下,责任在人类;L3 及以上,责任在系统。我在项目中遇到过很多客户,上来就说「我们要做 L4」。但实际一聊,连 L2 的感知融合都没搞定。我的建议是:从 L2+ 起步,稳扎稳打。
为什么会这样?因为 L3 的「接管」机制极其复杂。系统需要提前几秒给人类驾驶员发出请求,如果人类没反应怎么办?系统得自己降级到安全状态。这背后是大量的实时性保障和状态机设计。说白了,L3 比 L4 在某些方面更难做。
1.2 系统架构概览:感知-决策-执行
自动驾驶系统,说白了就是三个环节:感知、决策、执行。我习惯把它比作一个人:眼睛看路、大脑判断、手脚操作。
1.2.1 感知层
感知层负责「看」和「理解」。传感器包括摄像头、激光雷达、毫米波雷达、超声波等。每个传感器都有脾气。
- 摄像头:分辨率高,但怕逆光、怕黑夜。我踩过坑——有一次测试车在隧道出口直接「失明」了,因为亮度突变。
- 激光雷达:精度高,但怕雨雪雾。而且贵。嗯,现在固态激光雷达便宜多了,但点云质量还是不如机械式。
- 毫米波雷达:全天候,但分辨率低。静止目标容易漏检。
- 超声波:近距离神器,但只能测距,不能成像。
感知融合是门手艺。我见过不少团队,传感器数据各算各的,最后在决策层打架。我的做法是:在感知层就做深度融合,用卡尔曼滤波把多传感器数据对齐到同一个时空坐标系下。
1.2.2 决策层
决策层负责「想」。它包含三个子模块:
- 预测模块:其他交通参与者接下来会干什么?比如,前面那辆车会不会变道?
- 规划模块:路径规划、行为规划、轨迹规划。说白了就是「往哪走、怎么走、走多快」。
- 控制模块:把规划结果转化为油门、刹车、转向信号。
个人经验:决策层的实时性要求极高。我曾经在一个项目里,规划模块的周期是100ms,但控制模块要求50ms。结果就是控制模块经常拿到过时的轨迹,车开起来一抖一抖的。后来我把规划周期压到了20ms,问题才解决。记住:决策链路上的每个环节,延迟必须匹配。
1.2.3 执行层
执行层负责「动」。线控底盘、转向系统、制动系统、动力系统。这里有个坑:很多执行器是 CAN 总线控制的,而 CAN 的延迟和抖动是随机的。你想想看,如果刹车指令晚到了10ms,在高速上可能就是几米的差距。
我建议在嵌入式层面做两件事:一是给执行器分配独立的实时任务,优先级最高;二是用硬件触发中断,而不是轮询。嗯,这些细节我们后面章节会展开讲。
1.3 嵌入式实时系统的角色与挑战
好了,前面聊了分级和架构。现在说说嵌入式实时系统在这中间扮演什么角色。
说白了,自动驾驶的「大脑」就是嵌入式实时系统。它负责:
- 传感器数据的采集与预处理
- 感知算法的实时运行
- 决策与控制指令的下发
- 功能安全与故障诊断
- 通信与数据记录
我遇到过最头疼的问题是什么?是「确定性」。普通 Linux 系统,你没法保证一个任务在10ms内一定完成。但自动驾驶不行。如果感知任务超时,车可能就撞了。
警告:不要试图用通用操作系统做自动驾驶的核心控制。我见过有人用 Ubuntu + ROS 跑 L4 系统,结果有一次内核调度延迟了200ms,车直接冲上了路沿。从那以后,我再也不敢在安全关键任务上用非实时系统。
嵌入式实时系统面临的挑战,我总结为三点:
- 实时性:任务必须在截止时间前完成。这需要硬实时调度算法,比如 Rate Monotonic 或 Earliest Deadline First。
- 可靠性:系统不能崩溃。哪怕一个传感器坏了,系统也要能降级运行。这需要冗余设计和故障隔离。
- 资源受限:嵌入式系统的算力、内存、功耗都有限。你不能像在服务器上那样随便跑模型。得做模型压缩、量化、剪枝。
举个例子。我在做某个 L4 项目时,激光雷达的点云处理需要每帧10ms内完成。但原始算法在 ARM Cortex-A72 上跑了35ms。怎么办?我做了三件事:把算法从 Python 改成 C++、用 NEON 指令集做 SIMD 加速、把点云降采样到原来的1/4。最后跑到了8ms。嗯,这就是嵌入式工程师的日常——在有限资源里榨出性能。
核心观点:嵌入式实时系统是自动驾驶的「脊梁」。感知再强、决策再聪明,如果底层实时系统不可靠,一切都是白搭。我经常跟团队说:先把实时调度搞明白,再谈算法优化。
好了,第一章就到这里。下一章我们会深入聊聊嵌入式实时操作系统的选型与内核原理。到时候我会分享一些我在 FreeRTOS 和 QNX 上的实战经验。咱们下章见。
课后思考:如果你现在要设计一个 L3 级别的自动驾驶系统,你会选择什么样的嵌入式平台?为什么?想清楚这个问题,对后续学习很有帮助。
公众号:蓝海资料掘金营,微信deep3321