安装CARLA模拟器

前言

CARLA是Nvidia开发的一款面向自动驾驶的模拟器,本文记录在Ubuntu服务器上安装CARLA模拟器的流程,文章在Ubuntu 20.04和Ubuntu 16.04上实验,安装CARLA 0.9.14版本。

CARLA for Ubuntu 20.04

官方的下载安装教程可以参考Quick start package installation,本文对该教程进行复述,附带部分遇到的问题和解决方案。

1. 下载CARLA模拟器

官方提供两种方式下载CARLA:Debian和 Package。

Debian

Debian下载方式支持Ubuntu 18.04 和 Ubuntu 20.04,该方式下载CARLA发布的Ubuntu软件安装包,安装在/opt/carla-simulator目录下。该下载方式需要root权限,而在一般的实验室服务器上,普通用户并无root权限,因此本文未测试该方法。这里提供官方的下载指令以供参考。

1
2
3
4
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1AF1527DE64CB8D9
sudo add-apt-repository "deb [arch=amd64] http://dist.carla.org/carla $(lsb_release -sc) main"
sudo apt update
sudo apt install carla-simulator # 安装 CARLA 0.9.10+ 的所有版本 或者 carla-simulator=0.9.14-1 只安装面向Ubuntu的0.9.14版本

Package

Package下载方式只区分Ubuntu和Winodws。该下载方式不需要root权限,只需在GitHub下载编译后的文件包,解压即可。

Downlaod下载需求版本的编译后文件包,每个版本中,打有Ubuntu标签的有3个包,第一个CARLA_{version_number}.tar.gz是我们需要的。

1
2
3
4
5
[Ubuntu] CARLA_0.9.14.tar.gz
[Ubuntu] AdditionalMaps_0.9.14.tar.gz
[Ubuntu] CARLA_0.9.14_RSS.tar.gz
[Windows] CARLA_0.9.14.zip
[Windows] AdditionalMaps_0.9.14.zip

以CARLA 0.9.14为例,下载安装包到服务器

1
wget https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/CARLA_0.9.14.tar.gz

解压安装包的服务器某文件

1
tar -zxvf CARLA_0.9.14.tar.gz -C /path/to/carla-simulator/

2. 导入额外的资源

Downlaod下载需求版本的资源包,第二个AdditionalMaps_{version_number}.tar.gz

以CARLA 0.9.14为例,下载额外资源包

1
wget https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/AdditionalMaps_0.9.14.tar.gz

