机器人杂志

PDF
机器人杂志/2020年/文章

研究文章|开放获取

体积 2020年 |文章的ID 9345360 | https://doi.org/10.1155/2020/9345360

本杰明Vedder说,薄熙来Joel Svensson乔尼酿造,马格纳斯琼森, 自动化测试的自主驾驶超宽频定位”,机器人杂志, 卷。2020年, 文章的ID9345360, 15 页面, 2020年 https://doi.org/10.1155/2020/9345360

自动化测试的自主驾驶超宽频定位

学术编辑器:戈登·r·Pennock
收到了 09年9月2019年
接受 2019年11月14日
发表 2020年1月24日

文摘

自主车辆需要准确、可靠的定位,这些系统需要详尽的测试。我们已经评估定位基于超宽频范围(UWB)与我们的自动驾驶汽车模型使用一个高度自动化的方法。随机可行驶的轨迹生成,而超宽频的立场相比,对实时运动学卫星导航(RTK-SN)定位系统还配备了我们的模型车。故障注入是用于研究超宽频定位系统的容错。解决挑战是为实时硬件自动生成测试用例,测试之间恢复状态,维护安全,防止碰撞。我们能够自动生成和数以百计的试验进行汽车模型实时并重新运行它们始终启用和不启用故障注入的情况。因此,我们将演示一个新颖的方法对复杂的实时执行自动化测试硬件。

1。介绍

准确的自动车辆定位是一个重要的技术。一个定位系统需要准确和可靠的;因此,需要广泛的测试和评估。在本文中,我们解决这个问题不仅需要通过自动化测试用例生成模拟(1)和半实物(边境)测试2,3),但也在全面的硬件。为了演示这种方法,我们装备自动驾驶汽车模型(4)和一个超宽频定位系统(UWB)除了实时运动学卫星导航定位系统(RTK-SN)它已经和评估性能的超宽频系统对RTK-SN系统。我们的测试方法包括自动生成随机可行驶的轨迹对于我们的汽车模型,将故障注入超宽频系统和定位系统的位置输出进行比较。

生成随机可行驶的轨迹的目的是暴露场景的定位系统广泛而无需手动创建所有的场景;相反,一些属性如何定义,场景可以创建和测试生成基于属性。这些属性包括区域的几何形状允许开的车,车的驾驶动力和速度限制。的性能指标测试的超宽频和RTK-SN-based定位系统一致。

生成的测试中,我们使用基于属性的测试(PBT)工具ScalaCheck [5]。PBT是一个方法来测试软件的功能需求6]。PBT抽象模型的测试用例自动生成的被测系统(SUT),而不是手工编写单元测试的软件的情况。

我们也要评估超宽频系统的容错,我们利用故障注入(FI)。FI是练习的目标和评估错误处理机制(7]。FI是常用的在整个开发过程的关键安全系统;从模型的硬件8)和模型的软件(9软件部署和运行在目标系统上(10,11]。在我们的例子中,我们使用software-implemented FI在目标系统上运行的软件,例如汽车模型上的定位系统。

FI期间,通常运行几个不同的场景(输入),不同的故障注入在运行期间,虽然比较SUT同一场景没有缺点,即金色的运行。这些场景通常是手动创建,可以耗费时间当一个系统的不同方面需要被考虑。在我们之前的工作中,我们展示了如何使用PBT结合FI生成许多随机测试,金色的运行可以动态的模型用于PBT工具(12]。这样的功能性和非功能性需求可以同时测试使用相同的测试设置,可以减少所需总测试工作。我们已经测试了这种方法在一个简单的端到端系统(E2E)从AUTOSAR标准13),在一个更复杂的四轴飞行器系统模拟器(1]。在这项工作中,我们扩展我们的方法执行PBT和FI系统上同时使用仿真模拟,以及完整的硬件。

此外,重要的是要有能力自动回放问题和有趣的测试,以评估如果结果是间歇性的或重复的。故障注入是执行,必须重复测试常常使用和不启用故障注入。因此,一个方法来生成一个返回轨迹,汽车又回到初始位置和姿态上的任意位置和姿态测试跟踪是必需的。这带来了以下挑战:(我)而不是模拟时间,系统实时运行在这个研究。在本文的上下文中,实时意味着测试生成的一部分一部分的汽车驾驶。我们如何同步的测试用例生成系统,我们可以确保PBT工具可以跟上的延迟需求?(2)如何重置SUT的状态之间生成的测试?我们的测试使模型车开车沿着随机轨迹,从而使其最终测试结束的时候在一个随机位置。为了执行下一个测试,我们必须使模型车驱车返回到起始位置的随机位置之前的测试结束。(3)我们如何保持安全而进行的测试?我们必须避免生成测试,导致碰撞或其它危险情况。

SUT在这项研究是超宽频定位系统安装在我们的自动驾驶汽车模型。超宽频定位系统获取其位置估计融合距离测量固定锚与标题和量距数据从内部传感器在汽车模型。我们的测试是由汽车模型自动生成轨迹的几何,这样他们可以跟着车,除了拥有的财产不是主要的汽车模型到一个角落里有太少的空间安全地停止。当汽车遵循轨迹,超宽频和RTK-SN位置之间的偏差超过1 m被认为是一个失败。在测试期间,我们也超宽频注入故障定位系统来研究它们的作用以及它们是如何处理的。我们执行实验既是一个边境测试与主控制器的模型汽车电机的运行模拟和动态运行的汽车和汽车模型在户外进行实时自动生成测试用例。

