智能交通开发者专栏

carla-recorder录像机

2020-04-13  本文已影响0人  wangafu

录像机

crala的这个特性使得可以使用它来记录或者复现之前的仿真场景,所有发生的事件都被记录在recoder file之中。

recording 记录

所有的数据都写在服务器端的二进制文件里,但recoder是通过carla.client来管理的。
重要 直至回访截止,车辆都会被设置成自动驾驶模式,但是行人会停止。
recoder file 包括了与“角色”相关的信息:

client.start_recorder("/home/carla/recording01.log")

停止recorder也很简单粗暴:

client.stop_recorder()

注意 估计来说,50个交通灯和100辆车记录一个小时大概需要200M的磁盘空间。

仿真回放

回放可以在仿真过程中的任何时间开启,除了需要log file的路径外,这种方法也需要一些其他参数。

client.replay_file("recording01.log", start, duration, camera)
参数 描述 注意
start 记录开始仿真的时间,单位为秒 如果为正值,从记录的开始算起,如果单位为负值,则从记录的结束往前算
duration 回放的时长,0则是代表整个全部 直至回访截止,车辆都会被设置成自动驾驶模式,但是行人会停止。
camera 摄像头会聚焦的“角色”ID 设置为0可以让监视器自由移动
设置时间元素 time factor

time factor会决定回访的速度,它可以在不停止回复的情况下随时进行更改。

client.set_replayer_time_factor(2.0)
参数 默认 最快 最慢
time_factor 1.0 >1.0 <1.0

重要 如果time_factor>2.0,“角色”的位置插值是不可用的,并只能更新。行人的的动画则不受time factor的影响。

录像文件

记录的细节可以通过使用简单的API调用来检索,默认的话,只检索注册了事件的帧,将参数设定为show_all会返回所有帧的所有信息。关于存储数据的细节请参阅这里.

# Show info for relevant frames
print(client.show_recorder_file_info("recording01.log"))
Version: 1
Map: Town05
Date: 02/21/19 10:46:20

Frame 1 at 0 seconds
 Create 2190: spectator (0) at (-260, -200, 382.001)
 Create 2191: traffic.traffic_light (3) at (4255, 10020, 0)
 Create 2192: traffic.traffic_light (3) at (4025, 7860, 0)
 ...
 Create 2258: traffic.speed_limit.90 (0) at (21651.7, -1347.59, 15)
 Create 2259: traffic.speed_limit.90 (0) at (5357, 21457.1, 15)

Frame 2 at 0.0254253 seconds
 Create 2276: vehicle.mini.cooperst (1) at (4347.63, -8409.51, 120)
  number_of_wheels = 4
  object_type =
  color = 255,241,0
  role_name = autopilot
... 
Frame 2350 at 60.2805 seconds
 Destroy 2276

Frame 2351 at 60.3057 seconds
 Destroy 2277
...

Frames: 2354
Duration: 60.3753 seconds

Queries 查询

碰撞

车辆必须有与之绑定的collision dectector来记录碰撞。这是可以被查询的,使用参数可以过滤碰撞相关“角色”的类型,例如:h确定role_name = hero的“角色”,通常与用户管理的车辆是相关的。下面是一些查询可用的具体的“角色”类型设置。

print(client.show_recorder_collisions("recording01.log", "v", "a"))

输出总结了碰撞的时间、类型、ID以及相关“角色”的描述。

Version: 1
Map: Town05
Date: 02/19/19 15:36:08

    Time  Types     Id Actor 1                                 Id Actor 2
      16   v v     122 vehicle.yamaha.yzf                     118 vehicle.dodge_charger.police
      27   v o     122 vehicle.yamaha.yzf                       0

Frames: 790
Duration: 46 seconds

重要 由于是heroego来注册碰撞,所以它通常会是Actor 1
碰撞可以通过使用recorder并设定时间发生前的时间来复现。

client.replay_file("col2.log", 13, 0, 122)

在本案例中,回放如下。


image

Blocked actor 被堵“角色”

检测记录中车辆的拥堵,“角色”的拥堵是用过在一定时间下没有移动超过一定距离来定义的。这种定义使用者可以在查询时来决定。

print(client.show_recorder_actors_blocked("recording01.log", min_time, min_distance))
Parameter 描述 默认
min_time 移动最小距离的最小时间 30s
min_distance 不被认为是拥堵所需移动的最小距离 10cm

注意 有些时候车俩在红绿等前的等待时间可能比预期要久,也可能会被认为是拥堵。
下面的例子假设车辆在60s内移动不超过1m即为拥堵。

client.show_recorder_actors_blocked("col3.log", 60, 100)

输出是按持续时间来分类的,即是车辆在拥堵状态下移动最小距离耗费的时间。

Version: 1
Map: Town05
Date: 02/19/19 15:45:01

    Time     Id Actor                                 Duration
      36    173 vehicle.nissan.patrol                      336
      75    214 vehicle.chevrolet.impala                   295
     302    143 vehicle.bmw.grandtourer                     67

Frames: 6985
Duration: 374 seconds

173车辆在36秒时停止了336秒,可以通过复现36秒之前的一些时间来进行回放。

client.replay_file("col3.log", 34, 0, 173)
image

python脚本示例

官方在PythonAPI/examples路径下提供了一些脚本,可以帮助recorder的使用。

参数 描述
-f 文件名称
-n(可选) 产生车辆,默认是10
-t(可选) 记录持续的时间
参数 描述
-f 文件名称
-s(可选) 开始时间,默认是10
-d(可选) 持续时间,默认是全部
-c(可选) 追逐“角色”的ID
参数 描述
-f 文件名称
-s(可选) 显示所有细节的标志
参数 描述
-f 文件名称
-t 涉及的“角色”的标记h = hero
v = vehiclew = walkert = traffic lighto = othera = any
参数 描述
-f 文件名称
-t(可选) 在被认为是拥堵前的时间
-d(可选) 不被认为是拥堵所需移动的距离

后话

现在是时候进行一下实验了,使用recorder去回放一个仿真过程,追踪发生的时间,并试着修改一下源码看下效果,有神马问题都可以去carla的论坛提问。

https://carla.readthedocs.io/en/latest/adv_recorder/

上一篇下一篇

猜你喜欢

热点阅读