第一章:自动驾驶系统概述
各位同学好,我是老张。在汽车电子这行摸爬滚打了十几年,今天咱们来聊聊自动驾驶。说实话,我刚入行那会儿,自动驾驶还是个科幻概念。现在呢?它已经实实在在地改变着我们的出行方式。
这一章,我会带大家从零开始,把自动驾驶的来龙去脉、分级标准、系统架构这些基础打牢。嗯,这些内容看似简单,但很多坑都在细节里。我踩过的坑,希望你们能绕过去。
1.1 发展历程:从梦想到现实
自动驾驶的发展,其实可以分成三个阶段。
第一阶段:萌芽期(1980s-2000s)
那时候主要是高校和研究所的实验室项目。我记得2005年,DARPA举办了一场无人车挑战赛,斯坦福的Stanley拿了冠军。那车跑得歪歪扭扭的,但意义重大——它证明了机器能自己开车。
第二阶段:爆发期(2010s-2020s)
Google在2009年启动了无人车项目,后来独立成Waymo。特斯拉也在2014年推出了Autopilot。这个阶段,传感器、算力、算法都突飞猛进。我个人习惯把2016年看作一个分水岭——那年Mobileye的EyeQ3芯片让ADAS功能开始普及。
第三阶段:成熟期(2020s至今)
现在大家都在拼L4级落地。Robotaxi在几个城市开始试运营,干线物流的自动驾驶卡车也在跑。但说实话,L5级还遥遥无期。为什么?后面我会讲。
1.2 L0-L5分级标准:别被营销话术忽悠了
SAE J3016标准把自动驾驶分了6级。我建议大家把这个表格背下来,面试经常考。
| 等级 | 名称 | 定义 | 典型功能 |
|---|---|---|---|
| L0 | 无自动化 | 人类全程驾驶 | 定速巡航(仅维持速度) |
| L1 | 驾驶辅助 | 车辆控制横向或纵向 | ACC自适应巡航、LKA车道保持 |
| L2 | 部分自动化 | 车辆同时控制横向和纵向 | 特斯拉Autopilot、通用Super Cruise |
| L3 | 有条件自动化 | 系统驾驶,人类需随时接管 | 奥迪A8 Traffic Jam Pilot |
| L4 | 高度自动化 | 系统驾驶,无需接管(限定区域) | Waymo Robotaxi、百度Apollo |
| L5 | 完全自动化 | 全场景、全工况 | 目前不存在 |
1.3 系统架构:三层两域
自动驾驶系统架构,说白了就是「感知-决策-执行」三个环节。我习惯把它分成三层:
- 感知层: 用传感器(摄像头、激光雷达、毫米波雷达、超声波)采集环境数据。嗯,这里有个关键点——传感器融合。单一传感器都有缺陷,比如摄像头怕逆光,激光雷达怕雨雾。我建议做融合时,别只做后融合,前融合(原始数据融合)效果更好,但算力要求高。
- 决策层: 包括行为决策(换道、跟车、超车)和运动规划(路径、速度、轨迹)。这里有个经典问题:决策是规则驱动好,还是学习驱动好?我个人习惯是混合方案——规则兜底,学习优化。
- 执行层: 线控底盘(转向、制动、驱动)。注意,执行器的响应延迟和精度直接影响控制效果。我在项目中遇到过,某个供应商的线控制动响应延迟有200ms,导致紧急制动距离多了好几米。
另外,架构上还有两个域:
- 功能域: 负责感知、决策、执行这些核心功能。
- 安全域: 负责监控、诊断、冗余。这个域很多人会忽略,但它是L3以上的命门。
1.4 核心模块:每个模块都有坑
咱们拆开来看几个核心模块:
1.4.1 感知模块
感知模块的输出是障碍物列表、车道线、交通标志等。我建议重点关注两个指标:
- 召回率: 别漏检。漏检一个行人,可能就出大事。
- 精度: 别误检。误检一个假障碍,车可能急刹,后车追尾。
这里有个技巧:用多传感器做交叉验证。比如摄像头检测到行人,激光雷达也检测到,那置信度就高。如果只有一个传感器检测到,那就降级处理。
1.4.2 定位模块
定位是自动驾驶的基石。常用的方案有:
- GNSS+IMU: 成本低,但隧道、高楼区会丢信号。
- 激光SLAM: 精度高,但依赖先验地图。
- 视觉SLAM: 成本低,但光照变化影响大。
我建议用组合导航方案,而且一定要有IMU做航位推算。为什么?因为GNSS更新频率只有10Hz,而控制需要100Hz。IMU可以填补中间的空缺。
1.4.3 规划与控制模块
规划模块输出轨迹,控制模块跟踪轨迹。这里有个经典问题:轨迹平滑性和跟踪精度的权衡。太平滑可能绕路,太激进可能乘客晕车。
我分享一个经验:用五次多项式做轨迹规划,可以保证位置、速度、加速度都连续。代码示例:
// 五次多项式轨迹规划示例
// 输入:起点状态 (x0, v0, a0),终点状态 (xf, vf, af),时间 T
// 输出:轨迹系数 c0-c5
void QuinticPolynomial(double x0, double v0, double a0,
double xf, double vf, double af,
double T, double* c) {
double T2 = T * T;
double T3 = T2 * T;
double T4 = T3 * T;
double T5 = T4 * T;
c[0] = x0;
c[1] = v0;
c[2] = 0.5 * a0;
double A[3][3] = {{T3, T4, T5},
{3*T2, 4*T3, 5*T4},
{6*T, 12*T2, 20*T3}};
double B[3] = {xf - (c[0] + c[1]*T + c[2]*T2),
vf - (c[1] + 2*c[2]*T),
af - (2*c[2])};
// 解线性方程组 A * [c3, c4, c5]^T = B
// 这里省略求解过程
}
1.5 冗余设计:为什么L3以上必须冗余?
你想想看,L2级出了事,驾驶员负责。L3级以上,系统负责。那系统出故障怎么办?所以必须冗余。
冗余设计的原则是:单一故障不导致功能丧失。具体来说:
- 传感器冗余: 比如前向感知,至少两套独立方案(摄像头+激光雷达)。
- 计算冗余: 双ECU,一个主控,一个备份。切换时间要小于100ms。
- 执行冗余: 线控制动要有两套独立回路。我记得有一次测试,主回路失效,备份回路在50ms内接管,车稳稳停住。
- 供电冗余: 双电源,独立供电。别让一个保险丝烧了,全车断电。
1.6 本章小结
这一章,我们聊了自动驾驶的发展历程、L0-L5分级标准、系统架构和核心模块。说白了,自动驾驶就是个「感知-决策-执行」的闭环,加上安全冗余做保障。
下一章,我们会深入讲故障诊断的基础理论。嗯,那才是真正考验工程师功底的地方。各位做好准备。
公众号:蓝海资料掘金营,微信deep3321