这个实验设置实时和延迟的挑战,特别是挑战重置SUT的状态,这样可以执行新的实验。重置SUT状态意味着生成轨迹精确模型开车回到初始位置和重置状态的超宽频定位系统。能够重置状态始终为回放和分析记录实验也很重要。进一步,重要的是生成测试,不使模型车撞上任何障碍,这是一个重大的挑战相比,模拟和仿真案例。因此,本文的主要贡献(我)展示与FI PBT如何可以进行实时硬件同时解决上述挑战。(2)我们的方法来生成安全的随机轨迹模型车,如何生成轨迹之间开车回到初始位置测试。(3)展示如何反复回放实验实时硬件有或没有FI研究断层的影响,测试环境随机变化的影响。(iv)方法做FI固件最后的硬件上运行的小型侵入代码库。

本文的其余部分组织如下:在部分2,我们描述我们的测试设置和SUT的不同部分,并在部分3,我们描述我们的测试用例生成方法。部分4提出了从我们的测试结果,在部分5从这一工作,我们提出我们的结论。

2。系统设置

SUT的实验是超宽频定位系统在我们的自动驾驶汽车模型,由连接启用一个超宽频测距模块的嵌入式控制器的汽车。的照片超宽频的汽车模型模块安装在钢管在图所示1。图2显示了一个汽车模型框图,在顶部的超宽频模块显示绿色,连接在一个控制器区域网络(可以)总线。汽车模型估计它的位置通过结合RTK-SN [14与航迹推算]基于惯性测量单元(IMU)和量距的反馈电机控制器(https://vesc-project.com/)。车的位置过滤器也跟踪RTK-SN样本的时间戳来弥补样品的延迟在更高的速度。这使得它可以估计的位置汽车模型的精度约5厘米100赫兹更新率在动态条件下(4]。

控制汽车模型,我们使用SSH隧道通过4 g连接的覆盆子π3单板计算机,转发的端口必须控制和可视化模型车的状态。配置、控制、处理和可视化模型的汽车从我们RControlStation软件在计算机上运行的SSH端口转发从车里就完成了。RControlStation可用于图形化编辑轨迹显示在OpenStreetMap (15),汽车可以使用一种改进的版本(4纯追求算法的[16]。实时位置估计和控制,包括纯粹追求算法,处理控制器板上皮层M4单片机上了车。远程调试和固件更新可以通过SSH隧道的覆盆子π的电脑,这是一个方便的在开发和测试。

RControlStation还有一个网络接口,可用于控制汽车模型从远程软件在UDP和TCP发送XML消息。此外,有一个同步生成和解码这些消息的C库,使其易于实现与汽车通信从任何支持本机接口的编程语言C代码。我们已经扩展这个网络接口和图书馆支持访问RControlStation轨迹在地图上,以及支持上传生成轨迹地图和/或汽车模型。这个C接口一起BridJ (https://github.com/nativelibs4java/BridJ)为Java本地接口和Scala给我们完全控制在模型汽车以及可视化界面从Scala。设置如图的概述3

2.1。边境模拟模式

汽车模型的控制器也有一个模拟模式,在汽车的发动机和惯性模拟及其位置由模拟电机的反馈更新。乌兹别克斯坦伊斯兰运动和RTK-SN校正是关闭在这个模式。模拟模式使我们能够只连接控制器印刷电路板(PCB)的汽车模型RControlStation USB和无缝集成与测试设置。这是有用的设计和建立实验也不用担心损坏硬件作为管制与大多数的软件可以运行在最终的硬件没有物理移动部件。

2.2。超宽频定位

我们的超宽频定位系统负责评估汽车模型的位置不依赖RTK-SN头寸,从而提供一个独立的和冗余的位置估计。这可能是有用的在场景不是整个驾驶区域全球导航卫星系统(GNSS)覆盖或当一个独立的位置来源是需要增加位置估计的完整性。

超宽频定位系统由许多模块包含Decawave DWM1000超宽频收发器(17),一个32位单片机、can总线接口,和一些电压调节器。我们已经开发了这些模块在以前的工作18),他们可以测量相互之间的距离最好的情况大约10厘米的准确性。其中一个模块是安装在背面贴我们的汽车模型及其控制器连接到can总线,如图14和两个或两个以上的模块安装在固定三脚锚如图5

我们扩展我们的模型车控制器的固件与位置传感器融合算法合并距离测量从汽车上的超宽频模块定位测程法电动机控制器的数据和从乌兹别克斯坦伊斯兰运动航向信息。进一步,我们扩展RControlStation能够编辑并上传OpenStreetMap的超宽频锚位置的汽车模型用于传感器融合。这就给了超宽频传感器融合输入信息如下:(1)测量距离的超宽频模块模型车锚与已知位置。(2)测程法,迭代之间的车已经走了多远的过滤器,通过多少马达旋转与已知的传动装置,车轮直径。(3)从IMU标题信息来源于陀螺仪和/或磁强计,根据车的配置。

标题和量距信息到达100赫兹,而超宽频模块采样10赫兹。注意锚被测量的距离一次骑自行车通过一个列表只RControlStation提供的定位和测量的锚比80更接近离最后的位置估计。完成80米减少因为锚太远的测量可能不会成功,只会降低系统的更新速度。

基于测程法和标题数据,汽车的位置估计是先进的 在哪里 是新的位置, 是前面的位置, 测程法旅行的距离,因为前面的位置更新,然后呢αIMU的航向角。这个更新在100赫兹,在短距离是准确的,但错误的增加没有上限,因为它是基于相对测量。处理漂移,10 Hz距离测量使用锚一次当他们到达正确的位置估计。这是通过第一计算预期的超宽频模块的位置估计的汽车通过删除其抵消汽车的位置 在哪里 估计位置超宽频模块的上了车, 是汽车的估计位置, 是超宽频的抵消模块和汽车的后轮之间的中心α航向角。然后估计距离和方向相对于阿克尔在计算问题 在哪里 是估计的标量距离锚, 锚的位置, 是一个向量长度l指向估计方向的锚。然后估计汽车更新的位置 在哪里 估计是新的位置, 是旧的位置估计,然后呢 距离测量锚的超宽频模块。

换句话说,当锚的距离测量,测量相比,预计,锚从当前位置估计的距离和位置估计然后更新通过移动锚的方向。这个运动是截断0.2为了拒绝反射等高频噪声和离群值。这是收敛的,当初始位置和至少两个锚。如果初始位置是未知的,汽车是静止的,至少有三个锚的位置,是线性无关的xy飞机需要收敛。实验结果在这个位置估计的性能实现节中可以找到4。应该注意的是,我们的超宽频定位实现假定模型汽车移动飞机上和锚有相同的高度超宽频模块上了车。偏离这一假设降低超宽频定位性能,但在我们的经验中,实际的性能的影响小于0.5米,这是在我们的需求。

3所示。测试用例的生成

自动化测试用例的生成和测试本身,我们使用ScalaCheck [5),这是一个测试框架,主要是,Java和Scala程序Scala面向对象和函数式编程语言实现。除此之外的目的,通过BridJ和C应用程序编程接口(API),针对实时嵌入式系统运行测试时移动的物质世界。

ScalaCheck图书馆提供了一个基于序列的测试状态系统通过一个API的交互。这个库被称为“命令”库(org.scalacheck.commands.commands),每个可能的交互的API SUT ScalaCheck被描述为一个命令可以生成使用“发电机。“图书馆是非常有用的命令当SUT的国家必须以产生进一步的命令或当国家需要确定命令生成正确的结果。使用图书馆的命令时,携带SUT的抽象模型状态测试,和每个命令可以使用状态来确定它产生正确的结果。的命令还负责在必要时更新状态。生成器负责生成一个合适的基于当前状态的命令与合适的参数。ScalaCheck保持我们的状态是什么样子显示后,后引入所有必要的概念。

SUT的API进行交互,我们给ScalaCheck定义如下(算法1)。

(1) 车{
(2) / /应用制动器,等到车停了
(3) defstopCar():单位= {…}
(4) / /发送下一个轨道车,等到
(5) / /几乎完成了。返回true,如果最大的区别
(6) / /超宽频和RTK-SN位置保持低于1米
(7) defrunSegments(路线:列表[RpPoint]):布尔= {…}
(8) / /开车回到其初始位置,等到它
(9) / /到来。否则返回true,如果成功,则返回false。
(10) defrunRecoveryRoute (ri: RouteInfo carRoute: Int):布尔= {…}
(11) / /添加一个断层的探测
(12) defaddFault(探针:字符串,faultType:字符串,
(13) 参数:翻倍,开始:Int,持续时间:Int):单位= {…}
(14) / /清除所有的缺点
(15) defclearFaults():单位= {…}
(16) / /设置超宽频位置等于RTK-SN位置
(17) / /为了从一个已知状态。
(18) defresetUwbPosNow():单位= {…}
(19) }

最终这些方法与模型车,因为它正在运行,通过TCP。的评论提供的API描述runSegments方法可以返回假当该超宽频和RTK-SN-derived位置相差超过1米。如果发生这种情况,测试就会失败。

当使用命令库,ScalaCheck测试是一个序列的随机命令作用于系统。我们有指定的命令如下:(我)RunSegment是一个命令生成的随机轨迹。(2)AddFault是一个命令注入故障。

每个命令可以使用不同的参数生成。在的情况下RunSegment,参数是一个随机轨迹AddFaultparameterised在类型和大小(或价值)的故障注入。本文探讨以下发电机的命令。(我)genRunSegments生成一个随机轨迹命令。生成过程中概述部分3.2(2)genFaultWheelSlip生成一个AddFault命令携带信息如何改变汽车旅行距离来模拟这个错。这是在部分作进一步的解释3.1(3)genFaultYaw生成一个AddFault命令,参数估计偏航角的影响。(iv)genFaultAnchor生成一个AddFault命令,参数,添加一个偏移量测量的距离定位。

每个命令都有一个先决条件和后置条件。ScalaCheck决定使用的前提是如果命令可以被允许运行给定的当前状态。执行命令后,ScalaCheck运行代码后置条件,决定如果测试可以继续或发生故障。

作为我们的测试包括户外移动车,一个参数的测试用例的生成是一个描述区域允许在旅行。这个测试场景的几何使用RControlStation指定的路线不同的id。注意路线在RControlStation由一组连接的点,我们用它们来定义多边形和轨迹。

6显示了这样一个场景,路线0定义了轨道,汽车开始在每个测试和路线1定义了复苏轨迹,用于引导车回到了开始和一个可重复的轨迹和速度。路线2定义了一个外多边形包含允许开的车,和路线4 - 7定义图样的封闭多边形的汽车是不允许开车。

建立了这些概念,国家由ScalaCheck促进维护测试用例的生成具有以下内容(算法2)。

(1) 用例类状态(
(2) / /生成的轨迹
(3) 路线:列表(RpPoint),
(4) / /对象包含可行驶的映射方法
(5) / /生成有效的轨迹。
(6) routeInfo: routeInfo,
(7) / /故障注入到目前为止
(8) faultNum: Int)

也就是说,到目前为止它包含生成的路线以及测试场景几何信息和故障注入的数量。

现在我们继续生成测试用例,使用ScalaCheck,如下:(1)创建一个新的状态和初始化默认值。会员faultNum被初始化为0,会员路线初始化与ID 0获取路线从RControlStation TCP / XML。会员routeInfo初始化路线2和4 - 7,定义有效区域内生成的实验是允许。(2)创建一个新的SUT对象,表示连接到汽车,它可以执行的操作。SUT对象用于清除注入故障的汽车,开车回到经济复苏路线,如部分所述3.3,开始沿着开始开车的路线。完成复苏之间的路线,沿着开始开车路线,汽车上的超宽频位置估计是重置等于RTK-SN位置估计。这样做的好处是,所有的实验都开始于一个已知的和可重复的状态。(3)现在状态是初始化和汽车驱动器沿着路线,开始一个新的命令生成的,也可以是一个FI命令,如部分所述3.1,或者一个RunSegments命令,如部分中描述3.2。根据生成的命令是一个分布的选择,可以基于系统状态,例如,这样,只有一定数量的金融中间人在每个测试生成。的genRunSegments发电机需要前面的轨迹,使一个有效的扩展,和RunSegments命令需要更新目前的状态和扩展轨迹。(4)重复(3),直到测试完成后或者直到任何命令失败的后置条件。测试规模,或生成的命令,可以在启动时传递给ScalaCheck测试生成。我们选择用5到20命令来生成测试。许多测试运行时,ScalaCheck将开始通过生成较小的测试(更少的命令),增加测试尺寸接近尾声时的测试活动。(5)测试完成后,ScalaCheck将调用destroySut在我们的例子中,试图阻止汽车安全。这是通过首先生成一个有效的轨迹与低速连接到当前的发展轨迹,等到车子已经达到低速沿轨迹,然后应用制动直到车停了。这个安全阻止地址挑战第三部分1(6)ScalaCheck将步骤(1)(5)运行测试的数量我们决定运行。我们通常运行3至100年生成的测试,根据剩余可用时间和电池寿命模型的汽车。

注意,连接到汽车模型有一定的延迟,我们有一个有限的状态采样间隔,和生成轨迹需要一定时间的复杂性和潜在的大量的尝试,部分将对此进行说明3.23.3。因此,RunSegments命令不会等到汽车已经达到的最后部分,但直到它有一定的时间在到达结束之前。在这段时间里,我们有发送第二RunSegments FI命令和命令。因此,我们还必须确保每个RunSegments命令提供至少一个足够长的时间轨迹占这段时间,我们的代码是在一定程度上进行了优化。这一事实ScalaCheck有效Java JVM上运行使得它更容易编写复杂的算法,在很短的时间内执行。这地址挑战我和第三部分1

还应该注意这一点萎缩是一种常见的概念在PBT (6),这意味着失败的测试用例是缩小到较小的失败的测试用例来简化分析他们。的命令实现ScalaCheck,萎缩意味着从失败的命令删除命令序列,同时保持有效并重新运行它每一步缩小后,直到找到最短的命令序列导致失败。在我们的测试中,这不是有意义的改变命令序列对实验产生重大影响,往往导致找到一个不同的故障发生的结果从一个空序列的初始命令。

作为我们的测试设置相当复杂的复制涉及许多细节,我们发表了完整的测试生成的源代码和所有部分对于我们的汽车模型,以及RControlStation的来源,在Github GNU GPL版本3许可证。参见下面脚注的链接(https://github.com/vedderb/rise_sdvp,https://github.com/vedderb/rise_sdvp/tree/master/Linux/scala_test,https://github.com/vedderb/rise_sdvp/tree/master/Linux/RControlStation)。

与其他边境测试设置相比,我们的方法具有更广泛的测试场景的描述。例如,通常选择从一组交通场景19)或任务配置文件(20.)必须手动构造,而我们完全基于更高层次的几何约束生成场景。这让我们产生大变化的场景几乎没有体力劳动,但带来的挑战添加测试用例生成的复杂性。进一步,我们生成的测试不仅是运行在一个边境设置;他们也完全硬件上执行的有额外的挑战保持测试的安全,能够恢复状态,以便可以重新运行测试或进一步测试可以执行。

3.1。故障注入

基于我们有方法上的FI FaultCheck所使用的工具,我们已经开发了在以前的工作1,12]。从本质上讲,这是通过增加探测变量在汽车模型控制器的固件和控制这些探针FaultCheck简化嵌入式C版本。例如,我们增加了探测的旅行距离和偏航变量描述的IMU和测程法更新部分2.2(算法3)。

(1) 无效pos_uwb_update_dr (浮动imu_yaw,浮动turn_rad,浮动速度){
(2) fi_inject_fault_float (“uwb_travel_dist &travel_dist);
(3) fi_inject_fault_float (“uwb_yaw &imu_yaw);
(4)
(5) }

这些探测器由我们控制嵌入式C FaultCheck库,使用命令从ScalaCheck发电机控制等算法4)。

