模块化系统将自动驾驶任务分解为多个子任务, 交由不同的模块分别处理, 每个子任务又可以细分为多个模型, 如图1所示. 每个模型都需要独立开发, 训练参数, 迭代优化, 最终串接处理数据, 实现自动驾驶任务. 典型的开源模块化自动驾驶系统有Apollo和Autoware. 其架构一般包括感知、规划和控制这3个部分, 如图1所示.图1 模块化自动驾驶系统架构
(1) 感知模块接收相机、激光雷达、惯性测量单元等传感器数据, 通过深度学习技术融合和处理数据, 实现交通灯识别、目标跟踪、轨迹预测、定位等任务, 感知和理解外部环境.
(2) 规划模块根据感知模块的输出规划车辆路线, 通过如下3个步骤完成任务.
(3) 控制模块使用控制算法向油门、方向盘等执行器传输控制信号, 驱使车辆沿着规划模块输出的轨迹运动, 实现横向控制和纵向控制.
端到端系统将传感器感知的数据、导航命令输入一个预训练的深度神经网络, 直接输出控制信号或规划轨迹. 端到端系统仅通过一个模型即可实现模块化系统的大部分功能, 如图2所示. 该模型可能包括多个子模型, 但所有模型联合训练, 使用一致的优化目标.
图2 端到端自动驾驶系统架构
② 自动驾驶仿真测试架构
自动驾驶仿真测试使用计算机软件构建真实的物理环境, 模拟道路测试面对的路况信息, 并接入自动驾驶系统控制车辆模型, 在参数化的条件组合下运行, 以挖掘自动驾驶系统的缺陷. 仿真测试的成本更低, 安全性和效率更高, 能够为自动驾驶系统的部署实装和量产应用提供保障. 图3展示了仿真测试的架构体系, 预定义的测试场景在仿真器中渲染处理, 仿真器通过通信接口与自动驾驶系统连通, 转发控制流和数据流信息, 进而使自动驾驶系统在测试场景中运行.
图3 自动驾驶仿真测试架构
本文基于通用的测试框架, 提炼所有测试方案的共性和个性特征, 总结面向整车系统的自动驾驶安全测试框架. 通过框架提取核心研究问题, 以此为基础对整车系统安全领域的研究文献进行全面分析. 框架主要包括测试用例生成、测试用例执行、测试结果验证这3部分, 如图4所示.
图3 面向整车系统的自动驾驶安全测试框架
基本工作过程: 面向整车系统的自动驾驶安全测试框架的基本工作过程如下.
将测试场景和被测自动驾驶系统导入仿真器, 使自动驾驶系统控制场景中的代理运行.
收集执行过程中的状态数据, 根据测试预言检测是否出现非预期的危险行为, 并筛选误报和真正的危险行为.
计算覆盖率度量或优化算法的目标函数, 指导测试用例生成过程.
迭代执行上述3个步骤, 在海量的场景中找出引发问题的场景, 测试自动驾驶系统的安全性. 值得注意的是, 并非每个工作都涉及上述所有环节, 一些研究可能不考虑覆盖率度量或测试结果优化.
测试用例生成: 最重要的环节是测试用例生成, 即测试场景生成. 本文总结了3种测试用例生成思路, 即关键场景生成、测试充分性和对抗样本生成.
- 关键场景生成, 通过设计出合适的引导度量和优化算法, 逐步提高测试场景的关键度.
- 测试充分性, 通过聚类等算法将所有场景抽象为多种类型, 用少量具有代表性的测试场景近似整个场景空间.
- 对抗样本生成, 研究人员在图像或点云中添加对抗扰动, 攻击自动驾驶系统模型应用的人工智能算法, 影响系统的决策和控制.
测试用例优化:可选步骤, 负责在执行前对测试用例集进行筛选和精简, 以过滤同质化的测试用例, 保留更高质量、更关键的测试用例.测试结果验证: 包括测试预言和测试结果优化两部分. - 测试预言, 用于判断测试结果是否符合预期, 区分被测系统的正确和错误行为.
测试结果优化, 过滤假阳性的测试结果, 只保留自动驾驶系统承担责任的违规行为. 最终, 执行结果和判断信息会反馈给测试用例生成环节, 指导生成关键度更高、覆盖面更全的测试场景.
本文将研究工作划分为5类: 关键场景生成、测试充分性、对抗样本生成、测试优化和测试预言, 具体分类结构如图4所示.
图4 面向整车系统的自动驾驶安全测试研究文献分类
① 关键场景生成
测试场景中常见的对象包括NPC、天气、静态障碍物等, 近来也有研究人员建模了道路结构和水坑. 图5展示了该类别下工作的场景生成方法和场景参数.
图5 关键场景生成分类
生成关键场景是披露自动驾驶系统缺陷的核心, 也是测试用例生成环节的重要组成部分. 基本流程是: 本文根据生成方法将文献分为两类, 基于搜索的测试方法和机器学习方法. 表1对比了该分类下文献的场景参数和场景生成策略.
表1 关键场景生成分类下的工作对比
自AV-Fuzzer为起点, 研究人员开始使用高保真的仿真器测试自动驾驶系统, 观察其在场景中的表现, 并提出多种场景生成策略. 随后, 研究人员逐渐将人工智能引入场景生成工作, 并增加场景中可测试的对象及其参数. 基于搜索的方法和机器学习是目前研究中主流的场景生成算法, 研究人员结合引导度量缩小输入空间, 并在测试场景中纳入更多可参数化的对象, 使多种因素充分交互、复杂约束相互碰撞, 制造出更具挑战性的驾驶环境, 以充分测试自动驾驶系统整体.
② 测试充分性
本节根据覆盖率度量将文献分为驾驶决策和环境要素两类. 表2总结了该分类下工作的覆盖方法.

