如何学习自动驾驶仿真?

无人车系统开发涉及到复杂的开发流程和验证流程,同时具备调试准备时间长、程序模块多、调试过程复杂等问题,实车调试的人力成本和时间成本十分巨大。因此搭建一套系统,在无人驾驶的开发调试和测试验证阶段能够提供直观、高效的功能支撑,可以极大提高开发效率和验证效果。在当前无人车企业的技术背景下,仿真系统是加快开发进度的最优方案之一。

一、自动化仿真平台搭建

计算机仿真技术被广泛应用于工业V流程的第一分支,能够在复杂系统开发前期通过快速验证和持续迭代的方式对产品开发过程实现降本增效。搭建一套适用于自家产品特点的自动化仿真平台,需要多工种密切配合,保持功能同步提升,明确实施阶段和产出物,为产品开发的各个阶段提供多样化的持续性服务。

1.1让车跑起来

首先要搭建一个最基本的仿真环境,包括仿真软件、被测对象程序、测试场景和接口程序四个角色。仿真软件的获取有两个途径:从零基础开发和基于商业软件开发。从零开发的灵活度高,但需要投入较大的时间和精力进行平台的升级和维护。基于商业软件的二次开发,需主要从以下方面进行衡量:

1)灵活性:软件内部各模块能够方便地增加和减少,可以支持不同层级、不同被测目标的测试和验证;

2)开放性:提供输入和输出双向数据通路,通讯方式支持局域网、总线、共享内存等常见方式的一种或几种,通讯协议结构清晰、数据量可控,具备仿真运行过程中的实时操控能力;

3)稳定性:软件在不同配置下能够稳定运行,在界面程序允许的任何操作下不会产生崩溃、功能不响应等为使用者带来困惑的行为,多次运行相同初始条件的场景时产生的数据结果是绝对准确并且相同的,不会因为多次运行引入不确定因素;

4)标准性:软件中是否承载着相关行业标准,这也是软件专业性的体现,标准与行业发展往往相辅相成,标准化的工作结果也更容易被他人使用和持续迭代;

5)功能完备性:软件本身要提供和无人车测试工作相关的多种元素和功能,提供完整的功能链条,尽可能多的涵盖当前和以后可预见的功能范围;

6)运行负载:软件本身应尽可能少的占用系统资源,不能引入软件后较大增加系统负载,造成系统卡顿或不可用的后果;

7)技术交流:拥有较大用户群体和稳定的问题交流途径,为软件高阶功能使用提供帮助。

商业软件自带建立仿真地图和仿真场景功能,测试场景的生成方式可直接解决。而被测对象程序无疑是自家开发的无人车系统,下一个问题是如何让无人车系统和仿真软件通讯,由于双方在开发的时候都不知道对方的存在,也就没有理由要求它们能够直接完成数据交互,此时仿真软件的开放性就显得比较重要了,我们基于仿真软件提供的通讯协议和无人车系统的通讯方式开发了数据交互接口程序作为数据中介,分别对获取到的数据进行格式转换并与两者进行实时通讯,为无人车系统提供感知、定位信息的同时向仿真软件提供控制结果信息,将仿真软件和被测对象进行连接,初步完成最小仿真系统的搭建工作。

但遗憾的是,车还是没有跑起来,因为我们需要为无人车系统提供与仿真场景中完全一致的高精地图,因此必须要求软件的地图格式是公开的,这样才能开发出用于转换仿真地图文件到程序所需高精地图文件的工具软件。

图1最小仿真环境闭环

1.2场景多了才有用

能够在仿真环境中运行被测对象后,为了达到测试目的,会依照之前的测试经验,按照不同分类建立多个场景库,这些场景使用不同的测试地图、不同的交通角色、不同的时空设置对被测对象产生影响。

不同场景在使用过程中,需要不断地启动和停止仿真软件、无人车系统和仿真接口程序,替换场景地图,修改特定设置等重复性操作,每次人工修改不但枯燥无味,还容易出现错误,造成误报问题的不良后果。

为了解决手动操作造成的影响,考虑通过软件将场景、操作、结果数据有序地管理起来,需采用自主开发的方式实现,因为不同的场景在配置、结束方式、初始化条件甚至是交通车辆运行特性上都可能有扩展性需求,很难寻找到一款满足各种需求和不确定性的第三方软件来支撑现有功能和后续扩展。

图2自动调度仿真场景

1.3守在电脑前太累

场景可以自动调度运行后轻松了很多,但依然需要人的参与,发生问题后要及时记录数据、不发生问题时还要一直观察,丝毫不能懈怠,因为意外往往来的毫无征兆,为了进一步解放劳动力,在与无人车系统开发同事深入沟通后,参考相关法规制定了测试指标,决定增加一个守护程序,将之前通过人工观察进行判断的方式转变成通过计算机程序实时对数据结果进行分析,在运行过程对多种指标进行监控和判断,一旦发现产生了不良现象,则自动记录发生问题前后一段时间的数据信息到文件,供后期分析和解决问题使用。

