第1章 自动驾驶测试概述

大家好,我是老张。在自动驾驶这行摸爬滚打了快十年,今天咱们聊聊最基础但也最关键的东西——测试概述。

很多人一上来就问我:「老张,自动驾驶到底怎么测?」

我的回答永远是:先搞清楚你测的是哪个级别的车。级别不同,测试策略天差地别。

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

SAE的分级标准,说白了就是把「人开车」到「车自己开」这个过程切成6个等级。我刚开始接触时也觉得这玩意儿太理论,直到有一次项目评审,对方问我「你们这个系统是L3还是L4?」我才意识到——分级不是学术游戏,是工程边界。

级别 名称 谁在开 谁在监控 典型场景
L0 无自动化 人类 人类 定速巡航(仅维持速度)
L1 驾驶辅助 人类+系统 人类 ACC自适应巡航、车道保持
L2 部分自动化 系统 人类 同时控制转向+加减速
L3 有条件自动化 系统 系统(需人类接管) 高速领航辅助
L4 高度自动化 系统 系统 限定区域Robotaxi
L5 完全自动化 系统 系统 全场景、全天候

关键点:L3是个分水岭。L2及以下,责任在驾驶员;L3及以上,责任开始转移到系统。我见过太多团队在L3的「接管」定义上扯皮——「系统发出请求后,人类多久必须接管?」这个问题不明确,测试用例根本没法写。

我的经验:做仿真测试时,L2和L3的测试覆盖策略完全不同。L2你重点测「系统会不会误判」,L3你得测「系统能不能在失效前给人类留足接管时间」。我曾经有个项目,L3系统在高速上突然退出,留给驾驶员只有1.2秒——这根本不够。后来我们把接管时间阈值改成了4秒。

1.2 测试V模型

V模型不是新鲜东西,传统汽车行业用了多少年了。但放到自动驾驶里,它有了新玩法。

V模型的左边是「设计分解」,右边是「集成验证」。说白了就是:你左边怎么拆的,右边就怎么拼回来测。

  • 需求分析 → 系统验收测试:需求里写了「能在雨天识别行人」,验收时就专门挑雨天场景测。
  • 系统设计 → 系统集成测试:感知、规划、控制各模块拼起来,看能不能协同工作。
  • 详细设计 → 单元测试:每个算法模块单独测,比如目标检测模型的精度。

你想想看,如果没有V模型,大家各测各的,最后拼起来发现「感知说看到了障碍物,规划说没收到信号」——这种锅我背过不止一次。

避坑指南:我曾经在一个项目里跳过单元测试,直接做系统集成。结果发现某个感知模块在特定光照下会输出NaN值,导致规划模块直接崩溃。查了三天才定位到问题。从那以后,我坚持V模型的每一步都不能省——哪怕工期再紧。

1.3 仿真测试在开发流程中的位置与价值

仿真测试,说白了就是在虚拟世界里跑车。为什么需要它?三个字:快、省、全

  • 快:真实路测一天跑200公里算多了,仿真可以一天跑几万公里。
  • 省:一台测试车改装费几十万,仿真环境搭建成本低得多。
  • 全:极端场景——比如爆胎、行人鬼探头、传感器失效——真实路测很难复现,仿真里随便造。

但注意,仿真不是万能的。我见过有人迷信仿真,觉得仿真过了就万事大吉。结果实车一上路,发现仿真里的传感器模型太理想化,真实噪声一上来就崩了。

我的建议:仿真测试和实车测试是互补关系。仿真负责「广度」——覆盖大量场景;实车负责「深度」——验证仿真里发现的关键问题。我个人习惯是:仿真通过率做到95%以上,才敢放出去跑实车。

在开发流程里,仿真测试的位置大概是这样:

  1. 算法开发阶段:用仿真快速迭代算法,调参数、修bug。
  2. 集成测试阶段:把感知、规划、控制拼起来,在仿真里跑完整闭环。
  3. 回归测试阶段:每次代码变更后,跑一遍仿真用例集,确保没引入新问题。
  4. 实车验证前:仿真通过后,才进入实车测试。

嗯,这里要注意:仿真测试的用例库需要持续维护。我见过有些团队,用例库建好后就再也不更新了。结果新功能加进来,老用例根本覆盖不到——这种仿真测试就变成了走过场。

一个小技巧:每次实车测试中发现的bug,都想办法在仿真里复现,然后加入用例库。这样你的仿真库会越来越「聪明」。我曾经用这个方法,半年内把仿真测试的bug检出率从30%提升到了70%。

好了,第一章就聊这么多。记住一句话:测试不是开发完才做的事,而是贯穿整个开发流程的护城河。下一章我们聊聊仿真测试工具链,到时候我会分享一些选型踩过的坑。