自动驾驶测试中的Re-simulation技术

2023-10-27

       随着自动驾驶技术的发展,自动驾驶仿真的重要性越来越大。一是体现在上路之前可以通过仿真进行初步验证,二是体现在路上遇到问题时,可以通过仿真进行数据回放,改善算法模块性能。

       平时常见的自动驾驶仿真主要是利用软件搭载测试场景,然而,随着data-driven技术的发展,如何利用庞大的道路数据提高仿真性能,成为一个有意思的话题。这两天读到一篇文章,分享一下。原文出处为国外一家公司官网,链接:使用重新模拟来验证 AV 堆栈以防脱离

        先简单介绍一下背景。

        在早期测试期间,高级驾驶辅助系统 (ADAS) 和自动驾驶汽车 (AV) 工程团队主要使用联合仿真来测试他们的自动驾驶系统。随着 ADAS 和 AV 系统的成熟,需要更多的道路测试来验证车辆(自我)是否能够安全地处理在其操作设计域 (ODD) 中可能发生的大量可能事件。 

     平均接管率(自动驾驶汽车行驶一段距离平均接管的次数)通常作为一个评判性能的指标,但是当遇到危险情况,安全员接管车辆后,这个问题不能就这么过去了。因为安全员是凭借自我主观意识判断当前路况比较危险且需要接管,如果这个安全员比较保守,就有可能在算法做出决策前进行干预,所以就需要将这个事件进行回放,观察算法的实际表现情况,进而进行算法升级。

        在道路测试期间,自我可能会遇到脱离(即,安全驾驶员脱离系统并接管车辆控制的事件)。ADAS 和 AV 工程师通常使用开环日志回放工具来回放脱离事件,了解安全驾驶员干预的原因,并在下一步道路测试之前修复感知、PNC等算法模块的问题。然而,开环日志回放工具无法确定是否真的需要接管,原因是如果安全驾驶员没有干预,自动驾驶车辆有可能也能够避免碰撞。除此之外,他们也无法显示变化的参数(例如,道路上的行人或由于不同天气条件导致的能见度降低)如何影响自动驾驶汽车性能。

         接下来讲述如何利用数据回放和re-simulation来区分必要和非必要接管。原文表达略有晦涩,我做了简单调整。

一、开环日志回放(log-replay):探索“发生了什么”

        今天,最常见的日志回放类型是开环回放,开环日志回放提供记录的传感器数据以发现问题、分析发生的情况并进行改进。

        例如,假设在道​​路测试中,自动驾驶车接近交通堵塞的尽头,安全驾驶员进行干预以避免碰撞(图 1)。

图1 前方出现车辆,驾驶员进行干预以避免碰撞。

开环日志回放可用于:

  • 分析发生了什么:重放驾驶日志,以可视化安全驾驶员干预的原因。在示例中,我们可以看到驾驶员进行干预是因为本车正在高速接近停止的车辆。
  • 评估定位和感知性能:重放来自事件的原始传感器数据,并通过将算法模块输出与标定的真值进行比较来评估性能。
  • 探索解决方案:在进行进一步的道路测试之前,对定位和感知系统进行改进。可以通过使用更新的算法版本重新运行事件来测试对本地化算法模块的改进。

        尽管开环日志回放允许工程师回放和分析脱离接触,但其方法仅限于评估定位和感知堆栈性能。由于开环日志回放无法响应不同的算法行为,它无法评估如果安全驾驶员没有干预,运动规划和控制系统会如何表现。

     

二、重新模拟(re-simulation):探索“会发生什么”、“应该发生什么”和“可能发生什么”

        闭环log-replay或re-simulation是一种日志重放方法,可消除开环日志重放的限制。re-simulation允许开发团队重新创建一个记录的、真实的驾驶场景,并使用模拟器对其进行更改。

re-simulation可用于:

  • 分析和分类:查看安全员的接管是否有必要,以及如果未接管会发生什么重新模拟工具可以对主车算法模块进行响应,来实现闭环日志回放。重新模拟结果包括数值分析和观察是否主车通过测试,来验证接管操作是否是必要的。在图2所示例子中,可以看到接管确实是必要的,如果不接管,就会发生碰撞。                                                               说明:下图2的白车为re-simulation中主车,黄色为真实数据中主车,可以看到如果没有接管,白车会撞到前方车辆。