所有场景运行结束后,守护程序会将整个仿真过程中使用的场景信息和产生的问题进行总结和分类,并按照预定格式生成仿真运行报告文件,保存好后守护程序自动退出。

守护程序的业务内容与无人车系统紧密相关,会在持续使用过程中伴随着无人车系统能力的提升逐步扩展判断范围、提升判断精度,实现仿真过程的无人值守。

图3守护程序

1.4即刻执行

在无人车系统迭代开发过程中,有时会出现因为修改某一功能导致其它功能损害而在几次迭代之后才被发现的情况,造成修改和维护成本较大的后果。为了降低这种常见现象造成的影响,能否在无人车系统代码发生改变时立刻执行批量仿真场景进行功能检测呢?

本着将无人系统进行到底的精神,将自动仿真系统的运行权限上交到服务器,同时引入持续集成工具作为调度软件,实时监测无人车系统代码仓库中的修改,补充代码下载、仿真文件替换、编译生成、场景库选择、邮件发送报告等自动化功能,结合自动仿真工具的场景调度、仿真结果管理、仿真报告生成等功能,完成全流程、多角色的自动化闭环仿真平台的搭建工作。

对无人车系统能力的深入理解、场景库精准分类是仿真平台发挥运行效能的关键所在,仿真平台结构相对稳定,但各个功能节点的能力必须跟随无人车系统开发升级而持续提升,才能不断为仿真测试和验证工作注入活力,在日常开发过程中,通过一次次自动运行大量仿真场景不断制造开发到测试的小循环,验证新修改功能的同时测试系统的稳定性,将问题更早暴露出来,可以有效提升开发效率、增加系统稳定性,为打造好产品贡献力量。

图4无人车自动化仿真平台

二、自动化仿真平台应用

搭建仿真平台的目的是为无人车系统的开发和测试工作服务,其服务的目标人群包括测试人员、开发人员和项目管理人员。

2.1测试人员怎么用

测试人员不需要详细了解整个仿真平台结构、也不需要编写代码即可向仿真平台中不断增加仿真场景达到扩展测试能力的目的。测试人员的工作内容包括如下方面:

1)整理并提供测试用例,明确测试用例的测试目的;

2)在仿真软件的可视化界面中搭建能够描述测试用例的仿真场景;

3)对测试用例分类,在对应的场景列表文件中添加新场景的文件路径等信息;

4)仿真平台运行结束后,查看报告、收集数据包、整理问题并上传到Bug管理系统;

5)开发人员修复问题后,根据问题记录中的信息,单独运行仿真环境验证修改效果,反馈问题的回归测试结果。

仿真平台的引入不会过多增加测试人员的工作内容,其使用方式和之前的实车测试流程一致,唯一不同之处在于之前需要在真实场地上搭建测试场景,现在需要在仿真软件的虚拟环境中搭建,而后者的优势在于一次搭建多次使用,且每一次使用都能保证环境输入条件的高度一致性,对测试效率和问题回归有很大帮助。

每次程序提测,由于仿真平台自动运行、无人值守的特点,能够快速对所有测试场景执行全覆盖测试,极大提升测试工作效率。

图5测试人员仿真工作内容

2.2开发人员怎么用

仿真平台对开发人员的服务主要体现在两个方面:

1)开发阶段作为调试环境使用

在无人车系统新功能开发阶段,尤其是开发前期,往往面临硬件资源缺乏、其它模块不稳定、测试场地资源不足、自身算法问题较多的情况,仿真平台的基础测试部分可以比较容易的拆解成多个模块的调试环境,为不同模块模拟接口数据,提供虚拟运行环境,使得开发人员能够将注意力更多的专注在自己的问题领域,提高开发效率。

2)测试阶段作为问题复现工具使用

测试人员发现问题后更新在Bug管理系统中,开发人员获取到问题和信息后,能够快速找到对应场景进行问题复现和解决,不受硬件和场地限制,不需要做详细问题描述、且更改代码后能够立刻得到验证,有效缩短问题解决闭环中的时间跨度,提升问题解决效率。

具体使用过程证明,开发调试阶段更容易发现大量算法逻辑问题,减少开发和测试时间跨度能够让开发人员更高效地解决问题,下图是开发人员正在使用仿真环境对无人驾驶系统进行调试和问题排查。

图6智行者无人乘用车星骥仿真

图7智行者蜗小白和某新产品仿真

2.3项目管理人员怎么用

项目管理人员需要时刻掌握项目的开发方向和动态,当无人车系统代码被提交到代码仓库后,仿真平台会将经过测试所生成的报告文件发送到项目管理人员和相关开发、测试人员工作邮箱,让大家在第一时间获得本次修改相关的场景用例测试结果,为项目管理人员进行下一步行为决策提供信息依据。

结语

无人车自动化仿真平台是一个多角色参与、长时间维护的系统工具,能够在产品的完整开发周期内为测试人员、开发人员和项目管理人员提供多样化服务,有效提升开发效率,降低测试成本、提升测试效果、缩短开发周期,在应用过程中跟随无人车系统功能增加而不断提升测试能力,力求为多种无人车产品提供更加优质、方便、准确的业务支持。