您好,欢迎光临自动驾驶测试验证技术创新论坛2021!

自动驾驶汽车是如何测试的?看完发现当工程师好难

发布日期:2020-08-08

GRCC 自动驾驶测试验证技术创新论坛 昨天 

手机阅读

点击上方蓝色字体,关注我们

引言:每一次特斯拉自动驾驶系统Autopilot的升级都会让汽车行业,甚至是科技行业沸腾。自动驾驶/辅助驾驶离我们越来越近,越来越多的人体验到了自动驾驶的便利和魅力。那么自动驾驶系统发布和升级前是如何保证其可靠性的呢?且听我一一道来。

自动驾驶系统做测试时大致分为以下四个阶段:

  1. 仿真测试

  2. 代码审查

  3. 功能测试

  4. 性能测试

四个阶段的测试确保交付出去的产品能满足自动驾驶的需求。

仿真测试

仿真测试让开发代码的工程师脱离真实的车辆环境,快速验证自身的算法。

代码开发工程师根据场景需求,将代码开发完成后,验证自己的代码没有逻辑漏洞,会使用仿真软件进行代码的仿真测试。

目前可用于自动驾驶仿真测试的开源模拟器有:基于C++开发的car_demo,以及基于Python开发的self-driving-truck和DDPG-Keras-Torcs,还有Udacity无人驾驶课程中所用到的模拟器self-driving-car-sim等。这些模拟器需要***自己去搭建对应的开发环境,场景相对单一,技术支持相对较少,比较适合个人***。

商用的自动驾驶模拟器。这种模拟器不仅可以提供丰富的场景库、能较好地模拟传感器(相机、雷达等)的特性,还具有相对完善的技术支持,以帮助***快速上手。这种模拟器有PreScan、V-Rep等。

也有各种自动驾驶公司自行设计的模拟器,像Waymo(前Google无人车团队)开发的 CarCraft 。

我已大部分车企使用到的 Prescan 为例,说一下仿真测试是如何实现的。

①搭建场景

根据自动驾驶汽车所需要实现的功能,搭建场景,这里的场景既可以高速公路,也可以是城区道路。

如果要完成城区道路的自动驾驶模拟,就需要搭建地图(地面类型,多车道,道路拓扑等),并加入交通参与者(车、人、运动路径等),交通标志(信号灯、地标、施工)等必要信息。

②添加车载传感器

根据实车所装备传感器,给要模拟的汽车添加诸如摄像机、Radar、Lidar等传感器。同时设置传感器的各种参数(探测*大距离、精度等),使仿真环境中的传感器参数与现实中使用的尽可能一致。

③添加算法

这里就是代码开发工程师需要注意的部分。将算法导入到模拟环境中,使车辆能正常驶过该场景,而不至于与其他物体碰撞。下图是AEB(紧急制动)的Simulink模型。

④仿真测试

搭建好场景以及添加算法后,就可以开始仿真测试了。根据仿真测试的结果即可验证编写的算法是否能够发布到测试组。也可以基于仿真测试的结果,修改算法或调节参数。

不仅开发工程师会用模拟器进行仿真测试,测试工程师也可以基于模拟器设计出更多复杂且极端的场景,来测试算法的普适性和极限。

代码审查

代码审查是测试工程师拿到代码后做的第一份工作。每份交付出去的代码都要符合一定的编码规范。大家聚在一起,逐行审阅每一段代码,开始互怼。

每次代码审查环节,都会让我不自觉地想到这张图——同行评审

开发工程师每一行代码的变量命名、函数命名甚至空行都要严格限定,这样做的目的是保证代码风格的一致性,才能保证其他同事接触到代码时,能快速看懂。除了命名等格式,测试工程师还会对代码中的判断、循环语句做审查,以此判断这些代码是否有效、有必要等。

目前国外***的当属Google推出的编码规范.比如C++编码规范Google C++ Guide,及中文版;国内的比较**的当属BAT和菊厂的规范了,网上很容易查到。

下图是CSDN上的某位大神做的Google C++代码规范的简洁版

图片出处:CSDN博客 http://blog.csdn.net/voidccc/article/d

