自动驾驶的仿真的论文可以参考英伟达的[End to End Learning for Self-Driving Cars](End to End Learning for Self-Driving Cars),主要的目的是通过软件来模拟车以及车所在的环境,实现自动驾驶的集成测试,训练模型,模拟事发现场等功能。那么我们是如何模拟车所在的环境的呢?
要模拟车所在的环境,就得把真实世界投影到虚拟世界,并且需要构造真实世界的物理规律。例如需要模拟真实世界的房子,车,树木,道路,红绿灯,不仅需要大小一致,还需要能够模拟真实世界的物理规律,比如树和云层会遮挡住阳光,房子或者障碍物会阻挡你的前进,车启动和停止的时候会有加减速曲线。
总之,这个虚拟世界得满足真实世界的物理规律才足够真实,模拟才足够好。而这些场景恰恰和游戏很像,游戏就是模拟真实世界,并且展示出来,游戏做的越好,模拟的也就越真实。实现这一切的就是游戏引擎,通过游戏引擎模拟自然界的各种物理规律,可以让游戏世界和真实世界差不多。这也是越来越多的人沉迷游戏的原因,因为有的时候根本分不清是真实世界还是游戏世界。
现在我们找到了一条捷径,用游戏来模拟自动驾驶,这看起来是一条可行的路,我们把自动驾驶中的场景复制到游戏世界,然后模拟自动驾驶中各种传感器采集游戏世界中的数据,看起来我们就像是在真实世界中开着自动驾驶汽车在测试了。
我们已经知道可以用游戏来模拟自动驾驶,而现在大家也都是这么做的,目前主流的仿真软件都是根据游戏引擎来开发,下面是主要的几个仿真软件:
那么仿真软件是如何工作的呢?大部分的仿真软件分为2部分:server端和client端。
可以认为server就是游戏机,而client则是游戏手柄,根据游戏中的情况,选择适当的控制方式,直到游戏通关。
我们知道游戏引擎模拟了传感器的数据,那么游戏引擎是如何实现模拟真实世界中的传感器数据的呢?
除了传感器数据,还需要模拟真实世界的物理规律:
如果是单独实现或者测试一个算法,直接拿写好的算法在仿真软件上进行测试就可以了,但是如果是需要测试已经开发好的软件,比如apollo和autoware系统,则需要实现仿真软件和自动驾驶系统的对接。一个简单的想法就是增加一个桥接器,就像手机充电器的转换头一样,通过桥接器来连接仿真软件和自动驾驶系统。目前carla和lgsvl都实现了通过桥接器和自动驾驶系统的对接,可以直接通过仿真软件来测试自动驾驶系统。
目前carla和lgsvl都是单独把apollo和autoware拉了一个分支,然后在其中集成一个适配器(ROS桥接),来实现仿真软件和自动驾驶系统的对接。当然apollo3.5切换到cyber框架之后,可以通过cyber桥接来实现。
仿真中另外一个问题经常遇到的问题就是制作地图,以上的仿真软件都提供了地图编辑器来构建自己想要测试的地图。目前地图格式主要采用的是OpenDrive格式的地图,如果是和Apollo集成的化,需要把OpenDrive格式的地图转换为Apollo中能够使用的地图格式。现在的主要问题是地图编辑器不是那么好用,大部分好用的地图编辑软件都需要收费。
根据我们的测试需求,我们可以构建以下几种测试场景:
我们需要仿真软件能够适应不同的测试场景,就必须要求仿真软件能够提供灵活和多样化的功能,我们要提供哪些功能呢?
[虚幻引擎游戏列表](https://zh.wikipedia.org/wiki/虚幻引擎游戏列表)
[Unity3D](Unity3D_百度百科)
[Udacity](udacity/self-driving-car-sim)
[Carla](carla-simulator/carla)
[AirSim](microsoft/AirSim)
[lgsvl](lgsvl/simulator)
[Apollo](ApolloAuto/apollo)
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved