[carla入门教程]-4 carla中的地图(附:鸟瞰图和道路图)
第1小节介绍了carla中包含的地图。第2小节介绍了地图的加载方法。第3小节介绍了闪退问题及其解决方法。附录部分展示了鸟瞰图和道路图。
本专栏教程将记录从安装carla到调用carla的pythonAPI进行车辆操控并采集数据的全流程,带领大家从安装carla开始,到最终能够熟练使用carla仿真环境进行传感器数据采集和车辆控制.
第四节 介绍carla中的地图
本小节的主要内容是介绍carla中的地图的种类和修改方法.
- 章节内容介绍:
第1小节介绍了carla中包含的地图。第2小节介绍了地图的加载方法。第3小节介绍了闪退问题及其解决方法。附录部分展示了鸟瞰图和道路图。
1.carla0.9.12中包含的地图
运行carla服务器之后,再通过下面的脚本可以打印出地图.
从其中关键的函数是调用get_available_maps()
.
# 生成汽车流
import glob
import os
import sys
# ==============================================================================
# -- Find CARLA module ---------------------------------------------------------
# ==============================================================================
try:
sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % (
sys.version_info.major,
sys.version_info.minor,
'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0])
except IndexError:
pass
# ==============================================================================
# -- Add PythonAPI for release mode --------------------------------------------
# ==============================================================================
try:
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + '/carla')
sys.path.append("../examples/")
except IndexError:
pass
import carla
# Connect to the client and retrieve the world object
try:
client = carla.Client('127.0.0.1', 2000)
for i in range(len(client.get_available_maps())):
print(client.get_available_maps()[i])
except IndexError:
pass
- carla0.9.12中的地图:
/Game/Carla/Maps/Town06_Opt
/Game/Carla/Maps/Town01
/Game/Carla/Maps/Town07
/Game/Carla/Maps/Town05_Opt
/Game/Carla/Maps/Town07_Opt
/Game/Carla/Maps/Town06
/Game/Carla/Maps/Town03
/Game/Carla/Maps/Town10HD
/Game/Carla/Maps/Town04
/Game/Carla/Maps/Town03_Opt
/Game/Carla/Maps/Town02
/Game/Carla/Maps/Town10HD_Opt
/Game/Carla/Maps/Town05
/Game/Carla/Maps/Town01_Opt
/Game/Carla/Maps/Town02_Opt
/Game/Carla/Maps/Town04_Opt
/Game/Carla/Maps/Town11/Town11
可以看到,carla中的地图分成两类,一类是Non-layered maps的,另一类是Layered maps.两者的区别在于,前者的贴图是不可分层的,而后者贴图可以分层,可以根据需要去掉一些图层.
1.1 Non-layered maps
不可分层的地图一共有Town01~Town07,Town10HD.共计8个地图.
Town Summary
Town01 基础城镇,由很多T字路口组成.
Town02 和Town01相似,但是比town01小
Town03 最复杂的Town,5车道,迂回,不均衡,地下通道等
Town04 无穷循环的高速+一个小城镇
Town05 具有十字路口和桥的方形城镇.单方向有很多车道.
Town06 具有很多公路出入口的长公路.
Town07 乡村环境,具有狭窄的道路,大棚,几乎没有红绿灯.
Town10HD 城市环境,具有不同环境(如大道或长廊)和更逼真纹理.
具体地图的鸟瞰图和路网地图请跳转到 附录查看.
Town10HD打开需要很大显存,我的电脑显卡是2060,6GB版本,打开时存在闪退问题.
1.2 Layered maps
分层贴图的布局与非分层贴图相同,但可以在贴图的图层上切换和关闭。有一个不可切换的最小布局,由道路、人行道、红绿灯和交通标志组成。分层地图可以用后缀_Opt标识,例如Town01_Opt。carla0.9.12中一共有Town01_Opt~Town07_Opt,以及Town10HD_Opt.
可以通过Python API加载和卸载层:
# Load layered map for Town 01 with minimum layout plus buildings and parked vehicles
world = client.load_world('Town01_Opt', carla.MapLayer.Buildings | carla.MapLayer.ParkedVehicles)
# Toggle all buildings off
world.unload_map_layer(carla.MapLayer.Buildings)
# Toggle all buildings on
world.load_map_layer(carla.MapLayer.Buildings)
如图所示,图1是带有建筑物图层的,图2是去掉建筑物图层的.
2.修改地图
通过load_world('Townxx')
加载地图.
client.load_world('Townxx')
3.闪退问题
3.1 低精度渲染引起的闪退问题
当我们采用低精度方式渲染服务器时,也就是使用./CarlaUE4.sh -quality-level=Low
命令运行服务器时.通过脚本切换地图会出现如下的错误
然后carla服务器会闪退.
- 解决方法:
目前没有搞明白闪退原因,不过经过测试发现,把渲染脚本改会默认值,也就是./CarlaUE4.sh
启动时,切换地图就不会出现闪退了.
3.2 添加图层地图引起的闪退问题
载入可变图层地图时.当去除图层后,再添加图层的时候,总是会导致carla服务器闪退,也不知道为什么.
终端显示的错误如下:
4.26.2-0+++UE4+Release-4.26 522 0
Disabling core dumps.
Signal 11 caught.
Malloc Size=65538 LargeMemoryPoolOffset=65554
CommonUnixCrashHandler: Signal=11
Malloc Size=131160 LargeMemoryPoolOffset=196744
Malloc Size=131160 LargeMemoryPoolOffset=327928
Engine crash handling finished; re-raising signal 11 for the default handler. Good bye.
Segmentation fault (core dumped)
- 解决方法
未找到根本解决方法.这里建议大家只运行一次去除命令,不要运行添加图层命令.
附录: 地图鸟瞰图和道路图
carla 的主要地图(Town01-Town07,Town10)都可以在官方找到对应的路网地图:
https://carla.readthedocs.io/en/latest/core_map/#non-layered-maps
Town01
Town02
Town03
Town04
Town05
Town06
Town07
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)