2、自动驾驶系统架构:感知、决策、执行三大模块,以及V模型如何映射

2.1 先聊聊自动驾驶的“三驾马车”

做自动驾驶这些年,我最大的感受是:这玩意儿本质上就是个“机器人开车”。

你想想看,人类司机开车是怎么做的?

  • 眼睛看路——感知周围环境
  • 大脑判断——决定怎么走、要不要刹车
  • 手脚操作——打方向盘、踩油门刹车

自动驾驶系统也一样,拆开来就是三大模块:感知、决策、执行。说白了,就是“看、想、动”三个步骤。

2.2 感知模块:车子的“眼睛”和“耳朵”

感知模块负责回答一个问题:“我周围发生了什么?”

我个人习惯把感知分成两层:

  1. 传感器层:摄像头、激光雷达、毫米波雷达、超声波、GPS/IMU……这些是硬件基础。
  2. 算法层:目标检测、语义分割、跟踪、融合……把原始数据变成有意义的信息。

举个例子,摄像头拍到一张图,算法要能认出“前面那是个行人,距离大概15米,正在横穿马路”。

关键点:感知不是“看到”就完了,而是要输出结构化信息。比如障碍物的位置、速度、类型、朝向,还有车道线、红绿灯状态、可行驶区域等等。

我在项目中遇到过一个问题:摄像头在强光下会过曝,导致车道线检测失败。后来我们加了HDR处理和曝光自适应策略,才把这个问题压下去。嗯,这里要注意——感知模块的鲁棒性,永远是第一位的。

2.3 决策模块:车子的“大脑”

决策模块要回答:“我接下来该怎么做?”

这个模块又可以拆成几个子模块:

  • 行为决策:比如“我要变道”、“我要减速让行”、“我要靠边停车”。这是宏观的驾驶意图。
  • 运动规划:在确定了行为之后,具体怎么走?生成一条平滑的轨迹,包含位置、速度、加速度。
  • 控制指令生成:把轨迹转换成方向盘转角、油门开度、刹车压力等底层指令。

你可能会问:为什么要把决策拆这么细?

我举个例子。有一次我们测试时,车子在十字路口突然急刹车,原因是行为决策层判断“要停车”,但运动规划层没有提前减速,导致最后时刻猛踩刹车。这就是模块间配合出了问题。

我的经验:决策模块的难点不在于“能不能走”,而在于“在安全、舒适、效率之间找到平衡”。尤其是遇到博弈场景,比如无保护左转,你既要让行,又不能一直傻等。

2.4 执行模块:车子的“手脚”

执行模块负责把决策层的指令变成实际动作。它回答:“怎么动起来?”

执行层包括:

  • 线控底盘:转向、制动、驱动、换挡等执行器
  • 执行器控制器:比如EPS(电动助力转向)、ESP(车身稳定系统)、VCU(整车控制器)
  • 反馈回路:实际执行效果要反馈给决策层,形成闭环

我曾经踩过一个坑:决策层发了一个“左转30度”的指令,但执行器响应有200ms的延迟,结果车子转过了头。后来我们在控制算法里加了前馈补偿和延迟补偿,才把这个问题解决。

注意:执行模块的响应时间精度,直接决定了整个系统的安全边界。别小看这几十毫秒的延迟,在高速场景下可能就是生与死的区别。

2.5 V模型如何映射到三大模块?

好,现在我们把V模型和这三个模块结合起来看。

V模型的左侧是需求分解与设计,右侧是集成与验证。映射到自动驾驶系统,是这样的:

V模型阶段 感知模块 决策模块 执行模块
系统需求 需要检测哪些目标?精度多少? 需要支持哪些驾驶场景? 响应时间要求?执行精度?
架构设计 传感器选型、算法框架 行为决策+运动规划分层 线控底盘接口定义
详细设计 模型结构、训练策略 状态机设计、轨迹优化算法 控制算法、延迟补偿
单元测试 单传感器检测精度测试 单个决策逻辑的仿真验证 执行器响应测试
集成测试 多传感器融合测试 感知+决策联合仿真 决策+执行联合测试
系统验证 整车感知系统路测 全场景决策验证 整车执行性能标定

你看,V模型的每一层,都能在三大模块中找到对应的活动。

我个人习惯在项目启动时,先画一张这样的映射表。这样团队里每个人都知道:我现在做的工作,对应V模型的哪个阶段?上下游是谁?

2.6 一个实际案例:V模型在感知模块中的应用

拿感知模块举个例子,我们当时做目标检测:

  • 需求阶段:要求检测距离≥200米,检测精度≥95%,帧率≥20fps
  • 设计阶段:选了YOLOv5作为基础模型,加上多尺度特征融合
  • 单元测试:在KITTI数据集上跑mAP,单独测每个传感器的性能
  • 集成测试:把摄像头和激光雷达的检测结果做融合,看一致性
  • 系统验证:装车路测,看实际场景下的检测效果

我记得有一次,单元测试时模型mAP很高,但一集成到车上就掉链子。后来发现是传感器标定出了问题——摄像头和激光雷达的坐标没对齐。这就是V模型里“集成测试”阶段要重点排查的问题。

核心思想:V模型不是死板的流程,而是一种思维框架。它提醒你:在开发每个模块时,都要想清楚它的输入输出、上下游依赖、以及怎么验证它是对的。

2.7 避坑指南

最后分享几个我踩过的坑:

  • 别把感知和决策割裂开:我曾经见过一个团队,感知组和决策组各干各的,结果感知输出的格式决策组根本用不了。后来我们强制要求:感知的输出格式必须由决策组来定义。
  • 执行模块的标定不能省:很多团队把精力都放在感知和决策上,觉得执行就是“调个PID”。但实际上一辆车的转向、制动、驱动都有非线性特性,不做标定,控制精度根本达不到。
  • V模型要迭代:别想着一次就把V模型走完。自动驾驶系统太复杂了,我建议每个迭代周期(比如3个月)走一轮V模型,逐步细化。

嗯,这一章就到这里。下一章我们会深入聊聊感知模块的详细设计,包括传感器选型、数据融合、以及V模型在感知开发中的具体落地方法。