Simulation Work with CARLA
众所周知(不是),我在自动驾驶运动控制上付出了大量时间精力,仿真只不过是顺带着做了些许工作。在从事仿真工作时,我直接复用了原本的运动控制算法框架,我只需要基于CARLA实现兼容的数据接口和控制接口即可,这很自然,因为原本我的框架设计之初就考虑了多平台兼容性(不同实车平台、仿真平台等)。
虽然这些工作我完成已经很久了(目前我的软件设计理念、框架构思都已经进一步革新了,不在这里展开聊了),但是现在稍微记录并展示也算不错吧。
实时仿真
大多数仿真器具备同步模式和异步模式两种仿真模式。CARLA在异步模式下会尽其所能的尽快推动仿真时间前进。同步模式就是你主动控制仿真的节奏,比如你设定仿真器以50Hz运行,即每个时间步跨度为20ms,这20ms仿真器内的涉及的物理计算、位置状态变换可能在1ms左右就完成了计算,那么你可以任意控制你以什么样的节奏去控制仿真器什么时刻去进行这一个又一个的20ms的时间跨度的仿真计算并和客户端进行数据交互,这就直接带来一个问题,仿真时间尺度通常来说和真实时间尺度是不同的,除非你能精确的每20ms通知仿真器进行计算,那么理论上你能让仿真时间尺度和真实时间尺度完全同步。
注意这不是科普文,关于同步模式、异步模式还涉及很多细节,这里不会赘述。
可能有人好奇,直接让算法接入仿真时间不就好了,对,确实!不过出于某种原因我需要让仿真时间和真实时间完全同步,即实时仿真。
这里有一个问题,计算机的定时器不是理论层面精准的,这和是不是实时内核没关系。假定我们的目标是让仿真器以50Hz运行,每20ms你告诉仿真器进行一次计算,事实上可能过了20.01ms仿真器才被告知进行一次仿真计算,这似乎并不严重,但是如果每个周期就产生细微的时间差异,这个误差不断累积,在连续仿真一天后,这个误差可能就来到分钟级别,比如现实时间过了24小时,仿真时间可能才过了23小时55分钟,那么你会怎么对待这个差距呢?
通过统计每个周期内统计这个误差,并动态补偿,我可以让每个仿真时间步的时间误差控制在几十到几百微妙之间,同时无论连续仿真多长时间,总的的时间误差也时中控制在几十到几百微妙之间。
后面有兴趣有精力的话或许我会详细解释一下我是怎么做的,不过也可能你已经知道怎么实现了。
CARLA or Racing Game? 🎮
在自动驾驶领域,运动控制模块给出具体的控制量来让车辆产生期望的位姿变化,那么使用相同的接口,我们一样可以把手柄的操作信号对应到对车辆的控制量,这个工作早就有了,现在我们在仿真平台上运行它,这不就是个赛车游戏了嘛?
视频还在制作中,第一次弄呢。
CARLA——单车路径跟踪
视频还没录呢,等着吧哈哈哈哈哈哈哈哈
CARLA——跟车模式
也还没录呢,嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