本专栏教程将记录从安装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

在这里插入图片描述
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