carla-recorder录像机

录像机

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

recording 记录

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

  • “角色”的创建和毁灭
  • 交通灯的状态变换
  • 车辆和行人的位置和角度
    要开始recorder的话,你只需要指定路径和文件名就可以了,如果不指定的话,文件会默认存放在CarlaUE4/Saved
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"))
  • **Opening information ** 地图、数据和仿真被记录的时间
  • Frame information 任何可能发生的事件,例如“角色”的产生或碰撞。它包含了“角色”的ID和附加信息。
  • Closing information 帧数和记录的所有时间。
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的“角色”,通常与用户管理的车辆是相关的。下面是一些查询可用的具体的“角色”类型设置。

  • h = Hero
  • v = Vehicle
  • w = Walker
  • t = Traffic light
  • o = Other
  • a = Any
    注意 manual_sontrol.py脚本为ego车辆指定了role_name = hero.
    碰撞查询需要2个参数来过滤碰撞,写面的示例将展示车辆之间和其他任何物体的碰撞。
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的使用。

  • start_recording.py 可以启动recorder,记录的持续时间可以被设置,并且可以在开始的时候产生“角色”。
参数 描述
-f 文件名称
-n(可选) 产生车辆,默认是10
-t(可选) 记录持续的时间
  • start_replaying.py 启动记录的回放,开始时间、持续时间、追踪的“角色”都可以设定。
参数 描述
-f 文件名称
-s(可选) 开始时间,默认是10
-d(可选) 持续时间,默认是全部
-c(可选) 追逐“角色”的ID
  • show_recorder_file_info.py 展示记录文件的所有信息,默认情况下只显示有记录事件的帧,但是也可以显示所有帧。
参数 描述
-f 文件名称
-s(可选) 显示所有细节的标志
  • show_recorder_collisions.py 展示A和B类型“角色”的标记的碰撞,-t = vv会显示车辆间的所有碰撞。
参数 描述
-f 文件名称
-t 涉及的“角色”的标记h = hero
v = vehiclew = walkert = traffic lighto = othera = any
  • show_recorder_actors_blocked.py 展示被认为是拥堵的车辆,车辆在一定时间内没有移动超过一定距离就被认定为拥堵。
参数 描述
-f 文件名称
-t(可选) 在被认为是拥堵前的时间
-d(可选) 不被认为是拥堵所需移动的距离

后话

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容