(1) defgenFaultWheelSlip(状态:状态):创AddFault ={
(2) param⟵Gen.choose (10、50)
(3) 开始⟵Gen.choose (0, 100)
(4) 持续时间⟵Gen.choose (10)
(5) }收益率AddFault (“uwb_travel_dist”、“放大”,param.toDouble / 10.0,开始,持续时间)

产生一个AddFault命令。在这个例子中,我们生成一个轮子滑断层建模,可以由一个大于1的放大的旅行距离测量的测程法。添加错误,探针必须指定,断层的类型(BITFLIP、抵消、放大或SET_TO),开始迭代,迭代次数的错。与FaultCheck一样,多个故障可以添加到相同的探针(或变量)。我们的C版本FaultChec由不到400行代码,运行时开销较低,是没有外部库的要求写的。使用它,只有探针必须添加如上所示,和文本字符串控制故障必须提供。这些文本字符串可以很容易地由ScalaCheck并通过现有的通信接口发送到模型车。总之,这是一个简单的方法添加FI支持的固件与小侵入代码库。

除了上面所示的轮子滑断层,我们注入以下缺点:(我)测距反射,这意味着汽车上的超宽频模块之间的距离测量和锚没有视线,但反映。这个故障会出现,例如,当阻塞的方式。我们模型通过积极抵消故障注入测量距离。(2)偏航误差,这意味着偏航角用于节中描述的位置估计2.2有一个偏移量,可以造成的,例如外部对象干扰磁强计。这可以模仿一个积极或消极的偏移量添加到偏航角。

