使用OpenStreetMap生成地圖
OpenStreetMap是由貢獻(xiàn)者開發(fā)的世界開放許可證地圖粪薛。這些地圖的各個(gè)部分可以導(dǎo)出到.osm
OpenSreetMap格式的文件纵柿,該文件本質(zhì)上是XML。CARLA可以將文件轉(zhuǎn)換為OpenDRIVE格式犬绒,并使用OpenDRIVE Standalone Mode將其作為任何其他OpenDRIVE映射攝取。這個(gè)過程非常簡單。
1-使用OpenStreetMap獲取地圖
首先要做的是使用OpenStreetMap生成包含地圖信息的文件柄错。
1.1芜抒。轉(zhuǎn)到openstreetmap.org瓤逼。如果未正確顯示地圖,請嘗試更改righ面板中的圖層丙号。
1.2搜索所需的位置并放大到特定區(qū)域疫萤。
警告
由于虛幻引擎的限制颂跨,CARLA可以提取有限尺寸的地圖(巴黎等大城市會(huì)限制引擎的使用)。此外扯饶,地圖越大恒削,轉(zhuǎn)換為OpenDRIVE所需的時(shí)間就越長。
1.3帝际。Export
單擊窗口左上角的蔓同。該出口潘內(nèi)爾將打開。
1.4蹲诀。Manually select a different area
在“導(dǎo)出”面板中單擊斑粱。
1.5。通過在視口中拖動(dòng)正方形區(qū)域的角來選擇自定義區(qū)域脯爪。
1.6则北。點(diǎn)擊Export
按鈕,在出口潘內(nèi)爾痕慢,并保存選定區(qū)域的地圖信息.osm
的文件尚揣。
2-轉(zhuǎn)換為OpenDRIVE格式
CARLA可以讀取由.osm
OpenStreetMap生成的文件中的內(nèi)容,并將其轉(zhuǎn)換為OpenDRIVE格式掖举,以便可以將其作為CARLA映射進(jìn)行提取快骗。可以使用PythonAPI中的以下類完成此操作。
-
carla.Osm2Odr –執(zhí)行轉(zhuǎn)換的類方篮。它將
.osm
解析后的內(nèi)容作為strind名秀,并返回包含結(jié)果的字符串.xodr
。-
osm_file
—.osm
解析為字符串的初始文件的內(nèi)容藕溅。 -
settings
— carla.Osm2OdrSettings對象匕得,其中包含用于參數(shù)化轉(zhuǎn)換的設(shè)置。
-
-
carla.Osm2OdrSettings –包含在轉(zhuǎn)換過程中使用的不同參數(shù)的Helper類巾表。
-
use_offsets
(默認(rèn)值為False) -確定應(yīng)使用偏移生成地圖的位置汁掠,從而根據(jù)該偏移將原點(diǎn)從中心移出。 -
offset_x
(默認(rèn)值為0.0) — X軸上的偏移量集币。 -
offset_y
(默認(rèn)值為0.0) -Y軸上的偏移量考阱。 -
default_lane_width
(默認(rèn)4.0) —確定在生成的XODR文件中通道應(yīng)具有的寬度。 -
elevation_layer_height
(默認(rèn)值0.0) —確定用于重疊元素的不同層中的高度分隔元素惠猿。閱讀更多有關(guān)圖層的信息羔砾。
-
轉(zhuǎn)換的輸入和輸出不是.osm
和.xodr
文件本身,而是它們的內(nèi)容偶妖。出于上述原因姜凄,代碼應(yīng)類似于以下內(nèi)容。
# Read the .osm data
f = open("path/to/osm/file", 'r')
osm_data = f.read()
f.close()
# Define the desired settings. In this case, default values.
settings = carla.Osm2OdrSettings()
# Convert to .xodr
xodr_data = carla.Osm2Odr.convert(osm_data, settings)
# save opendrive file
f = open("path/to/output/file", 'w')
f.write(xodr_data)
f.close()
結(jié)果文件包含OpenDRIVE格式的道路信息趾访。
3-導(dǎo)入CARLA
最后态秧,可以使用OpenDRIVE Standalone Mode在CARLA中輕松提取OpenDRIVE文件。
a)使用您自己的腳本-client.generate_opendrive_world()
通過API進(jìn)行調(diào)用扼鞋。這將生成新地圖申鱼,并阻止模擬,直到準(zhǔn)備就緒為止云头。
使用carla.OpendriveGenerationParameters類設(shè)置網(wǎng)格生成的參數(shù)化捐友。
vertex_distance = 2.0 # in meters
max_road_length = 500.0 # in meters
wall_height = 0.0 # in meters
extra_width = 0.6 # in meters
world = client.generate_opendrive_world(
xodr_xml, carla.OpendriveGenerationParameters(
vertex_distance=vertex_distance,
max_road_length=max_road_length,
wall_height=wall_height,
additional_width=extra_width,
smooth_junctions=True,
enable_mesh_visibility=True))
注意
wall_height = 0.0
強(qiáng)烈建議。OpenStreetMap將相反方向的車道定義為不同的道路溃槐。如果生成墻匣砖,則導(dǎo)致墻重疊和不希望的碰撞。
b)使用config.py
-腳本可以使用新參數(shù)將OpenStreetMap文件直接加載到CARLA中昏滴。
python3 config.py --osm-file=/path/to/OSM/file
重要
client.generate_opendrive_world()要求將OpenDRIVE文件的內(nèi)容解析為string猴鲫,并允許參數(shù)化。相反谣殊,config.py
腳本需要文件****的路徑拂共,.xodr
并且始終使用默認(rèn)參數(shù)。
使用OpenStreetMap生成CARLA地圖的結(jié)果。
警告
生成的道路突然在地圖邊界終止肌厨。當(dāng)車輛無法找到下一個(gè)路標(biāo)時(shí)培慌,這將導(dǎo)致TM崩潰豁陆。為避免這種情況柑爸,默認(rèn)情況下OSM模式設(shè)置為True(set_osm_mode())。這將顯示警告盒音,并在必要時(shí)銷毀車輛表鳍。
這就是有關(guān)如何使用OpenStreetMap生成CARLA地圖的全部知識。