驾驶决策: 包括了变道、超车、转弯等行为, 一段时间内决策的组合形成轨迹. 当前研究通常使用环境参数和系统参数两种因素影响驾驶决策, 如图6所示.
环境要素 : 环境中的对象包括天气、道路结构、障碍物等, 将其排列组合并实例化后, 场景数量呈几何级增长. 因此, 必须将所有输入对象分析归纳为抽象类型, 用少量的场景近似全部场景空间. 根据测试的输入对象, 可以将该类工作分为道路结构和对象组合两类, 如图6所示.图6 测试充分性分类
为了测试自动驾驶系统, 研究人员迁移应用了软件测试的覆盖率思想. 由于自动驾驶软件代码结构和数据交互复杂, 研究人员放弃使用代码覆盖率. 直观上, 通过构建更完善的场景库可以满足充分测试的要求. 但现实中场景是长尾分布的, 伴随着突发情况或新元素的排列组合, 不断出现新的未知场景. 因此, 直接验证场景覆盖率的难度很高, 当前研究通过覆盖驾驶决策或环境要素侧面证明测试充分性. 由于自动驾驶系统内部丰富的状态信息能够帮助研究人员理解任务实现逻辑, 所以最近的工作也将车辆状态和参数纳入考量.
③ 对抗样本生成
基于攻击针对的任务类型, 本文将对抗样本生成工作分为两类, 分类问题和回归问题. 分类问题负责为对象建立离散的标签, 回归问题用于预测未来趋势和走向. 表3对比了不同工作的攻击入口、对抗样本生成方法和对系统层面的影响.

分类问题: 通常应用于目标识别模型中. 根据输入源和攻击入口的差异, 将针对分类问题的安全研究工作划分为3类, 分别为攻击相机、激光雷达和多传感器融合架构, 如图7所示.
回归问题: 负责预测车辆和行人的未来运动轨迹, 研究人员致力于干扰模型的预测值. 根据对抗样本的类型, 将该部分的工作划分为静态扰动和动态扰动这2类, 如图7所示.图7 对抗样本生成分类
该分类下的工作逐渐拓展测试目标, 从针对相机延展到针对激光雷达, 从针对单一传感器延展到针对多传感器融合方案; 扰动类型也由单个静态扰动升级为自适应的动态扰动. 随着研究的深度和广度不断提升, 对抗测试的可行性逐渐增加, 隐蔽性逐渐增强, 成功率也逐渐提高.
测试优化是现有研究关注的方向之一, 有利于提高测试的速度和精度. 根据优化的阶段, 本节将测试优化工作划分为两类, 即测试结果优化和测试用例优化. 表4总结了各工作的具体优化方法.

测试结果优化: 测试场景中的背景车辆通常由PID等简单算法控制, 仅根据预先规定的速度和驾驶策略行驶, 可能不会遵守交通规则. 其智能性和自主性较差, 鲁莽的驾驶行为造成了大量误报. 除此之外, 仿真器的环境建模与现实世界有偏差, 传感器建模与真实传感器也存在差距. 测试结果不仅存在误报, 还可能无法在实车上复现. 为了使测试结果更加精确, 研究人员提出了新的场景执行和验证方案, 如图8所示.
测试用例优化: 执行过程是整车系统测试与模块测试的主要区别之一. 模块测试接收图片、轨迹等简单数据, 验证单一模型功能, 执行速度快、效率高; 整车系统测试需要使用仿真器执行和验证大量测试场景, 时间成本较高, 效率较低. 因此, 研究人员亟需加速仿真测试, 优化测试用例. 具体方案有两种, 分别是替代方案和约减方案, 如图8所示.
图8 测试优化分类
误报检测、多代理仿真研究在传统的软件测试领域已取得长足进展, 但在自动驾驶领域才刚刚起步, 仍需深入研究. 仿真加速、测试约减技术已经被应用于测试高级辅助驾驶系统, 但是研究对象较为简单, 需要研究人员进行拓展研究和方案迁移. 虽然测试优化技术无法发现自动驾驶系统的缺陷, 但是研究人员可以将其整合到安全测试框架中, 提高缺陷检测效率和准确率, 辅助漏洞挖掘过程. ⑤ 测试预言
测试预言用于判断测试结果是否符合预期, 评估自动驾驶系统的表现和性能. 道路测试中的测试预言, 如行驶里程和脱离接管率, 无法应用于仿真测试; 模块安全研究中的测试预言, 如转向角偏离程度和终点预测误差, 只能用于判断单个模块的执行结果, 无法准确衡量整车系统的安全性. 因此, 研究人员需要设计精确、合适的测试预言并证明其有效性.
4 面向整车系统的自动驾驶安全测试评估
本文总结了具备较强通用性的4种评价指标.
为了验证所提方案的有效性, 研究人员选择多种比较基准实施对比实验, 包括随机方案、消融方案等. 本文结合自动驾驶安全领域的主要研究方向, 提出了面向整车系统的安全测试研究面临的现实挑战和研究机遇, 如表5所示.