还有其他技术在嵌入式目标硬件注入故障,如扫描链实现FI (10)没有入侵的最后的固件。然而,他们需要额外的代码和硬件控制控制器的调试端口从ScalaCheck我们的汽车模型。使用这些技术也使得更难时间注射结合变量更新外部事件。因此,我们认为是小入侵源代码一个更好的选择在我们的例子中给出的简单和准确控制时间与外部事件。

3.2。轨迹生成

的一个至关重要的部分我们的测试用例生成是能够生成随机轨迹。在移动机器人轨迹生成是一个众所周知的问题,和解决问题是很常见的如找到停车位,同时避免障碍(21]或导航地图上的一个位置,同时调整轨迹障碍(22]。我们的情况与这些问题有一些相似之处,但是我们的问题制定不同:我们不是瞄准特定的最终位置或方向的汽车模型,我们需要生成随机轨迹由我们的模型可行驶的汽车保持在有效推动区域内。

我们生成的轨迹必须保持有效的外多边形内的地图没有穿过多边形内部,他们必须有一个的形状,我们的模型车可以按照其转向几何图形。我们的轨迹由点创建段长度在0.6到2.0米之间。连续两个部分之间的角度必须小于 ,因为这使得最让我们可以比我们的模型的最小转弯半径大的车。图7说明了我们如何产生有效的随机轨迹。(1)假设我们从一个有效的轨迹段开始,比如图中的轨迹0开始6。如果我们从车里,我们用相同的取向短段的车。(2)从之前的部分, 在图7长度,延长三行l;一个指向同一个方向段(B)行和两条线指向 双方(A和C行), 在我们的例子中。如果线的相交的多边形,截断他们在十字路口( )。(3)创建一个包含顶点水平矩形线a到C,通过简单的设置XY各自的最大和最小的坐标XY线顶点的坐标。如果这个矩形的对角线小于0.6米,我们假设我们被困在一个角落,开始从一开始轨迹图6(4)生成一个随机的XY协调内部的矩形,考虑形成的线段段的坐标和坐标 ;如果线段之间的0.6和2.0米长,它不与任何多边形相交,并一个角度小于 ;我们保持这段,继续下一步。否则,我们重复这个步骤直到我们生成一个有效的段或已达到的最大数量内尝试在这种情况下,我们重新开始与轨迹的一代。(5)(4)创建一个有效的点,如果我们将它添加到轨迹 和重新开始与步骤(1)现在扩展轨迹。重复步骤(1)(4),直到我们已经生成所需的数量的点或直到我们超过的最大数量尝试。