图2 re-simulation可以确定本车在无干预情况是否会造成碰撞

  • 修复根本问题:通过在记录的事件上运行运动规划和控制算法,确定如何改进算法来避免接管。使用re-simulation结果来确定场景失效的根本原因,并制定解决方案。修复完成后,使用改进的算法重新进行re-simulation,以确认问题已得到解决。
  • 增强记录数据:查看同一场景的不同交通参与者可能采取的行动,以评估整个算法的性能,并增加长尾事件的覆盖范围。工程师可以添加或删除演员(例如,路上的行人),修改演员的行为(例如,增加自我或其他车辆的速度),更改场景的其他参数(例如,下雨或一天中的时间),注入故障到 AV 软件或硬件(例如,传感器重新启动、子系统暂时脱机或传感器硬件故障),或向传感器数据(例如,嘈杂的激光雷达数据)添加噪声。图 3 显示了一个修改 actor 行为的示例,该示例通过将记录的 actor 替换为可以通过一组航路点编辑其行为的合成 actor。

                                   图 3 从记录的参与者中提取行为并对行为进行编辑

        架构这一块略显复杂,为了避免误导,我直接放上原文。个人总结如下,感觉理解略不太透彻,欢迎讨论。

  • 原始数据喂到感知,提取交通参与者信息;
  • 主车由算法闭环控制,与log记录不一致,需更改raw data中的感知数据;
  • 记录的交通参与者一般是相对主车坐标信息,由于主车信息相对log做了改变,需要对参与者进行坐标转换;
  • 最终主车和参与者的信息传送到评估层,根据指标进行评估。

三、重新模拟(re-simulation)架构

        整体架构如图4所示。

图4 re-simulation架构

        First, raw sensor data is fed into the perception stack in an open-loop log replay and the detected actors are extracted. Then, the motion planning stack runs in a closed loop. To do this successfully, the outputs of the perception stack need to be modified to account for ego divergence. In a drive log, detected actors may be reported relatively to the ego. To get from the open-loop reference frame to the re-simulation reference frame, different actor positions thus need to be adjusted to align with the simulated ego pose (coordinate transform). Throughout the entire process, the metrics and observers framework collects signals to compute an evaluation of the ego’s performance (pass/fail).

技术挑战

  • 导致工程师需要手动调查和修复代价高昂的故障;
  • 需要能够相信重新模拟是准确且可重复的,这可以通过在非接管的情况下对日志部分运行重新模拟,并验证误差是否很小。
  • 算法在实车上的表现和仿真中的表现可能不完全一致。 如果在非车载硬件上运行算法,它可能会落后于重新模拟,尤其是在云上运行时。如果堆栈落后,它可能会延迟响应事件,由此产生表现是不确定的(即,每次重新模拟运行时都会发生变化)。

应用的方法

        开环日志回放和闭环重新模拟对于全面评估 AV 堆栈的道路性能是必要的。

  • 开环日志回放允许工程师探索脱离期间发生的事情并评估定位和感知堆栈性能。
  • 重新仿真使他们能够区分必要和不必要的脱离,并修复运动规划和控制堆栈中的根本原因问题。

        这两种方法共同帮助开发团队验证他们的整个 AV 堆栈,并更快地将安全的自主系统推向市场。

         从大方向来讲,log-sim和world-sim都有各自特点,技术细节也比较多。大胆设想一下,等技术成熟了,仿真端也许就可以和车端成为一个闭环。车端遇到的问题传到云上的仿真端,仿真端分析问题,改进算法,再通过云下发给车端改进后的算法,美滋滋~

        是故酒驾而不兴,交通事故而不作,故百姓上街而不忧,是谓大同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动驾驶测试中的Re-simulation技术 的相关文章

