郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!
开源项目代码:https://github.com/Microsoft/AirSim
Abstract
在现实世界中为自动驾驶飞行器开发和测试算法是一个昂贵且耗时的过程。同样,为了利用机器智能和深度学习的最新进展,我们需要在各种条件和环境下收集大量带注释的训练数据。我们提供了一个基于Unreal引擎的新仿真器,它为这两个目标提供了物理和视觉逼真的仿真。我们的仿真器包括一个物理引擎,该引擎可以在高频下运行,以支持流行的协议(例如MavLink)进行实时硬件在环(HITL)仿真。该仿真器是从头开始设计的,可扩展以适应新型飞行器,硬件平台和软件协议。此外,模块化设计使各种组件可以轻松地在其他项目中独立使用。我们首先通过将四旋翼飞机实现为自动驾驶飞行器,然后通过实验将软件组件与实际飞行进行比较,来演示仿真器。
1 Introduction
最近,诸如RL[12],示范学习[2]和迁移学习[25]之类的范例被证明是训练各种机器人系统的自然手段。这些技术的主要挑战之一是样本复杂性高——学习有用行为所需的训练数据量通常过高。在训练阶段,自动驾驶飞行器通常不安全且操作昂贵,这一事实进一步加剧了这一问题。为了在现实世界中无缝运行,机器人需要迁移其在仿真中所做的学习。当前,这是一项艰巨的任务,因为感知仿真,环境和执行器通常过于简单,并且缺乏现实世界的丰富性或多样性。例如,对于旨在在室外环境中使用计算机视觉的机器人,建模现实世界中的复杂对象(例如树木,道路,湖泊,电线杆和房屋)以及包括更精细的细节(例如柔和阴影,镜面反射,漫反射等)的渲染可能很重要。同样,开发更准确的系统动态模型也很重要,这样仿真行为才能紧密仿真现实世界。
AirSim是一个开放源代码平台[21],旨在缩小仿真与现实之间的差距,以帮助开发自动驾驶飞行器。该平台旨在积极影响数据驱动的机器智能技术(例如RL和深度学习)的开发和测试。它的灵感来自先前的几个仿真器(请参阅相关工作),我们的主要目标之一是建立一个社区,以将最先进的技术推向这一目标。
2 Related Work
尽管对当前使用的仿真器进行详尽的调研超出了本文的范围,但我们提到了一些与我们的研究背景最接近并且对这项工作产生了深远影响的近期著作。
Gazebo [13]一直是研究工作中最受欢迎的仿真平台之一。它具有模块化设计,允许使用不同的物理引擎,传感器模型并创建3D世界。Gazebo超越了整体式刚体飞行器的限制,可用于仿真具有链接和关节架构的更通用的机器人,例如复杂的机械手或两足机器人。虽然Gazebo具有相当丰富的功能,但很难创建更接近真实世界的大规模,复杂且视觉丰富的环境,并且它落后于由Unreal引擎或Unity等平台进行的渲染技术的各种进步。
其他值得注意的工作包括Hector [17],其主要致力于与流行的中间件ROS和Gazebo的紧密集成。它提供风洞调整的飞行动态,传感器模型包括使用高斯马尔可夫过程的偏差漂移和使用Orocos工具链的在环软件。但是,Hector缺乏对流行的硬件平台(如Pixhawk)和协议(如MavLink)的支持。由于它对ROS和Gazebo的高度依赖,因此受到如前所述的丰富仿真环境的限制。
类似地,RotorS [7]提供了一个模块化框架来设计微型飞行器,并构建可在仿真器中测试的用于控制和状态估计的算法。可以使用Pixhawk为HITL设置RotorS。RotorS还使用Gazebo作为其平台,因此限制了其与感知相关的功能。
最后,jMavSim [1]是易于使用的仿真器,旨在测试PX4固件和设备。因此,它与PX4仿真API紧密结合,使用更简单的传感器模型,并且使用简单的渲染引擎,而环境中没有任何对象。
除此之外,还有许多游戏,例如仿真器和训练应用程序,但是,这些游戏大多是商业性的开源软件,很少或没有关于模型,仿真准确性或用于自主应用程序的开发API的公共信息。
3 Architecture
我们的仿真器遵循模块化设计,着重于可扩展性。核心组件包括环境模型,飞行器模型,物理引擎,传感器模型,渲染接口,公共API层以及用于飞行器固件的接口层,如图2所示。
自主飞行器的典型设置包括飞行控制器固件,例如PX4 [16],ROSFlight [10],Hackflight [15]等。飞行控制器将所需状态和传感器数据作为输入,计算当前状态的估计值,并输出执行器控制信号以达到所需状态。例如,在四旋翼飞机的情况下,用户可以将所需的俯仰角,侧倾角和偏航角指定为所需状态,并且飞行控制器可以使用来自加速度计和陀螺仪的传感器数据来估算当前角度,并最终计算出电动机信号以达到所需角度。
在仿真过程中,仿真器会将来自仿真世界的传感器数据提供给飞行控制器。飞行控制器输出执行器信号,该执行器信号被仿真器的飞行器模型组件作为输入。飞行器模型的目标是计算由仿真执行器产生的力和扭矩。例如,对于四旋翼飞机,在给定电机电压的情况下,我们计算螺旋桨产生的推力和扭矩。另外,可能会由于阻力,摩擦和重力而产生力。然后,这些力和扭矩由物理引擎作为输入,以计算仿真世界中下一个运动体的运动状态。机体的运动状态以及重力,空气密度,气压,磁场和地理位置(GPS坐标)的环境模型为仿真传感器模型提供了真实性。
输入到飞行控制器的期望状态可以由人类操作员使用远程控制来设置,或者可以由配套计算机自主设置。配套计算机可能执行昂贵的高级计算,例如确定下一个所需的航路点,执行同时定位和地图绘制(simultaneous localization and mapping, SLAM),计算所需轨迹等。配套计算机可能必须处理由传感器(例如,摄像头和激光雷达)生成的大量数据,这反过来又需要仿真环境具有合理的细节。这是我们利用Unreal引擎[11]等平台实现的渲染技术的最新进展所面临的挑战之一。此外,我们还利用Unreal引擎中的基础流水线来检测冲突。配套计算机通过一组API与仿真器进行交互,该API使其可以观察传感器流,飞行器状态并发送命令。这些API的设计使其可以屏蔽配套计算机,使其免受在仿真环境或真实环境下运行的困扰。这一点特别重要,因此无需更改即可在仿真器中开发和测试算法并将其部署到实际飞行器中。
AirSim代码库是作为Unreal引擎的插件实现的,可以插入任何Unreal项目中。Unreal引擎平台提供了一个精心制作的商城,其中包含数百个预制的详细环境,其中许多环境是使用摄影测量技术[18]创建的,以生成真实可信的真实场景重建。
接下来,我们提供有关仿真器各个组件的更多详细信息。
3.1 Vehicle Model
AirSim提供了一个界面,将飞行器定义为刚体,可以具有任意数量的产生力和扭矩的执行器。飞行器模型包括参数,例如质量,惯性,线性和角阻力系数,摩擦系数和恢复系数,物理引擎使用这些参数来计算刚体动力学。
形式上,飞行器定义为放置在位置{r1, ... , rk}和法线{n1, ... , nk}上的K个顶点集,每一个都经历一个无单位的飞行器专用缩放器控制输入{u1, ... , uk}。假定这些顶点的力和扭矩是沿其法线方向生成的。但是请注意,在仿真过程中,位置和法线都可以更改。
图3显示了如何将四旋翼描绘为四个顶点的集合。控制输入ui驱动位于四个顶点的螺旋桨的转速。我们使用[4]计算螺旋桨产生的力和扭矩:
其中CT和Cpow分别是推力和功率系数,并且这基于螺旋桨的物理特性,ρ是空气密度,D是螺旋桨的直径,wmax是每分钟转数的最大角速度。通过在飞行过程中允许这些顶点移动,可以仿真具有垂直起飞和着陆(VTOL)功能以及其他在飞行中更改其配置的最新四旋翼飞行器。
飞行器模型抽象界面还提供了一种在飞行器身框架中指定横截面积的方法,而物理引擎又可以使用该方法来计算飞行器身上的线性和角度阻力。
3.2 Environment
飞行器暴露于各种物理现象,包括重力,空气密度,气压和磁场。尽管可以为这些现象生成非常昂贵的计算模型,但我们将注意力集中在足够精确的模型上,以允许使用硬件在环进行实时操作。我们在下面描述环境的这些单独组成部分。
3.2.1 Gravity
尽管许多模型使用常数来模拟重力,但它以复杂的方式变化,如GRACE [23]等模型所证明的。 对于大多数地面或低海拔车辆而言,这些变化可能并不重要。 但是,合并一个更准确的模型是相当便宜的。 形式上,我们通过应用牛顿引力定律的二项式定理并忽略较高的幂来近似估计高度h处的重力加速度g:
其中Re是地球半径,g0是在地表测得的重力常数。
3.2.2 Magnetic Field
对复杂物体(例如地球)的磁场进行精确建模是一项计算量巨大的任务。 美国国家海洋与大气管理局(NOAA)的世界磁场模型(WMM)模型[6]是地球上最著名的磁场模型之一。 不幸的是,对于实时应用程序而言,最新的WMM2015模型相当复杂且计算量很大。
我们实现了倾斜偶极子模型,在该模型中我们假设地球是一个完美的偶极子球[14,pp 27-30]。 这忽略了除一阶项以外的所有项,以使用球形几何体得出磁场估计。 该模型使我们能够模拟在空间以及通常存在问题的区域(例如极性区域)中移动时磁场的变化。 给定地理纬度q,经度f和高度h(从地球表面开始),我们首先使用以下公式计算磁共纬度qm:
其中q0和f0表示真实磁北极的纬度和经度。然后,总磁强度jBj计算为:
3.2.3 Air Pressure and Density
3.3 Physics Engine
3.3.1 Linear and Angular drag
3.3.2 Accelerations
3.3.3 Integration
3.3.4 Collisions
3.4 Sensors
3.4.1 Barometer
3.4.2 Gyroscope and Accelerometer
3.4.3 Magnetometer
3.4.4 Global Positioning System (GPS)
3.5 Visual Rendering
由于高级渲染和详细环境一直是AirSim的关键要求,因此我们选择了Unreal引擎 4 (UE4) [11]作为我们的渲染平台。UE4提供了许多使其成为有吸引力的选择的功能,包括将其作为开放源代码,并且可在Linux,Windows和OSX上使用。UE4带来了一些最先进的图形功能,例如基于物理的材料,光度学灯光,平面反射,光线跟踪的距离场阴影,照亮的半透明等。图1显示了AirSim的屏幕截图,其中突出显示了逼真的渲染功能。此外,Unreal的大型在线商城具有各种预制的精心制作的环境,其中许多都是使用摄影测量技术创建的。
4 Experiments
我们进行实验主要是为了评估在现实世界中飞行的四旋翼飞行器的飞行特性与在AirSim中仿真同一飞行器的飞行特性的接近程度,并且还针对真实世界的传感器评估了一些传感器模型。
Hardware Platform: 实际飞行是通过安装在Flamewheel四旋翼飞行器上的Pixhawk v2飞行控制器以及运行Ubuntu 16.04的技嘉5500 Brix进行的。传感器的测量结果记录在Pixhawk设备本身上。我们使用测得的物理参数在AirSim中配置了仿真四旋翼,并使用传感器数据表配置了仿真传感器模型。AirSim MavLinkTest应用程序用于对现实世界和仿真飞行执行可重复的舷外控制。
Trajectory Evaluation: 我们在仿真器中以两种不同的模式来飞行四旋翼飞行器:(1) 方形轨迹,每边长5m。(2) 圆形轨迹,半径为10m长。然后,我们使用完全相同的命令来驾驶真实飞行器。对于仿真飞行和实际飞行,我们都会在本地NED坐标中收集飞行器的位置以及时间戳。
图4(c)和4(d)显示了仿真飞行和实际飞行中位置的时间序列。在此,水平轴表示时间,垂直轴表示在X和Y方向上的偏移。我们还计算了真实轨迹与仿真轨迹之间的对称Hausdorff距离,发现仿真和真实轨迹在圆上(仿真和真实轨迹之间的Hausdorff距离为1.47 m)和正方形上(仿真和真实世界之间的Hausdorff距离为0.65 m)都非常接近。
我们还分别针对图4(a)和4(b)中的圆形和正方形模式,提供了该实验的视觉比较。仿真轨迹以紫色线显示,而真实轨迹以红色线显示。我们可以观察到,由现实世界和仿真飞行器跟踪的轨迹在定性上是接近的。微小的差异可能是由各种因素引起的,例如积分误差,飞行器模型近似值和轻微的随机风。
Sensor Models: 除了评估整个仿真流程外,我们还研究了单个组件模型,即气压计(MEAS MS561101BA),磁力计(Honeywell HMC5883)和IMU (InvenSense MPU 6000)。请注意,目前仿真的GPS模型过于简单,因此,我们仅关注三个更复杂的传感器模型。对于上述每个传感器,我们使用制造商指定的数据表来设置传感器模型中的参数。
- IMU: 当飞行器静止且正在飞行时,我们测量了来自加速度计和陀螺仪的读数。我们观察到,当飞行器静止时特性相似(陀螺仪:仿真方差2.47e-7 rad2/s2,真实世界方差6.71e-7 rad2/s2,加速度:仿真方差1.78e-4 m2/s4,真实世界方差1.93e-4 m2/s4),观察到的飞行中的方差比仿真的高得多(加速度:仿真1.75e-3 m2/s4 vs. 真实世界9.46 m2/s4)。在现实世界中,当电机运行时,机身可能会发生振动,而AirSim中尚未仿真这种现象。
- Barometer: 我们定期将传感器提升到两个固定的高度之间:地平面,然后升高到178 cm(在仿真和现实世界中均如此)。图5(a)显示了这两种测量(绿色是仿真的,蓝色是真实的),并且我们观察到信号具有相似的特性。请注意,仿真压力与实际压力之间的偏移是由于实际压力与仿真压力之间的绝对压力不同而引起的。由于温度升高,中间部分也有少量增加,这是无法仿真的。总体而言,仿真传感器的特性与真实传感器非常匹配。
- Magnetometer: 我们将飞行器放在地面上,然后将其旋转90度四次。图5(b)显示了真实世界和仿真测量结果,并强调了它们的特性非常相似。
5 Conclusion and Future Work
AirSim提供了高保真的物理和视觉仿真,可以廉价地生成大量训练数据,以构建机器学习模型。AirSim API设计允许针对仿真器开发算法,然后在不更改实际飞行器的情况下进行部署。AirSim的核心组件(包括物理引擎,飞行器模型,环境模型和传感器模型)被设计为可独立使用,并且在AirSim之外的依赖最少,并且易于扩展。AirSim的目标是为可在现实世界中运行的自主智能体开发RL算法。
在实时仿真中仿真现实世界是一项艰巨的任务。有许多可以改进的地方。当前,我们无法仿真更丰富的碰撞响应或高级地面交互模型,而将来可能会通过为NVIDIA PhysX实现我们的物理引擎接口并利用诸如物理子步骤等功能来实现。此外,除了Unreal引擎中直接可用的传感器以外,我们不会在相机传感器中仿真各种反常。我们计划将来增加高级噪声模型和镜头模型。由于障碍物造成的GPS信号衰减尚未得到仿真,我们计划使用射线追踪方法添加。我们还计划为固定翼飞机增加更高级的风效应和热仿真。我们的可扩展性API在设计时考虑了以上的未来工作,还可以用于实现其他类型的飞行器。