在我们的例子中,我们使用50内尝试产生一个点在每个部分的矩形和5000外尝试重新开始。这样我们可以成功地生成轨迹的30 - 40段大多数时候,很少有重试在正常情况下(< 2内尝试和< 3外尝试)。这变得越来越困难尽管在生成轨迹超过40分,因为它变得越来越有可能我们最终在一个角落里或靠墙,不得不重新开始。我们用一个解决这个问题通过生成较短的轨迹领先优势并连接它们。这意味着我们产生例如30分和只使用10分并添加到我们的轨迹,如之前的20。因此,我们保证有至少20点的轨迹,可以附加到我们目前的轨迹。然后我们重复这个对于每个扩展我们的轨迹,在扩展保证有可能进一步扩展。前利润的大小提出了之间的权衡计算负载和likelyhood最终在角落里。之前的大小20发现工作和试验和错误的结果。用这种方法,我们能够生成轨迹数以百万计的分长没有任何问题,即使在复杂的多边形。

这是我们使用的方法生成的轨迹RunSegmensScalaCheck命令上面描述;我们生成2 - 20分,保证存在一个轨迹至少20(保证金)之前点的轨迹段后间距0.6到2.0米。即使在最坏的情况下,我们有5000外重试,这一代花费不到50毫秒在一个常见的笔记本电脑意味着我们能做到实时处理挑战我。

我们的轨迹生成方法是不能保证成功,这意味着我们可能可以产生一个轨迹主要与距离太短到一个角落里,安全停车。来避免这种情况,我们在测试套件中,有一个方法来生成许多长测试区域内随机轨迹,我们使用我们每次创建一个新的测试区域。如果我们能够生成长的轨迹,例如,100公里,没有超过一半的最大数量外尝试我们考虑安全使用给定的测试区域,应对挑战三世。图8显示了一个示例的14公里长驾驶区域内生成的轨迹图6。我们停在14公里的图呈现轨迹在一代是资源密集型的,而不是只做测试的必要条件。观察,给了我们更多的信心在我们的轨迹生成方法是唯一有问题的测试领域,我们发现到目前为止有一个狭窄的路径超过保证金通向一个角落空间扭转汽车太少,明显是看测试区域。即使这些地区可以处理通过增加保证金的计算能力。

