CARLA傳感器及其數(shù)據(jù)
carla中的傳感器可以幫助我們從環(huán)境中獲取數(shù)據(jù)土思,因此傳感器對(duì)于將carla作為學(xué)習(xí)訓(xùn)練自動(dòng)駕駛的平臺(tái)也十分重要。
本內(nèi)容總結(jié)了處理傳感器的所有必要內(nèi)容忆嗜,包括不同類型可用傳感器的基本信息己儒,以及其整個(gè)生命周期涉及的每個(gè)步驟的方法,關(guān)于不同傳感器的具體信息可以參考reference捆毫。
傳感器步驟
carla.Sensor類定義了特殊的可以測(cè)量和傳輸數(shù)據(jù)的actor闪湾。
- 數(shù)據(jù)是什么樣的? 這取決于傳感器的類型而差異巨大绩卤,但是不同的數(shù)據(jù)都被定義為 [carla.SensorData]
- 什么時(shí)候獲取數(shù)據(jù)途样? 在每個(gè)模擬時(shí)間步或者收到了特定的事件的情況下會(huì)開(kāi)始,這取決于傳感器的類型省艳。
-
怎么獲取數(shù)據(jù)? 每個(gè)傳感器都有一個(gè)
listen()
方法嫁审,該方法可以獲取和處理這些數(shù)據(jù)跋炕。
盡管不同的傳感器本身存在差異,但是使用和管理每個(gè)傳感器的方法都是類似的律适。
設(shè)置
如其它actor的方式一樣辐烂,第一步就是在library中找到blueprint,并設(shè)定特定的屬性以獲得想要的結(jié)果捂贿。這對(duì)于處理傳感器來(lái)說(shuō)至關(guān)重要纠修,因?yàn)閭鞲衅鞯哪芰θQ于其設(shè)置內(nèi)容。他們的屬性在sensors' reference中有詳細(xì)的介紹厂僧。
下面的例子設(shè)定了一個(gè)將要連接到車(chē)輛上的儀表盤(pán)高清攝像頭扣草。
# Find the blueprint of the sensor.
blueprint = world.get_blueprint_library().find('sensor.camera.rgb')
# Modify the attributes of the blueprint to set image resolution and field of view.
blueprint.set_attribute('image_size_x', '1920')
blueprint.set_attribute('image_size_y', '1080')
blueprint.set_attribute('fov', '110')
# Set the time in seconds between sensor captures
blueprint.set_attribute('sensor_tick', '1.0')
生成
傳感器與其它actor的生產(chǎn)方式也是類似的,只有attachment_to
和attachment_type
兩個(gè)可選參數(shù)是需要格外注意的颜屠。傳感器應(yīng)該連接到另一個(gè)actor上去辰妙,這個(gè)actor通常就是車(chē)輛,傳感器會(huì)跟隨該車(chē)輛甫窟,并采集其周?chē)臄?shù)據(jù)密浑。有兩種可用的連接類型:
- Rigid: 傳感器的位置會(huì)根據(jù)其父項(xiàng)的位置嚴(yán)格更新。采用這種方式的話粗井,攝像頭傳感器可能會(huì)有雪花出現(xiàn)尔破,如果運(yùn)動(dòng)沒(méi)有放寬的話街图。
- SpringArm:運(yùn)動(dòng)的加速和減速都會(huì)有輕微的放寬
transform = carla.Transform(carla.Location(x=0.8, z=1.7))
sensor = world.spawn_actor(blueprint, transform, attach_to=my_vehicle)
!!! 注意
當(dāng)使用連接方式產(chǎn)生actor時(shí),其位置為其父項(xiàng)的相對(duì)位置懒构,而不是全局位置餐济。
監(jiān)聽(tīng)
每個(gè)傳感器都有一個(gè) listen()
方法,在傳感器接收到數(shù)據(jù)后痴脾,該方法都會(huì)被調(diào)用颤介。該方法有一個(gè)參數(shù): callback
,它是一個(gè)函數(shù)的lambda expression 表達(dá)赞赖,其定義了當(dāng)數(shù)據(jù)被接收到之后傳感器應(yīng)該做什么滚朵。lambda函數(shù)必須有至少一個(gè)參數(shù),該參數(shù)就是獲取的數(shù)據(jù)前域。
# do_something() will be called each time a new image is generated by the camera.
sensor.listen(lambda data: do_something(data))
...
# This collision sensor would print everytime a collision is detected.
def callback(event):
for actor_id in event:
vehicle = world_ref().get_actor(actor_id)
print('Vehicle too close: %s' % vehicle.type_id)
sensor02.listen(callback)
!!! 注意
is_listening
是一個(gè)根據(jù)使用者意愿來(lái)開(kāi)啟/關(guān)閉數(shù)據(jù)監(jiān)聽(tīng)的辕近。
類似的,sensor_tick
是一個(gè)blueprint attribute藍(lán)本屬性匿垄,可以被用來(lái)設(shè)定數(shù)據(jù)獲取的時(shí)間間隔移宅,所以其不是在每個(gè)時(shí)間步都被召回的。
大多數(shù)的傳感器對(duì)象都有一個(gè)可以保存測(cè)量數(shù)據(jù)到硬盤(pán)的函數(shù)椿疗,這樣的話這些數(shù)據(jù)就可以在別的地方使用漏峰。
傳感器屬于由于其類型的不同而相差很大,但是通常都被貼了以下標(biāo)記:
Sensor data attribute | Type | Description |
---|---|---|
frame |
int | 測(cè)量時(shí)的幀數(shù)號(hào) |
timestamp |
double | 情節(jié)開(kāi)始之后模擬器運(yùn)行時(shí)間的時(shí)間戳 |
transform |
carla.Transform | 獲取到數(shù)據(jù)時(shí)傳感器的位置坐標(biāo)信息 |
傳感器類型
攝像頭
這種攝像頭會(huì)對(duì)模擬器中的world從其位置點(diǎn)進(jìn)行拍照届榄,然后使用helper類將其獲取到的圖像進(jìn)行轉(zhuǎn)換浅乔,并提供不同類型的信息。
Retrieve data: 每一個(gè)模擬時(shí)間步铝条。
Sensor | Output | Overview |
---|---|---|
Depth | carla.Image | Renders the depth of the elements in the field of view in a gray-scale depth map. |
RGB | carla.Image | Provides clear vision of the surroundings. Looks like a normal photo of the scene. |
Semantic segmentation | carla.Image | Renders elements in the field of view with a specific color according to their tags. |
Detectors
一種當(dāng)其連接的父項(xiàng)在模擬器中注冊(cè)了特定的事件就開(kāi)始獲取數(shù)據(jù)的傳感器靖苇。
Retrieve data: 當(dāng)被激活時(shí).
Sensor | Output | Overview |
---|---|---|
Collision | carla.CollisionEvent | Retrieves collisions between its parent and other actors. |
Lane invasion | carla.LaneInvasionEvent | Registers when its parent crosses a lane marking. |
Obstacle | carla.ObstacleDetectionEvent | Detects possible obstacles ahead of its parent. |
Other
這組包含了不同功能的傳感器:導(dǎo)航,測(cè)量物體物理屬性以及提供場(chǎng)景的2D和3D模型班缰。
Retrieve data:每一個(gè)模擬時(shí)間步.
Sensor | Output | Overview |
---|---|---|
GNSS | carla.GNSSMeasurement | Retrieves the geolocation location of the sensor. |
IMU | carla.IMUMeasurement | Comprises an accelerometer, a gyroscope and a compass. |
Lidar raycast | carla.LidarMeasurement | A rotating lidar retrieving a cloud of points to generate a 3D model the surroundings. |
Radar | carla.RadarMeasurement | 2D point map that models elements in sight and their movement regarding the sensor. |
這是關(guān)于傳感器如何獲取模擬數(shù)據(jù)的總結(jié)贤壁,因此,關(guān)于carla的介紹到這里就結(jié)束了埠忘,然而還有很多東西需要學(xué)習(xí)脾拆。以下是推薦的集中不同的學(xué)習(xí)路線:
- 搞一些練習(xí): 如果只在carla中進(jìn)行駕駛?cè)蝿?wù)還是有挑戰(zhàn)的話,試一試本文檔中提供的代碼示例會(huì)是一個(gè)不錯(cuò)的idea莹妒,可以嘗試將其與示例腳本進(jìn)行組合或者加入自己的想法假丧。
<div class="build-buttons">
<p>
<a href="ref_code_recipes.md" target="_blank" class="btn btn-neutral" title="Code recipes">
Code recipes</a>
</p>
</div>
- 繼續(xù)學(xué)習(xí): 在carla中還有一些其他高級(jí)的特點(diǎn),就像渲染選項(xiàng)动羽、交通管理包帚、錄像機(jī)、以及其它运吓。既然已經(jīng)學(xué)完了基礎(chǔ)的知識(shí)渴邦,搞點(diǎn)這些所謂的高級(jí)玩意兒也是極好的疯趟。
<div class="build-buttons">
<p>
<a href="adv_synchrony_timestep.md" target="_blank" class="btn btn-neutral" title="Synchrony and time-step">
Synchrony and time-step</a>
</p>
</div>
- 自由的去試驗(yàn): 但是不要忘記去看看文檔的 References部分,它包含了Pyhon API的各種類的具體信息谋梭、傳感器及其輸出以及其它東東信峻。
<div class="build-buttons">
<p>
<a href="python_api.md" target="_blank" class="btn btn-neutral" title="Python API reference">
Python API reference</a>
</p>
</div>
- 掏出你的兩分錢(qián): 分享你的想法,如果有任何關(guān)于carla的疑惑瓮床、建議和想法盹舞,carla 論壇都?xì)g迎你來(lái)搞。
<div class="build-buttons">
<p>
<a target="_blank" class="btn btn-neutral" title="Go to the CARLA forum">
CARLA forum</a>
</p>
</div>