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

各位同学好,我是老张。在汽车电子这行摸爬滚打了十几年,今天咱们来聊聊自动驾驶。说实话,我刚入行那会儿,自动驾驶还是个科幻概念。现在呢?它已经实实在在地改变着我们的出行方式。

这一章,我会带大家从零开始,把自动驾驶的来龙去脉、分级标准、系统架构这些基础打牢。嗯,这些内容看似简单,但很多坑都在细节里。我踩过的坑,希望你们能绕过去。

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 完全自动化 全场景、全工况 目前不存在
⚠️ 避坑指南: 我曾经见过不少供应商把L2+宣传成L3。你想想看,L3的核心是「系统承担责任」,出了事故算系统的。而L2出了事算驾驶员的。这差别大了去了。所以看功能别光听宣传,要看ODD(运行设计域)和OEDR(目标与事件检测及响应)的分配。

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
    // 这里省略求解过程
}
💡 小技巧: 实际工程中,我建议把轨迹规划和控制分开做。规划用MPC(模型预测控制),控制用PID。这样调试起来方便,出了问题也好定位。

1.5 冗余设计:为什么L3以上必须冗余?

你想想看,L2级出了事,驾驶员负责。L3级以上,系统负责。那系统出故障怎么办?所以必须冗余。

冗余设计的原则是:单一故障不导致功能丧失。具体来说:

  • 传感器冗余: 比如前向感知,至少两套独立方案(摄像头+激光雷达)。
  • 计算冗余: 双ECU,一个主控,一个备份。切换时间要小于100ms。
  • 执行冗余: 线控制动要有两套独立回路。我记得有一次测试,主回路失效,备份回路在50ms内接管,车稳稳停住。
  • 供电冗余: 双电源,独立供电。别让一个保险丝烧了,全车断电。
📌 核心要点: 冗余不是简单的「1+1」,而是「1+1>2」。两个系统要独立设计、独立供电、独立通信。我曾经见过一个方案,两个ECU共用同一个CAN总线,结果总线故障,两个都挂了。这叫什么冗余?这叫摆设。

1.6 本章小结

这一章,我们聊了自动驾驶的发展历程、L0-L5分级标准、系统架构和核心模块。说白了,自动驾驶就是个「感知-决策-执行」的闭环,加上安全冗余做保障。

下一章,我们会深入讲故障诊断的基础理论。嗯,那才是真正考验工程师功底的地方。各位做好准备。


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