3.3。返回轨迹生成

最初,或者完成先前的实验后,模型车是位于一个随机位置随机取向。尽量减少需要手动调整和移动模型车在执行测试,我们设计了一个方法来自动生成的回程路线。目标是连接起点和方向(point-orientation)和一个目标point-orientation来自复苏路线的开始而坚持相同的约束轨迹代test-trajectory一代,即。,轨道离不开测试区域,轨迹不得进入截止区,而且必须汽车模型遵循的轨道车辆动力学。这一节所示的方法解决了挑战二部分1

我们的回程路线生成的方法是基于以下见解或启发式:(1)如果无约束的障碍,一个有效的方法来定位和重新定位一辆车是把在一个弧,使用最大转向角,向新位置而使房间变弧还需要建立正确的方向在目标位置。图9说明了这种方法来重新定位模型车。(2)从部分3.2,我们已经有一个随机轨迹的生成方法,可以达到测试区域内大部分位置。如果它是不可能重新定位汽车使用(1),一个短的随机轨迹可以扩展从当前位置让我们在一个新的位置再试一次。这个过程(1)和(2)的最大数量的迭代之前尝试放弃从原始point-orientation和重新启动。找到一个有效的轨迹后,我们重新开始这个过程,直到我们找到一个新的有效的返回轨道,让它比以前短。然后重复为了增加100倍的概率生成一个短的返回轨道。(3)从多个重复的失败(1)和(2),我们有可能,但不能保证,有路线与目标point-orientation point-orientation开始连接。鉴于该方法的随机性质,但是我们是不可能获得最短的路线(甚至短路线以任何标准)。我们提高运用轨迹缩短传递给生成的轨迹。通过下面更详细地解释,但是,从本质上讲,它试图找到有效的脑袋和尾巴之间快捷键子列表生成的轨迹。虽然这种方法仍无法保证路线是最优的,在实践中我们看到,结果是一个进步。作为一个例子,图10显示生成轨迹,我们的方法没有优化,和图11显示了相同的轨迹优化后通过。在这种情况下,轨迹是缩短从104.4米到84.9米。

更深度的方法,连接两个任意point-orientations弧线和直线执行如下:第一个、扩展弧组成的短的线段,左转,向右一开始和目标位置。第二个开始时,尝试连接初始subarcs和目标位置由一个给定的约束,它必须有一个有效的转向角。如果可以连接启动和目标位置和由此产生的轨迹是有效的过程成功结束;否则,未能找到一个直接报告路线。

作为节3.2步骤(2)解释说,我们现在继续看(3)的细节,缩短轨迹。我们的方法预计轨迹作为输入,并试图缩短它,同时保持了开始和结束位置和方向完整,以及尊重之间的最大转向角的约束连续段和不相交的多边形。缩短过程遍历每个点的轨迹切割头与尾部分。头部分的轨迹与弧左转和右扩展。然后遍历这些添加的弧线,在每一个点,试图形成一个轨迹满足尾矿子列表的尾部轨迹。如果上面的步骤导致更短的轨迹,再次运行程序有了这个新的短轨迹作为输入。当没有得到进一步缩短,流程完成。

3.4。时间的考虑

时生成的测试模型车开车,车的一代必须足够快结束没有达到之前的轨迹生成下一个部分。

未来轨迹的生成部分然后汽车不到时触发n段离开当前的轨迹。在最坏的情况下,这些片段的最小长度 ,节中描述3.2。在这种情况下,最长时间可用来生成轨迹的下一部分 可以计算为 在哪里年代汽车的速度在米每秒, 是网络延迟秒。例如,一个最大的速度 ,最大的网络延迟 , 给了 生成下一个部分的轨迹。注意,参数n如果需要可以适应。

4所示。结果

我们评估性能的超宽频定位系统中描述的部分2.2使用我们的测试设置通过将我们的模型车连同两个超宽频锚在停车场,如图12。我们开始通过手动开车沿着边缘的停车场,在地图上画一个跟踪来帮助将封闭多边形。没有图样在这个测试。然后我们试图生成100公里区域内的轨迹,它成功了,没有问题。接下来,我们使用我们的模型车在边境模拟模式,如部分所述2.1,运行几个实验来进一步确保测试是安全的运行。

接下来,我们尝试设置没有FI 10的实验,以确保达到大部分地区和系统工程名义上没有缺点。图13从这个实验展示了痕迹。超宽频位置和RTK-SN位置之间的差异低于0.6米为整个实验。同样清楚的是,所有痕迹的实验是重叠的初开始路线(路线0),表明部分中描述的回归函数3.3有效地恢复系统状态。

然后我们用FI使在同一地区进行了一项实验,结果如图所示14。图显示了运行相同的重叠的痕迹实验三次使用恢复功能描述部分3.3。图15显示了超宽频的最大区别,并为每个RunSegment RTK-SN位置命令相同的三个重播实验,以及各个实验的区别。实验包括以下命令(算法5)。

