標(biāo)注:本文來自本實(shí)驗(yàn)室胡宗盛的研究成果。
定位的技術(shù)發(fā)展
第一為 GNSS 定位,該定位依托于衛(wèi)星定位技術(shù),定位精度在 10 米以下;
第二為慣導(dǎo)定位;
第三為高精度定位,該種定位已經(jīng)實(shí)現(xiàn)了對(duì)傳感器的建模和對(duì)獲取到的傳感器數(shù)據(jù)的信息的處理等,定位精度已經(jīng)達(dá)到了厘米級(jí)的程度。
因此,精確的定位是自動(dòng)駕駛的基礎(chǔ),也是核心,缺少精確的定位,自動(dòng)駕駛可能會(huì)出現(xiàn)失誤。
自動(dòng)駕駛定位系統(tǒng)的基本要求
高精度: 要求達(dá)到厘米級(jí);
高可用性:為了保持其穩(wěn)定性和實(shí)用性,自動(dòng)駕駛測(cè)試的階段已經(jīng)從封閉階段轉(zhuǎn)換為開放階段,這其實(shí)是為了要求我們的定位系統(tǒng)能夠處理日益復(fù)雜的情況,應(yīng)對(duì)不可預(yù)知的情況發(fā)生的能力大大提升;
高可靠性:這個(gè)自動(dòng)駕駛定位系統(tǒng)的輸出是判斷感知的方法,應(yīng)對(duì)措施,提供解決方案反映了應(yīng)對(duì)的能力,這個(gè)時(shí)候即便有一丁點(diǎn)的小誤差也會(huì)給我們帶來極其嚴(yán)重的后果;
自主完好性檢測(cè):鑒于當(dāng)前系統(tǒng)建模的準(zhǔn)確性還沒有到達(dá) 100%,即便已經(jīng)比較靠近。所以當(dāng)我們提供的輸出不夠準(zhǔn)確的情況下,我們能做的就是告訴并勸戒駕駛用戶采取相應(yīng)的措施,以此防止交通事故的發(fā)生,我們對(duì)它的要求就是在預(yù)測(cè)發(fā)生事故時(shí)可以準(zhǔn)確的提醒以及降低錯(cuò)誤提醒的發(fā)生概率。
自動(dòng)駕駛定位的方法與流程
1.在感應(yīng)到基站的情況下,采用衛(wèi)星定位和慣導(dǎo)組合的定位技術(shù);
2.根據(jù)需求分別自動(dòng)切換三種自動(dòng)駕駛的定位技術(shù);
3.在隧道或夜間外界環(huán)境光線穩(wěn)定的情況下,采用視覺里程算法的定位技術(shù);
4.在未感知到基站的情況下,采用激光雷達(dá)點(diǎn)云和高精度地圖匹配的定位技術(shù)。
Carla.GeoLocation:類包含地理坐標(biāo)模擬數(shù)據(jù),該 carla.Map 可以通過使用模擬轉(zhuǎn)換位置 OpenDrive文件中的標(biāo)簽,包括(緯度,經(jīng)度,高度)。
Carla.GnssMeasurement:定義由 sensor.other.gnss 注冊(cè)的 Gnss 數(shù)據(jù)的類,實(shí)際上是通過傳感器的位置和 Open- Drive 地理參考來報(bào)告其位置,包括(高度,緯度,經(jīng)度)。
Carla.IMUMeasurement:繼承自carla.SensorData,定義由secsor.other.imu 注冊(cè)的數(shù)據(jù)的類,根據(jù)當(dāng)前carla.world進(jìn)行傳感器轉(zhuǎn)換,實(shí)際上起著加速度計(jì),陀螺儀和指南針的作用。
Carla.Image:被用作相機(jī)傳感器檢索的初始數(shù)據(jù),有不同的相機(jī)傳感器(當(dāng)前為 3 個(gè),分別是RGB,深度和語義分割),并且每個(gè)傳感器對(duì)圖像的使用方式都不同,包括(圖像水平,圖像高度,圖像寬度)。
自動(dòng)駕駛 GPS 建模
創(chuàng)建客戶
創(chuàng)建客戶需要標(biāo)識(shí)它的 IP 地址和兩個(gè)與服務(wù)器通信的 TCP 端口,第三個(gè)參數(shù)可以設(shè)置工作線程的數(shù)量。默認(rèn)情況下為 all(0)。
client = carla.Client(’localhost’,2000)
默認(rèn)情況下,carla 使用本地主機(jī) IP 和端口 2000 進(jìn)行連接,但是可以隨意更改,在這種情況下,第二個(gè)端口始終為 2001。
創(chuàng)建客戶端后,要設(shè)置超時(shí)時(shí)間。這限制了所有網(wǎng)絡(luò)的操作,使得這些操作永遠(yuǎn)不會(huì)阻止客戶端,如果連接失敗,將會(huì)返回錯(cuò)誤。在實(shí)際操作的過程中,發(fā)現(xiàn)預(yù)定的
10.0 不足以滿足,通常情況下我需要設(shè)置的超時(shí)時(shí)間更長(zhǎng)一些。client.set_timeout(100.0)
可能會(huì)連接到許多客戶端,因?yàn)橥ǔG闆r下,一次性運(yùn)行多個(gè)腳本是很常見的。在具有高級(jí) carla 功能的多客戶端方案中進(jìn)行工作將會(huì)使得通信變得更加復(fù)雜。
需要注意的是客戶端和服務(wù)器具有不同的 libcarla 模塊。版本不同的話可能會(huì)出現(xiàn)問題,可以使用 get_client_version() 和 get_server_version() 方法進(jìn)行檢查。
與世界聯(lián)系
world=client.get_world()
客戶端可以很容易的連接和檢索當(dāng)前世界。除此之外,客戶端還可以獲取可用地圖列表以更改當(dāng)前地圖,這會(huì)摧毀當(dāng)前世界并創(chuàng)造一個(gè)新的世界。每個(gè)世界都有一個(gè)自己的 id,每次客戶要求 load_world() 或者 reload_world() 的時(shí)候,前一個(gè)世界都會(huì)被銷毀, 從頭開始創(chuàng)建新的世界,在此過程中虛幻引擎不會(huì)重新啟動(dòng)。
print(client.get_available_maps())
world=client.load_world(’Town02’)
client.load_world()
地圖示例:
Actor和Blueprint
在 carla 中,參與者不僅僅只包括車輛和步行者,還包括傳感器,交通標(biāo)志,交通信號(hào)燈和行人觀眾,全面了解如何對(duì)其進(jìn)行操作至關(guān)重要。藍(lán)圖可以使得用戶將新的參與者平穩(wěn)地合并到模擬中,它們是已經(jīng)制作的具有動(dòng)畫和一系列屬性的模型,其中一些是可以修改的,而其他的則不是。這些屬性包括車輛顏色,激光雷達(dá)傳感器中的通道數(shù)量,行人的速度等。
blueprint_library=world.get_blueprint_library()
每一個(gè)藍(lán)圖 (blueprint) 有一個(gè) ID 來標(biāo)志它們,并隨其生成演員。可以在藍(lán)圖庫找到某個(gè) ID,隨機(jī)選擇這個(gè) ID 對(duì)應(yīng)的藍(lán)圖,或者使用通配符模式過濾結(jié)果。
世界對(duì)象負(fù)責(zé)生成角色并對(duì)其進(jìn)行跟蹤,生成角色有兩種不同的方法:spawn_actor()如果生成失敗,則會(huì)引發(fā)異常;try_spawn_actor() 如果生成失敗,則返回 None。
transform=Transform(Location(x=210,y=180,z=50),Rotation(yaw=180)) actor=world.spawn_actor(blueprint,transform)
如果在選定的位置發(fā)送碰撞的話,不會(huì)生成角色,使用map.get_spawn_points()這個(gè)函數(shù)返回推薦的生成點(diǎn)列表;同理,world.get_random_location() 可以返回人行道上的隨機(jī)點(diǎn),為行人設(shè)置目標(biāo)位置。
camera=world.spawn_actor(camera_bp,relative_transform,attach_to=my_vehicle,carla.AttachmentType.Ri
這一句將 camera 攝像機(jī)固定在創(chuàng)造的汽車上,使得二者的位置保持相對(duì)固定。產(chǎn)生角色之后,世界會(huì)將它添加到參與者列表之中。
定義角色列表并清理
actor 主要由get() 和 set() 方法組成,這里需要主要的是請(qǐng)求會(huì)被異步的發(fā)送到模擬器,但是 carla 每次解析它們的時(shí)間都是有限的,用 set() 方法會(huì)累積滯后。
地圖和導(dǎo)航
創(chuàng)建及改變地圖和世界的方法在上面已經(jīng)提到過了,與航路點(diǎn)相關(guān)的所有事情都發(fā)生在客戶端,不需要與服務(wù)器進(jìn)行通信,每個(gè)航路點(diǎn)都包含 carla.Transform,說明了它在地圖上的位置以及包含它的車道的方向,carla 的導(dǎo)航是通過 Waypoint API 進(jìn)行管理的,由 carla.Waypoint 和 carla.Map 的方法摘要組成。
將模擬點(diǎn)轉(zhuǎn)換為地理坐標(biāo),使用緯度和經(jīng)度值將某個(gè)位置轉(zhuǎn)換為 carla.GeoLocation, 將道路信息轉(zhuǎn)換為 OpenDrive 格式保存。
my_geolocation=map.transform_to_getlocation(vehicle.transform) info_map=map.to_opendrive()
利用carla.get_transform().location 獲取數(shù)據(jù),下圖是運(yùn)行 50 秒的初始位置和結(jié)束位置:
識(shí)別位置坐標(biāo)
可以看出,Carla 中小車的位置最開始在 (0,0,0),經(jīng)過 50 秒的運(yùn)行之后位置變化為(196.215607,241.279999,0.271780)。
fqj
-
自動(dòng)駕駛
+關(guān)注
關(guān)注
782文章
13633瀏覽量
165992 -
數(shù)字孿生
+關(guān)注
關(guān)注
4文章
1268瀏覽量
12180
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論