将下载后的额外资源包移动到CARLA模拟器根目录的Import文件夹内(通过Debian方式下载的模拟器根目录为/opt/carla-simulator

1
mv AdditionalMaps_0.9.14.tar.gz /path/to/carla-simulator/Import/

导入额外资源包

1
2
cd /path/to/carla-simulator
./ImportAssets.sh

3. 下载CARLA客户端

针对0.9.12+版本的模拟器,官方提供了3种方式:.egg,.whl,Downloadable Python Package,文章测试了后两种。

.whl

/path/to/carla-simulator/PythonAPI/carla/dist/目录下寻找有无适合版本的 .whl文件。如carla-0.9.14-cp37-cp37m-manylinux_2_27_x86_64.whl表示适合Python 3.7版本,Linux的.whl文件。

如果没有找到合适的版本可以去PyPI网站的carla安装包下载页面下载。例如:下载carla 0.9.14版本针对Python 3.8的安装包

1
wget https://files.pythonhosted.org/packages/c1/a2/6e172f2cc17e6ad9f9853f18dd4f99c5d05d5a241ce2ba4a2daa73eff695/carla-0.9.14-cp38-cp38-manylinux_2_27_x86_64.whl

下载完成之后,需要修改文件名为符合pip命名规范的安装包,才能正常安装(这里建议安装前升级pip)。

1
2
3
mv carla-0.9.14-cp38-cp38-manylinux_2_27_x86_64.whl carla-0.9.14-cp38-cp38-manylinux1_x86_64.whl
pip install --upgrade pip
pip install carla-0.9.14-cp38-cp38-manylinux1_x86_64.whl

这里pip安装包命名规范查看命令为:

1
pip debug --verbose

如果没有找到安装包,可以从源码编译

Downloadable Python Package

直接使用pip下载。

1
pip install carla

文章测试了下,这种方式最多只能安装0.9.5版本。

4. 运行CARLA服务端

1
2
cd /path/to/carla-simulator
./CarlaUE4.sh

运行CARLA服务端的一些常用参数

1
2
3
4
5
./CarlaUE4.sh -RenderOffScreen # 无屏幕渲染
./CarlaUE4.sh -carla-rpc-port=N # 指定服务端连接端口为N(默认2000),数据流端口为N+1
./CarlaUE4.sh -carla-streaming-port=N # 指定数据流端口为N。N=0表示随机获得一个未被使用的端口。
./CarlaUE4.sh -quality-level={Low,Epic} # 改变渲染精度(默认Epic),Low将不渲染阴影,限定光线计算在50m内
./CarlaUE4.sh -graphicsadapter=GPU_ID # 指定GPU ID运行,Carla的GPU ID从1开始计数(默认为1,如果在第一个GPU上训练,不用指定该参数)

CARLA 相关的代码、文档和学习资源

Document Home

First Step

CARLA Source Code

其他尝试案例和问题记录

Ubuntu 20.04

Q: 在运行./CarlaUE4.sh时出现

1
error while loading shared libraries: libomp.so.5: cannot open shared object file: No such file or directory

A: 联系服务器管理员,下载libomp5

1
sudo apt install libomp5

Q: 在运行./CarlaUE4.sh时出现

1
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0 ../src/intel/isl/isl.c:2105: FINISHME: ../src/intel/isl/isl.c:isl_surf_supports_ccs: CCS for 3D textures is disabled, but a workaround is available.

A: 添加VK_ICD_FILENAMES~/.bashrc文件。

1
export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/nvidia_icd.json"

Q: 在运行./CarlaUE4.sh时出现

1
WARNING: lavapipe is not a conformant vulkan implementatio , testing use only.

A:在第一个GPU上训练时,去掉GPU指定参数-graphicsadapter=GPU_ID

Ubuntu 16.04

Q: 安装与Ubuntu 20.04相似的方式安装,在运行./CarlaUE4.sh时出现

1
/lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found

A: 暂无好的解决方案,Ubuntu 16.04的glibc版本为2.23,建议切换到Ubuntu 18.04/Ubuntu 20.04。文章这里下载glibc-2.27源码编译后,没能运行成功,而且Ubuntu的Shell指令如ls也崩溃了。

1
ldd --verison # 检查glibc版本

从源码安装glibc(glibc-2.27为例)

1
2
3
4
5
6
7
8
9
wget https://ftp.gnu.org/gnu/glibc/glibc-2.27.tar.gz
tar -zxvf glibc-2.27.tar.gz
cd glibc-2.27
mkdir build
cd
../configure --prefix=/path/to/glibc-install # 配置make下载地址
make
make install
export LD_LIBRARY_PATH=/path/to/glibc-install/lib:$LD_LIBRARY_PATH # 添加该句到~/.bashrc以声明库路径

Ubuntu 16.04 从源码编译

按照源码编译教程,编译,并未成功。
问题记录如下

Q: 在make PythonAPI时出现libproj包编译问题

1
2
3
....../PythonAPI/carla/dependencies/lib/libproj.a(geodesic.c.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
....../anaconda3/envs/carla/compiler_compat/ld: failed to set dynamic section sizes: bad value
collect2: error: ld returned 1 exit status

A: 按照Carala GitHUb Issue并未解决。相关Issue: Additional Python API in pre-build carla package