为什么需要仿真
想象一下,当您发现一种新算法,但还不知道它是否有效时。你会直接去自动驾驶汽车,更新软件并进行测试吗?这样做可能不安全,您必须测试所有场景以确保它足够好,这可能需要很多时间。模拟的好处是显而易见的。它可以在没有真实环境和硬件的情况下通过软件模拟发现和重现问题,可以大大节省成本和时间。随着现在深度学习的兴起,仿真在自动驾驶领域有了新的作用。自动驾驶平台通过仿真采集数据,可以大大增加训练时间,远超路测时间,加快模型迭代速度。先用集群训练模型,然后在实际路试中进行测试,采用数据驱动的方式进行自动驾驶研究。
关于模拟自动驾驶的论文可以参考英伟达的【End to End Learning for Self-Driving Cars】(End to End Learning for Self-Driving Cars),主要目的是模拟汽车和所处的环境汽车通过软件定位,实现自动驾驶、训练模型、模拟事故场景的集成测试。那么我们如何模拟汽车所处的环境呢?
如何模拟
要模拟汽车所在的环境真正的自动驾驶,必须将现实世界投射到虚拟世界中,并构建现实世界的物理规律。例如,您需要模拟现实世界的房屋、汽车、树木、道路和红绿灯,不仅大小相同,而且还要模拟现实世界的物理规律。例如,树木和云层会阻挡阳光,房屋或障碍物会阻挡你的前进。汽车起停时会有加减速曲线。
简而言之,这个虚拟世界必须符合现实世界的物理规律,才能足够逼真,模拟要足够好。而这些场景与游戏非常相似。游戏是模拟现实世界并展示它。游戏越好,模拟就越逼真。实现这一切的是游戏引擎。游戏引擎模拟各种自然的物理规律,使游戏世界可以与现实世界相近。这也是越来越多人沉迷于游戏的原因,因为有时候分不清现实世界和游戏世界。
现在我们找到了捷径,用游戏来模拟自动驾驶,这似乎是一种可行的方式真正的自动驾驶,我们将自动驾驶中的场景复制到游戏世界中,然后模拟自动驾驶中的各种传感器来收集游戏世界数据,看起来我们正在现实世界中测试一辆自动驾驶汽车。
模拟软件
我们已经知道可以用游戏来模拟自动驾驶,现在每个人都这样做了。目前主流的模拟软件都是基于游戏引擎开发的。以下是主要的仿真软件:
它是如何工作的
那么仿真软件是如何工作的呢?大部分仿真软件分为服务器端和客户端两部分。
可以认为服务器是游戏机,客户端是游戏手柄。根据游戏中的情况,选择合适的控制方式,直到游戏通关为止。
它是如何工作的
我们知道游戏引擎模拟传感器数据,那么游戏引擎如何模拟现实世界中的传感器数据?
除了传感器数据,还需要模拟现实世界的物理规律:
桥
如果单独实现或者测试一个算法,可以直接在仿真软件上测试写好的算法,但是如果需要测试开发的软件,比如apollo和autoware系统,就需要实现仿真软件接口自动驾驶系统。一个简单的想法是添加一个桥接器,例如手机充电器适配器,以连接模拟软件和自动驾驶系统。目前carla和lgsvl都已经实现了桥接与自动驾驶系统的连接,可以直接通过仿真软件对自动驾驶系统进行测试。
目前carla和lgsvl都有单独的apollo和autoware分支,然后在里面集成一个适配器(ROS桥接器),实现仿真软件和自动驾驶系统的连接。当然,apollo3.5切换到cyber框架后,可以通过cyber bridge来实现。制作地图
模拟中经常遇到的另一个问题是制作地图。以上模拟软件都提供了地图编辑器来构建你想要测试的地图。目前地图格式主要使用OpenDrive格式的地图。如果与 Apollo 集成,需要将 OpenDrive 格式的地图转换成 Apollo 可以使用的地图格式。现在的主要问题是地图编辑器不是那么好用,而且大部分好用的地图编辑软件都需要收费。
测试场景
根据我们的测试需求,我们可以构建如下测试场景:
多样化的功能
我们需要仿真软件能够适应不同的测试场景,我们必须要求仿真软件能够提供灵活多样的功能。我们应该提供哪些功能?
过去的评论
如果觉得本文对你有帮助,请点赞、分享、关注连续3个O(∩_∩)O~~
参考