代码审查中除了人工审查外,还有专门的自动化测试工具,用以辅助测试人员发现代码中的漏洞。

功能测试

开发工程师和测试工程师互怼的代码审查环节结束后,就要开始把代码放在车上跑,功能测试开始。

虽然代码通过了模拟测试,但此方式只能验证算法的逻辑没有问题。功能测试就是为了确保代码在真实的场景中也能顺利通过考验。

测试工程师需要协调车辆,协调测试场地,模拟出需求定义时的场景,让交通参与者以规定的速度在场景中运行。然后启动软件,开始记录自动驾驶汽车上各传感器的信号和视频数据。

功能测试时,通过控制变量,使自动驾驶汽车能以不同的车速,通过设定的场景。

控制的变量既可以是自身车辆的速度,也可以是交通参与者的速度、方向等。功能测试通过广泛的测试,可以尽可能多地涵盖大部分交通场景。

每通过一此测试,测试工程师就会在小本本上做下标记,进行下一个测试项。当遇到测试不通过时(这是常有的事),测试人员会将在汽车上收集到的各种信号和视频打包,拿回去和开发工程师共同分析出错的原因。

测试失败的用例会录入到Bugzilla、Mantis或BugFree等Bug管理系统中,由于追踪和管理Bug,提高解决Bug的效率。

性能测试

汽车的工作环境是十分复杂的,功能测试只能保证自动驾驶系统能在理想环境下完成场景要求的任务。

比如城区道路的AEB(紧急制动)测试,功能测试时*高可能就测到80km/h。可一旦场景变成了高速,如果没有做80km/h以上的测试,谁也无法保证车速到达120km/h时,汽车紧急制动时能否停下。

因此性能测试必不可少。性能测试是为了满足场景需求之外的更高要求;也可以说性能测试的目的是为了知道当前系统的极限,为自动驾驶系统功能做冗余。

自动驾驶领域有一个很有意思的性能测试和蔚来汽车的测试团队有关。他们打破了一个世界纪录——无人驾驶汽车的*高时速257km/h。之前这个纪录是由奥迪保持的241.4km/h。

他们的性能测试情况如下:

测试工程师先让专业的赛车手在测试场中跑了一遍,记录了一组无人驾驶汽车需要跟踪的GPS点,也就是一串无人驾驶的轨迹点。

之后将这段轨迹点输入到自动驾驶系统中,让车手坐在车上,自动驾驶跑一遍,确保赛车能按正确的轨迹从起点跑到终点。

随后车手下车,关闭车门。远程启动自动驾驶系统,自动驾驶的表演开始。

可以看到测试过程中无论是直线还是弯道,赛车均保持了较高车速。

就这次性能测试来说,蔚来用世界纪录告诉我们,他们有一个牛X的自动驾驶测试团队,敢于挑战这种极限。

其实我司在自动驾驶高速路段做性能测试时,也尝试过把车速设置为150+km/h。得到的结论是速度越高,外界环境(比如横风)对车辆的影响呈指数增长,对控制算法和系统的稳定性要求极高。就算有专业的驾驶员在司机驾驶座上随时准备接管车辆,也不要轻易尝试。

以上提到的性能测试只是举了车速这一个简单的例子,当然还有其他参数的性能测试,比如自动驾驶系统的工作温度、交通参与者的蛇皮走位等都可以是性能测试的某个指标。

结语

以上仅粗略介绍了自动驾驶系统的测试方法,实际操作时比以上过程更繁琐。由于自动驾驶系统的研究和量产是两码事,因此两种测试方案也不尽相同。前者更倾向于功能和性能测试,后者更倾向于安全性、舒适度和人机交互体验的测试。

总的来说,自动驾驶系统不像汽车上的其他零部件有成熟的测试体系,还需要更多的积累。


来源:公号“潘永俊在线“


相关文章

赵祥模等:基于整车在环仿真的自动驾驶汽车室内快速测试平台
新基建下的自动驾驶:虚拟仿真测试成为创新经济代表
技术畅谈|智能网联汽车关键技术和仿真、测试及评价




SELECTED EVENTS




 

长按二维码识别关注



我就知道你“在看”


  • 电话咨询
  • 021-2230 6692
  • 15021948198
None