(1) RunSegment (…)
(2) RunSegment (…)
(3) AddFault (uwb_travel_dist,放大,2.5,46岁,6)/ /车轮滑移
(4) RunSegment (…)
(5) AddFault (uwb_range_234放大,2.0,53岁,4)/ /超宽频反射
(6) RunSegment (…)
(7) AddFault (uwb_travel_dist放大,2.2,44岁,6)/ /车轮滑移
(8) AddFault (uwb_yaw抵消,-18.0,0,2)/ /偏航误差
(9) AddFault (uwb_range_50放大,4.0,14日,8)/ /超宽频反射
(10) AddFault (6) uwb_range_234、放大,2.0,21日/ /超宽频反射
(11) RunSegment (…)

注意,每个AddFault命令有一个注释后,描述故障所代表的含义。还要注意,每个AddFault命令有一个持续时间足够短只影响第一RunSegment命令(例如,后车轮滑转故障在3号线仅影响RunSegment命令行4)。

我们可以看到,第一个轮子滑断层带偏差高达0.7米,第一反映断层有相同的影响。后者一起故障注入了位置的偏差估计约1.5米,这使的后置条件RunSegment命令失败导致一个失败的测试用例。我们得到了一致的结果小于0.1 m运行之间的区别(除了0.2年底的一个例外一个运行),表明这种特殊组合的缺点有一个可重复的影响,我们在实验具有良好的重复性。错误处理机制来处理反射,部分中提到2.2是截断的最大距离超宽频锚允许修正至0.2。我们可以重复相同的实验不同的值的截断参数,发现更大的价值观更好地补偿车轮滑移,但影响更多的反思和较小的值了相反的效果。注意,可以实现更复杂的故障处理机制和评估使用相同的实验设置,但这超出了本文的范围。

然后我们重新进行同样的实验没有FI启用三次,如图1617。这次超宽频偏差低于0.55米为整个实验,结果是可重复的和实验之间的差异小于0.1米。通过观察超宽频的绿色痕迹的位置,它可以指出,它们几乎完全重叠,与同样的偏差一直在重复这个实验。这表明系统的性质,如错误的偏差是锚的位置,不正确的几何节中描述的假设2.2,direction-dependent抵消可能由于超宽频天线增益方向,如我们之前所述的工作(18]。

接下来,我们建立了另一个实验在一个不同的停车场,与一块石头挡住了视线,一个超宽频锚的轨迹。没有FI我们重复这一实验失败了三次,结果如图1819。可以看到,234块岩石锚段的轨迹,在超宽频的位置获得一个偏移量从岩石由于时间造成的测量距离反映建筑物墙上。的三个重播实验一致的结果,只有不到0.15重播的区别,即使总偏差约为2米。重复同样的实验能力几乎相同的结果是一个伟大的帮助确定墙反射造成的偏差是由于岩石挡住了视线。

方法来处理这种类型的问题是改变锚定位置,添加更多的主持人,和/或改善软件的故障处理机制。

5。结论

我们已经提出了一个新颖的方法来自动测试实时硬件与技术PBT和FI。任务的实时特性带来了挑战,如时间、安全、和可重复性。在应对这些挑战的过程中,我们已经开发出一种新方法生成安全的可行驶的随机轨迹尊重汽车的几何以及可用的地图上的区域。我们也利用这个轨迹发生器与一个自定义轨迹缩短的方法生成一个可行驶的轨迹从任意位置定义的起始位置和走向不断重置我们SUT的状态。随机轨迹发生器还提供了一个保证为每个生成的一部分,它可以生成一个额外的轨迹与指定长度后,在测试中对安全至关重要。进一步,我们结合故障注入测试设置,使其适合测试功能和非功能需求。

对于这个测试设置,我们开发和测试一个低成本UWB-based定位系统为我们的自动驾驶汽车模型。我们测试了这个系统在现有RTK-SN定位系统的模型车,发现几个有趣的随机生成测试用例有和没有注射错误导致失败(位置之间的偏差超过1 m基于超宽频和RTK-SN)。通过重演多次测试用例和对比结果,我们能够确定故障原因和提出改进建议来处理它们。

我们所知,这是一个新颖的方法来自动生成测试复杂的实时系统,对安全、时间、和重复性进行了实验。我们的工作可以用作基础广泛用于测试各种各样的实时系统,例如,测试跟踪处理公路车辆,或在测试各种情况下的移动机器人。

数据可用性

原始数据用于生成相关的情节和额外的数据实验提出了可以找到https://github.com/vedderb/rise_sdvp/tree/master/Misc/Test%20Data/Automated_testing_2019。所有的软件可以从github开源应用程序使用https://github.com/vedderb/rise_sdvp以及超宽频锚的自由和开放的硬件设计。

的利益冲突

作者宣称没有利益冲突有关的出版。

确认

本研究通过EISIGS资助(知识基金会的拨款),通过FFI项目Chronos Vinnova步骤2,通过欧盟PRoPART项目(格兰特协议没有:776307)。