随机推荐

  • 【python数据挖掘课程】十五.Matplotlib调用imshow()函数绘制热图

    前面系列文章讲过数据挖掘的各种知识 最近在研究人类时空动力学分析和幂率定律 发现在人类兴趣转移模型中 可以通过热图 斑图 来进行描述的兴趣转移 如下图所示 下一篇文章将简单普及人类动力学相关知识研究 这篇文章结合Matplotlib的ims
  • Inversion of Java Interview - Java集合篇

    Inversion of Java Interview Java容器篇 好奇心是驱动人类进步的动力之一 一 Java容器概况 Java容器分为Collection和Map两大类 Collection集合的子接口有Set List Queue
  • php上传和导出excel文件,(进阶篇)使用PHP导入Excel和导出数据为Excel文件

    有时需要将Excel表格的数据导入到mysql数据库中 我们使用PHP的一个开源项目PHP ExcelReader可以轻松实现Excel的导入 1 导入XLS PHP ExcelReader这是一个开源的项目 主要是来解析excel的文件
  • iOS 开发者账号添加手机号码 Program License Agreement has been updated.edit phone number

    苹果开发者账号经常性的更新一些开发协议让开发者同意 苹果爸爸的要求 同意就好了 只有Agent权限账号会收到 团队成员账号权限区别请参考 最近苹果开发者账号又更新了协议 apple id没有绑定手机号的 在开发者账号里会要求你必须绑定手机号
  • 研究生阶段的研究方向以及一些想法

    好久没有更新了 综合考虑后 即将入学 KAUST 成为一名硕博连读的学生了 出于导师研究方向以及个人兴趣的一些原因 希望在接下来的五年 深耕一下 Generative Models Continual Learning Zero Shot
  • 接口测试工具-Postman-安装和使用

    目录 Postman介绍 1 安装Postman 2 Postman 使用 2 1 合集 collections 2 2 发起请求 2 3 Get请求 2 3 1 无参数的Get请求 2 3 2 带参数的Get请求 2 4 Post请求 2
  • Python薪资的高涨原因及相应代码分析

    Python语言自问世以来 一直以其简洁 易学和多功能而受到广泛关注和应用 在近年来 Python编程语言的普及和应用领域的不断扩大 使得Python开发人员的需求量大幅增加 与此同时 Python工资也呈现出快速上涨的趋势 本文将深入探讨
  • JDK1.8新特性详解

    介绍 Java是世界上使用最广泛的编程语言之一 近年来随着互联网技术的高速发展 对Java的要求也越来越高 JDK1 8是Java平台上的一个重要版本 引入了许多新特性和改进 本文将详细介绍JDK1 8中的新特性和应用场景 一 Lambda
  • 日期处理(moment.js)使用笔记

    之前没接触moment js 在新项目中见到了 做一做使用笔记也是分享一下 安装 引用 npm install moment 或者 yarn add moment import moment from moment 导入文件 Vue pro
  • Spring Boot各版本与Java版本的对应兼容关系,与构建工具(Maven、Gradle)版本的对应兼容关系,对servlet 容器的支持

    by 垃圾程序员 当前文章具有时效性 在当前springboot的版本下做的整合 之后大家视情况可以直接到Spring的官网查看 Spring HomeLevel up your Java code and explore what Spr
  • MAC下QT5 + Xcode 4.6.3 使用小结

    1 直接在命令行里使用qmake 大家的MAC上面QT5的安装路径不同 导致不能直接使用qmake命令行 xcode项目也不能拿来就用 有两种方法可以直接在命令行里面使用qmake 1 修改 bash profile 此方法在PATH中添加
  • [C#学习] BindingNavigator控件

    一 概述 BindingNavigator控件的用户界面 UI 由一系列 ToolStrip 按钮 文本框和静态文本元素组成 用于进行大多数常见的数据相关操作 如添加数据 删除数据和在数据中导航 每个控件都可以通过 BindingNavig
  • Windows安全中心 你的IT管理员已限制对此应用的区域的访问

    打开本地组策略 gt 计算机配置 gt Windows设置 gt 安全设置 gt 本地策略 gt 安全选项 gt 打开安全选项后 gt 滚轮转动往下拉 gt 找到 用户账户控制 选择以管理员模式批准运行所有管理员 打开属性 选择已启用 应用
  • linux-文件时间详解

    不同的文件系统 不同的操作系统对于文件时间的设置是不同的 一般分为创建时间 birth 修改时间 ctime 访问时间 atime 一般默认情况下显示的是修改时间 ctime 即默认以修改时间 ctime 当作排序时间 即一般情况 ls l
  • vue中的事件绑定

    目录 1 事件处理 1 1 最简单的事件绑定例子 1 2 默认参数event 1 3 其它自定义参数 1 4 this 2 事件修饰符 2 1 prevent阻止默认事件 常用 2 2 stop阻止事件冒泡 常用 2 3 once事件只触发
  • [原创]微软BI专题-渐变维度Type2进化三部曲

    在ETL过程中 对于渐变维度的处理 一直是大家比较关注的问题 关于渐变维度的概念 我们在2007年8月的 渐变维度转换及其实现 一文中有所介绍 本文将在实际应用的对比中 提供三种处理渐变维度的方法 并比较其效率 第一代 SSIS控件时代 对
  • [数值计算-15]:函数近似值的线性与非线性拟合的原理与Python代码示例

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119973082 目录 第1章
  • Python实用脚本:统计TXT文件字数

    最近在用金山打字通练习98版的五笔输入法 想知道自己找的文章大概有多少个字数 因为txt文件打开看不了总字数 就复制后放在word看字数 感觉实在是麻烦 就找个了Python脚本来算字数 还能统计总共练习了多少个字 txt内容要转换成ANS
  • 解决httpcore和 httpclient 版本冲突,以及httpcore下载不了依赖的问题。

    目录 问题一 编辑 问题二 解决 问题一 maven install 报错说找不到httpcore 问题二 在项目运行时候找不到org apache http annotation ThreadSafe的类文件 解决 1 遇到该问题可能是h
  • 自动驾驶测试中的Re-simulation技术

    随着自动驾驶技术的发展 自动驾驶仿真的重要性越来越大 一是体现在上路之前可以通过仿真进行初步验证 二是体现在路上遇到问题时 可以通过仿真进行数据回放 改善算法模块性能 平时常见的自动驾驶仿真主要是利用软件搭载测试场景 然而 随着data d