第一章:自动驾驶系统概述

各位同学好,我是你们这门课的老朋友。今天咱们聊聊自动驾驶系统的整体面貌。说实话,我入行那会儿,自动驾驶还是个实验室里的概念。现在呢?满大街的测试车在跑。变化真快。

这一章,我会带大家从三个维度切入:分级标准、系统架构、以及嵌入式实时系统的角色。嗯,这些都是后续所有章节的基石。你想想看,如果连车能干什么、系统长什么样都不清楚,后面谈实时调度、谈功能安全,那都是空中楼阁。

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 决策层

决策层负责「想」。它包含三个子模块:

  1. 预测模块:其他交通参与者接下来会干什么?比如,前面那辆车会不会变道?
  2. 规划模块:路径规划、行为规划、轨迹规划。说白了就是「往哪走、怎么走、走多快」。
  3. 控制模块:把规划结果转化为油门、刹车、转向信号。

个人经验:决策层的实时性要求极高。我曾经在一个项目里,规划模块的周期是100ms,但控制模块要求50ms。结果就是控制模块经常拿到过时的轨迹,车开起来一抖一抖的。后来我把规划周期压到了20ms,问题才解决。记住:决策链路上的每个环节,延迟必须匹配。

1.2.3 执行层

执行层负责「动」。线控底盘、转向系统、制动系统、动力系统。这里有个坑:很多执行器是 CAN 总线控制的,而 CAN 的延迟和抖动是随机的。你想想看,如果刹车指令晚到了10ms,在高速上可能就是几米的差距。

我建议在嵌入式层面做两件事:一是给执行器分配独立的实时任务,优先级最高;二是用硬件触发中断,而不是轮询。嗯,这些细节我们后面章节会展开讲。

1.3 嵌入式实时系统的角色与挑战

好了,前面聊了分级和架构。现在说说嵌入式实时系统在这中间扮演什么角色。

说白了,自动驾驶的「大脑」就是嵌入式实时系统。它负责:

  • 传感器数据的采集与预处理
  • 感知算法的实时运行
  • 决策与控制指令的下发
  • 功能安全与故障诊断
  • 通信与数据记录

我遇到过最头疼的问题是什么?是「确定性」。普通 Linux 系统,你没法保证一个任务在10ms内一定完成。但自动驾驶不行。如果感知任务超时,车可能就撞了。

警告:不要试图用通用操作系统做自动驾驶的核心控制。我见过有人用 Ubuntu + ROS 跑 L4 系统,结果有一次内核调度延迟了200ms,车直接冲上了路沿。从那以后,我再也不敢在安全关键任务上用非实时系统。

嵌入式实时系统面临的挑战,我总结为三点:

  1. 实时性:任务必须在截止时间前完成。这需要硬实时调度算法,比如 Rate Monotonic 或 Earliest Deadline First。
  2. 可靠性:系统不能崩溃。哪怕一个传感器坏了,系统也要能降级运行。这需要冗余设计和故障隔离。
  3. 资源受限:嵌入式系统的算力、内存、功耗都有限。你不能像在服务器上那样随便跑模型。得做模型压缩、量化、剪枝。

举个例子。我在做某个 L4 项目时,激光雷达的点云处理需要每帧10ms内完成。但原始算法在 ARM Cortex-A72 上跑了35ms。怎么办?我做了三件事:把算法从 Python 改成 C++、用 NEON 指令集做 SIMD 加速、把点云降采样到原来的1/4。最后跑到了8ms。嗯,这就是嵌入式工程师的日常——在有限资源里榨出性能。

核心观点:嵌入式实时系统是自动驾驶的「脊梁」。感知再强、决策再聪明,如果底层实时系统不可靠,一切都是白搭。我经常跟团队说:先把实时调度搞明白,再谈算法优化。

好了,第一章就到这里。下一章我们会深入聊聊嵌入式实时操作系统的选型与内核原理。到时候我会分享一些我在 FreeRTOS 和 QNX 上的实战经验。咱们下章见。

课后思考:如果你现在要设计一个 L3 级别的自动驾驶系统,你会选择什么样的嵌入式平台?为什么?想清楚这个问题,对后续学习很有帮助。


公众号:蓝海资料掘金营,微信deep3321