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

各位同学,大家好。我是你们这门课的主讲人。在车圈摸爬滚打了十来年,从最早的ADAS功能做到现在的L4系统集成,踩过的坑确实不少。今天咱们开篇,先聊聊自动驾驶的“身份证”——分级标准,再看看一辆车到底是怎么“想”和“动”的。

1.1 自动驾驶分级标准(SAE L0-L5)

说到分级,业内最通用的就是SAE标准。说白了,就是看“谁在开车”——是人,还是机器?

L0:无自动化
你全权负责。车就是个听话的工具,最多给你提个醒。比如倒车雷达“滴滴”叫两声,仅此而已。

L1:驾驶辅助
车能帮你干一件事,要么控制方向,要么控制速度。我最早接触的定速巡航就是典型。你设定120,它就傻傻地跑,前面有车也不减速——嗯,这活儿挺糙的。

L2:部分自动化
车同时管方向和速度。比如特斯拉的Autopilot,能自己跟车、自己打方向。但注意,你的眼睛必须盯着路,手得随时准备接管。我在测试时遇到过,系统突然退出,方向盘“咣当”一下甩回来,吓一跳。

L3:有条件自动化
这是分水岭。车自己开,但遇到搞不定的情况(比如修路、暴雨),它会喊你:“嘿,你来!”你需要在几秒内接管。说实话,L3是个尴尬的级别——责任从人转移到车,但又不完全转移。奥迪A8当年第一个量产L3,结果法规没跟上,最后不了了之。

L4:高度自动化
在特定区域(比如园区、高速),车全权负责。你可以在车里睡觉、看剧。但出了这个区域,车就趴窝。我参与过一个L4的无人配送车项目,在封闭园区跑得贼溜,一上路就被老大爷的三轮车逼停……

L5:完全自动化
终极形态。任何路况、任何天气,车都能开。没有方向盘,没有踏板。说实话,以目前的技术,L5还远着呢。我个人判断,十年内都很难落地。

级别 名称 谁在开? 典型功能
L0 无自动化 碰撞预警
L1 驾驶辅助 人(车辅助) 定速巡航
L2 部分自动化 人(车控制) 车道居中+ACC
L3 有条件自动化 车(人备用) 交通拥堵领航
L4 高度自动化 Robotaxi(限定区域)
L5 完全自动化 全场景无人驾驶

我的经验:别被L3的宣传忽悠了。很多车厂说自己是L2.5、L2.9,其实都是L2的变种。真正量产落地的,目前只有L2和部分L4(限定场景)。

1.2 系统架构总览:感知-决策-执行

一辆自动驾驶车,本质上就是个机器人司机。它怎么工作的?三个环节:感知 → 决策 → 执行。你想想看,人开车是不是也这样?眼睛看路(感知),脑子判断(决策),手脚操作(执行)。

感知层:
车靠什么“看”世界?摄像头、激光雷达、毫米波雷达、超声波……每个传感器都有脾气。摄像头认颜色、认车道线,但晚上就瞎;激光雷达测距准,但下雨天就糊。我做过一个测试,大雨天激光雷达的噪点能多出三倍,算法直接崩溃。

决策层:
感知完数据,得“想”明白接下来怎么办。这里分两步:

  • 预测:前面那辆车要变道吗?那个行人会突然冲出来吗?
  • 规划:我该加速、刹车,还是打方向?走哪条路径?

决策层最头疼的是“长尾问题”——你永远不知道下一个奇葩场景是什么。我曾经遇到过,一个塑料袋飘到摄像头前,系统以为是障碍物,一脚急刹……

执行层:
决策完了,得让车动起来。线控转向、线控制动、线控驱动。说白了,就是电脑直接控制油门、刹车、方向盘。这里有个坑:执行器的响应延迟。你决策只要10毫秒,但刹车建压要200毫秒。嗯,这200毫秒的差距,可能就是撞与不撞的区别。

避坑指南:我曾经在实车调试时,发现决策指令发了,但车没反应。查了半天,是执行器的CAN总线ID配错了。所以,集成测试时一定要先确认“握手”信号。

1.3 主流技术栈介绍

聊完架构,咱们看看现在行业里都在用什么。技术栈这东西,更新换代快,但核心框架相对稳定。

操作系统:
Linux是绝对的主流。Ubuntu + ROS/ROS2 是学术界的标配。但工业界更偏爱QNX或定制的RT-Linux——毕竟安全第一。我见过一个团队用ROS做量产,结果节点一多,通信延迟飙到100ms,直接被客户骂回来。

中间件:
数据怎么在模块间传?DDS(数据分发服务)是趋势。它比ROS的Topic机制更可靠,延迟更低。Autoware、Apollo都在用。

感知算法:
深度学习是主力。目标检测用YOLO、CenterNet;语义分割用DeepLabV3+;多传感器融合用PointPillars(激光雷达)或BEVFormer(鸟瞰视角)。我个人习惯,先用轻量级模型跑通流程,再慢慢上大模型——不然调试一次等半天,心态会崩。

决策规划:
传统方法:有限状态机(FSM)+ 规则。简单粗暴,但场景一多就炸。现代方法:基于学习(模仿学习、强化学习)或搜索算法(A*、RRT)。我建议新手先从FSM入手,把逻辑理清楚,再上学习算法。

工具链:
仿真:CARLA、SUMO、LGSVL。数据标注:LabelImg、Supervisely。日志分析:PlotJuggler、Foxglove。没有这些工具,你连bug在哪都找不到。

# 一个简单的感知-决策伪代码示例
def run_autonomous_vehicle():
    while True:
        # 感知
        obstacles = perception_module.detect_objects()
        lanes = perception_module.detect_lanes()
        
        # 决策
        if obstacles is None:
            target_speed = 60  # 没障碍,巡航
        else:
            target_speed = 0   # 有障碍,刹车
        
        # 执行
        control_module.set_speed(target_speed)
        control_module.set_steering(compute_steering_angle(lanes))
        
        time.sleep(0.1)  # 10Hz控制循环

注意:上面的代码只是教学演示。实际工程中,你得考虑传感器时间戳对齐、异常处理、功能安全(ISO 26262)等等。千万别直接往车上跑!

好了,第一章就聊这么多。记住:分级是标尺,架构是骨架,技术栈是血肉。后面我们会一步步深入每个环节。下一章,咱们聊聊传感器——那些让车“看见”世界的眼睛。


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