引用

  1. b•韦德尔j .酿造,m·琼森”使用模拟、故障注入和基于属性的测试评估的四轴飞行器防撞系统,”《IEEE国际会议上可靠的系统和网络研讨会(DSN-W),页104 - 111,里约热内卢,巴西,2015年6月。视图:出版商的网站|谷歌学术搜索
  2. A . Soltani和f . Assadian”半实物设施综合车辆动力学控制系统设计和验证,”IFAC-PapersOnLine卷,49号21日32-38,2016页。视图:出版商的网站|谷歌学术搜索
  3. a . Mouzakitis d·库普r·帕克和k·伯纳姆,“半汽车ecu测试诊断系统软件,”测量和控制,42卷,不。8,238 - 245年,2009页。视图:出版商的网站|谷歌学术搜索
  4. b•韦德尔j .酿造,m·琼森,“低成本模型和精确定位车辆实验自主驾驶,”机器人杂志卷,2018篇文章ID 4907536, 10页,2018。视图:出版商的网站|谷歌学术搜索
  5. r·尼尔森ScalaCheck:明确的指南Artima Inc .,核桃溪市、钙、美国,2014年。
  6. j .井架n . Walkinshaw t .艺术et al .,“基于属性的测试项目,抗议”正式的组件和对象的方法。在计算机科学的课堂讲稿f·布尔,m . Bonsangue s Hallerstede和m . Leuschel, Eds。卷,6286年,页250 - 271,施普林格,柏林,德国,2010年。视图:出版商的网站|谷歌学术搜索
  7. r·k·艾耶“实验评估,”二十五日学报》国际会议上容错计算、爵士。联邦贸易委员会95年,页115 - 132,IEEE计算机协会,帕萨迪纳市,美国,1995年6月。视图:谷歌学术搜索
  8. e .简,j . Arlat m . Rimen j .欧胜和j . Karlsson“故障注入硬件描述语言(VHDL)模型:MEFISTO工具,”第二十四届国际研讨会容错计算的程序奥斯汀,页66 - 75年,TX,美国,1994年6月。视图:出版商的网站|谷歌学术搜索
  9. l . j .酿造Bromander、p . Raistrick和h .联盟“SCADE FISCADE-a故障注入工具模型,”《汽车电子工程技术研究所的会议英国华威,页1 - 9,2007年6月。视图:谷歌学术搜索
  10. p . Folkesson s Svensson, j . Karlsson”基于仿真的比较和扫描链实现故障注入,”《28日年度国际研讨会容错计算,页284 - 293,德国慕尼黑,1998年6月。视图:出版商的网站|谷歌学术搜索
  11. j . Aidemark j .酿造、p . Folkesson和j . Karlsson“GOOFI:通用的面向对象的故障注入工具”DSN学报》国际会议上可靠的系统和网络瑞典,页83 - 88,Goteborg, 2001年7月。视图:出版商的网站|谷歌学术搜索
  12. b•韦德尔t .艺术,j .酿造和m·琼森“错误注射结合基于属性的测试,”学报》国际Cyber-Physical车间工程模拟系统,爵士。ES4CPS的14ACM,页1 - 8,德累斯顿,德国,2014年3月。视图:出版商的网站|谷歌学术搜索
  13. j . Cordes j . Mossinger•格罗特(george w . bush)和a . Lapp Autosar标准的应用程序接口,“ATZautotechnology,9卷,不。2、使,2009页。视图:出版商的网站|谷歌学术搜索
  14. m . Skoglund t . Petig Vedder说,h·埃里克森和e·m·席勒“静态和动态RTK GPS接收器,绩效评估的低成本”《IEEE智能车辆研讨会(IV),16 - 19页,哥德堡,瑞典,2016年6月。视图:出版商的网站|谷歌学术搜索
  15. m . Haklay和p·韦伯OpenStreetMap:用户生成的街道地图”,IEEE普适计算,7卷,不。4、12 - 18,2008页。视图:出版商的网站|谷歌学术搜索
  16. 竹内h .太:雅佳,大肠,加藤,和m . Edahiro“纯粹追求再现:实地测试的自动车辆在城市地区,”学报IEEE 4日Cyber-Physical国际会议系统、网络和应用程序(CPSNA)研讨会论文集光碟,名古屋,日本,2016年10月。视图:出版商的网站|谷歌学术搜索
  17. Decawave,内部DWM1000 IEEE 802.15.4超宽频收发器模块,提供服务DWM1000数据表Decawave,爱尔兰都柏林,2016。
  18. b•韦德尔j .酿造,m·琼森,“准确定位改善安全的自行车,”IEEE国际会议消费电子学报》(ICCE),页1 - 6、拉斯维加斯、NV,美国,2018年1月。视图:出版商的网站|谷歌学术搜索
  19. p·奥尔森,”测试和验证自适应巡航控制系统和碰撞预警与制动支持通过使用仿真模拟,”SAE技术学报》论文系列美国底特律,MI, 2008年4月,SAE国际。视图:出版商的网站|谷歌学术搜索
  20. 大肠Bagalini和m . Violante”,开发自动化测试系统的ECU软件验证:一个工业的经验,”第15届双年展波罗的海电子研讨会论文集(BEC)爱沙尼亚塔林,页103 - 106,,2016年10月。视图:出版商的网站|谷歌学术搜索
  21. j . Yoon和c, d .起重机路径规划对城市停车场的无人地面车辆,”控制,自动化学报》第11届国际会议上和系统京畿道,页887 - 892年,韩国,2011年10月。视图:谷歌学术搜索
  22. m . s . m . Hashim T.-F。陆”,关键时刻的轨迹规划的轮式机器人在未知的环境中,”《IEEE业务工程和工业应用讨论会(BEIAC)兰卡威,页836 - 841年,马来西亚,2013年4月。视图:出版商的网站|谷歌学术搜索

版权©2020年本杰明韦德尔et al。这是一个开放的分布式下文章知识共享归属许可,它允许无限制的使用、分配和复制在任何媒介,提供最初的工作是正确引用。


更多相关文章

PDF 下载引用 引用
下载其他格式更多的
订单打印副本订单
的观点1022年
下载983年
引用

相关文章

文章奖:2020年杰出的研究贡献,选择由我们的首席编辑。获奖的文章阅读