标注:本文来自本实验室胡宗盛的研究成果。
GPS系统数字孪生建模的仿真模型实时同步数据中,实时与仿真时间之间存在差异,模拟世界拥有自己的时钟和时间,由服务器来执行, 计算两个模拟步骤需要一些实时的时间,但是在这两个模拟时刻之间也存在时间跨度, 即时间步长,服务器只有在等待一个客户端发送的 world_tick() 后才会计算下一个 step, 为了搜集同步的数据,要同时设置同步模式和固定时间步。
可变的时间步长
下面是 carla 中的默认模式,步骤之间经过的仿真时间将是服务器计算这些步骤所花费的时间:
settings=world.get_settings()
settings.fixed_delta_seconds=None
world.apply_settings(settings)
设置时间步长为 0:python3 config.py –deltaseconds 0
固定时间步
步骤之间经过的时间保持不变,如果将其设置为 0.05 秒,则每秒钟模拟 20 帧,在每个步骤上都使用相同的时间增量是模拟手机数据的最佳方法,物理和传感器数据将对应于易于理解的仿真时刻。同样,如果服务器足够快,则可以在较短的时间内模拟更长的时间段。
settings=world.get_settings()
settings.fixed_delta_seconds=0.05
world.apply_settings(settings)
或者使用提供的脚本进行设置时间步长为 0.05:python3 config.py –deltaseconds 0.05。
记录模拟的提示
carla 具有记录器功能,可以记录模拟然后重新执行。但是在寻找精度时候,需要考虑一些因素。使用固定时间步的话,重新制定将会很容易,可以将服务器设置为原始模拟中使用的相同时间步;有了可变的时间步,事情就变得更加复杂了。
如果服务器以可变的时间步长运行,则该时间步长将不同于原始时间步长,因为逻辑周期有时候会不同,然后将使用记录的数据对信息进行插值;如果服务器被迫重现完全的时间步长,则模拟的步长将相同,但是它们之间的实时时间会改变。时间步应该要一一随之改变,这些原始时间步是原始模拟尽可能快的运行的结果,由于表示这些事件所花费的时间将大部分不同,因此模拟必然会随着怪异的时间波动而重现;可变时间步长会引入浮点算术错误,仿真运行的时间步长等实际时间步长,实时是一个连续变量,在模拟中用一个 float 值表示,该值具有十进制限制,累计在每个步骤上的时间会累积,从而使得模拟无法精确重复发生的事情。
客户端-服务器同步
carla 建立在客户端服务器体系结构之上,服务器运行模拟,客户端获取信息,并要求对世界进行改变。默认情况下,carla 在异步模式下运行,服务器尽可能快的模拟运行,无需等待客户端;在同步模式下,服务器在更新到下一步模拟步骤之前要先等待客户端的准备就绪的消息。
设定同步模式在同步模式和异步模式之间切换仅仅是布尔状态的问题。
settings=world.get_settings()
settings.synchronous_mode=True
world.apply_settings(settings)
如果要禁用同步模式,只需要将变量设置为 false,或者使用脚本 python3 config.py–np。需要注意的是不能够使用脚本来启用同步模式,只能够禁用。启用同步模式会使服务器等待客户端应答。使用此脚本,用户无法在需要时发送报价。
使用同步模式同步模式与慢速客户端应用程序相关,并且当需要不同元素之间的同步时,如果客户端太慢而服务器不等待,会出现信息溢出,客户端无法管理所有内容,并且将丢失或混淆所有内容。以下代码段扩展了上一个代码段。客户端创建一个摄像头传感器,将当前步骤的图像数据存储在队列中,并且在队列中检索服务器后对服务器进行打勾。
可能的配置如果是同步模式和可变时间步长,基本上可以确定这是没有什么希望的,因为当时间步长大于 0.1s 时,物理学将会无法正常运行,如果服务器必须等待客户端计算步骤,则很可能会发生这种情况,仿真时间和物理原理不会同步, 模拟将会变得不可靠。
如果是同步模式和固定时间步长,客户将负责模拟,时间步长固定,在客户端发送报价之前,服务器将不计算下一步,当同步性和精度相关时,这是最佳的模式了,尤其是在于慢速客户或者其他元素检索信息时。 如果是异步模式和可变时间步长,这个是 carla 的默认状态,客户端和服务器端是异步的,模拟时间根据实时时间流逝,当我们重新执行仿真时,需要考虑浮点运算错误以及服务器之间时间步长的可能差异。 如果是异步模式和固定时间步长,服务器将尽可能快速的运行,检索到的信息将很容易与模拟中的准确时刻相关联,如果服务器足够快,则此配置可以以短得多的实时时间来模拟长时间。 |
结果显示用 pygame 将收集到的数据显示出来,打印出服务器端的fps 和客户端的 fps:
可以看到服务器的 fps 是 30,客户端的 fps 是 20 左右。同步模式下客户端不会自动计算下一个 step,它只有在接收一个 world.tick() 之后才会计算下一个 step,然后暂停仿真,继续等待下一个 world.tick()。
本文结合数字孪生仿真建模工具carla,对自动驾驶GPS 传感器进行建模,主要指获取自动驾驶汽车的GPS 数据,位置信息,星历数据等,在此基础上尝试获取同步的传感器数据,要求服务器端与客户端同步,固定时间步长,设置同步模式,借助pygame,在carla 自动驾驶仿真模拟器中实现GPS 传感器和定位信息的实时可视化建模,实现数据的实时交互和呈现。
fqj
-
自动驾驶
+关注
关注
782文章
13608浏览量
165876 -
数字孪生
+关注
关注
4文章
1254浏览量
12173
发布评论请先 登录
相关推荐
评论