这其实与前段和后端的做法及其类似。后端数据全部存储在远程的服务器中,在前端发出读取、修改后端数据的指令,指令通过 rpc 等措施传输到远程后端,实现对服务器中数据的修改。
在官方中是这样介绍World的, The world is an object representing the simulation. ,即为展示仿真的一个对象。
Carla是进行自动驾驶仿真模拟的平台。在自动驾驶的仿真中,需要构建一块区域,如乡村、城市等,来完成自动驾驶的仿真模拟。而构建的这个区域就是 world ,就像是一个独立的世界,在这个世界内完成仿真模拟的所有工作。在这个世界中存在多个事物,如车、行人、交通灯等,而这些事物又分别有自己的状态、信息等。
同时,这个 world 也可以理解为一个抽象层,在这个抽象层中提供了一系列方法,可用于获取该 world 的当前状态、改变这个 world 的天气、孵化产生相关的 actor 等。
client ,意为客户端,客户端是用户运行的一个模块,一个 client 可以凭借一个终端,通过一个IP地址和指定端口与服务器交互。
在 carla 中,在服务器上运行仿真,就是进行 world 侧程序的运行。与服务器交互就是指与 client 与 world 做出交互,即仿真运行在服务器上,表现为一个独立的区域,即为 world 。在这个 world 中有许多个事物,比如车、行人、交通灯等;而 client 为一个模块,用户可以通过 client 与 world 进行交互,从而达到改变 world 及 world 中某些事物的状态、获取相关信息等任务。
在一个仿真中,有且只能有一个 world ,就像世界,只有一个;而可以同时运行多个 client ,多个 client 分别与这个world进行交互。
一个 actor 可以指在仿真世界中的任何事物,如车、行人、传感器、交通灯等。
blueprint 是指已经布置好的用来产生 actor 的设计。一般来说,一个model都包含生命力和一系列的属性,一些属性可以实现用户定制化,而其他一些属性则不能。已经构建了 Blueprint library ,在这库中包含了所有可用的 blueprint 和信息。
地图是仿真中 world 的面貌,大部分为城镇。在 carla 自带的模块中共有八个地图。
道路、小巷和道路交叉口等都可以通过 client 来调用 Python API 来进行管理,也通过类 waypoint 来为车辆添加路径导航。
交通标志和交通灯则作为 carla.Landmark 的对象来进行修改。
传感器用来收集仿真世界的数据资料,传感器需要公式来清楚的定义如何去从管理数据。
crala的这个特性使得可以使用它来记录或者复现之前的仿真场景,所有发生的事件都被记录在 recoder file 之中。
所有的数据都写在服务器端的二进制文件里,但recoder是通过 carla.client 来管理的。
重要 直至回访截止,车辆都会被设置成自动驾驶模式,但是行人会停止。
recoder file 包括了与“角色”相关的信息:
停止recorder也很简单粗暴:
注意 估计来说,50个交通灯和100辆车记录一个小时大概需要200M的磁盘空间。
回放可以在仿真过程中的任何时间开启,除了需要log file的路径外,这种方法也需要一些其他参数。
time factor会决定回访的速度,它可以在不停止回复的情况下随时进行更改。
重要 如果 time_factor>2.0 ,“角色”的位置插值是不可用的,并只能更新。行人的的动画则不受time factor的影响。
记录的细节可以通过使用简单的API调用来检索,默认的话,只检索注册了事件的帧,将参数设定为 show_all 会返回所有帧的所有信息。关于存储数据的细节请参阅 这里 .
车辆必须有与之绑定的 collision dectector 来记录碰撞。这是可以被查询的,使用参数可以过滤碰撞相关“角色”的类型,例如: h 确定 role_name = hero 的“角色”,通常与用户管理的车辆是相关的。下面是一些查询可用的具体的“角色”类型设置。
输出总结了碰撞的时间、类型、ID以及相关“角色”的描述。
重要 由于是 hero 或 ego 来注册碰撞,所以它通常会是 Actor 1 。
碰撞可以通过使用recorder并设定时间发生前的时间来复现。
在本案例中,回放如下。
检测记录中车辆的拥堵,“角色”的拥堵是用过在一定时间下没有移动超过一定距离来定义的。这种定义使用者可以在查询时来决定。
注意 有些时候车俩在红绿等前的等待时间可能比预期要久,也可能会被认为是拥堵。
下面的例子假设车辆在60s内移动不超过1m即为拥堵。
输出是按持续时间来分类的,即是车辆在拥堵状态下移动最小距离耗费的时间。
173 车辆在 36 秒时停止了 336 秒,可以通过复现 36 秒之前的一些时间来进行回放。
官方在 PythonAPI/examples 路径下提供了一些脚本,可以帮助recorder的使用。
现在是时候进行一下实验了,使用recorder去回放一个仿真过程,追踪发生的时间,并试着修改一下源码看下效果,有神马问题都可以去carla的论坛提问。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)