Ubuntu 16.04系统中基于源代码构建自动驾驶模拟器CARLA 0.9.0的方法

严正声明:本文系作者davidhopper原创,未经许可,不得转载。

说明:本文阐述了基于源代码构建CARLA 0.9.0版的方法(本文写作时间2018年8月8日,此时最新版就是该版本) ,构建过程能够成功,但运行模拟器时,场景里面没有车辆和行人,需要使用Python脚本自己添加,而之前的版本只要打开场景则自动添加车辆和行人。经我在发帖询问(见Issue #660)得知,最新的0.9.0版虽然支持多个智能体的训练,但该版本仍然是一个非常不稳定的实验版本,如果不是有特殊需求,建议不要使用,而是改用稳定版0.8.2。但本文阐述的构建方法仍然通用,只是需要替换相关源代码版本。

CARLA是Intel主导开发的一个开源自动驾驶模拟器,基于虚幻引擎(Unreal Engine)实现,是一个不错的仿真环境。CARLA依赖于Ubuntu 16.04或更高版本操作系统。本文介绍Ubuntu 16.04系统中基于源代码构建CARLA 0.9.0的方法。
注意:下载文中涉及的软件及源代码,需要设置代理及国内镜像服务器,可以分别参考我两篇博客:《Ubuntu 16.04系统中代理工具shadowsocks-qt5的使用方法》《使用国内镜像服务器,解决apt-get、pip等安装工具下载依赖包速度慢的问题》

一、安装依赖工具包

使用如下命令安装依赖工具包:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install build-essential clang-5.0 lld-5.0 g++-7 ninja-build python python-pip python-dev tzdata sed curl wget unzip autoconf libtool
sudo pip install setuptools nose2

配置构建CARLA环境的编译工具:

sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-5.0/bin/clang++ 101
sudo update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-5.0/bin/clang 101

二、安装虚幻引擎(Unreal Engine

2.1 注册Unreal Engine账号,并将其连接至你的GitHub账号

虚幻引擎在GitHub上的代码仓库是私有的,需要在网站上注册一个账户,并授权可以访问GitHub网站代码。注册账号的过程就不讲了,大家去官网注册即可。账号注册完毕后,一定要进自己预留的E-mail邮箱,点击激活链接,否则注册无效。此后,再次进入虚幻引擎官网,进入个人账号主页,将Unreal Engine账号连接到自己在GitHub上的账号,连接后同样会有一份邮件发送到你的E-mail邮箱,点击邮件中的链接确认账号绑定,如下图所示:
1
2

账号绑定成功后,就可以在GitHub网站看到Unreal Engine的源代码了:
3

2.2 下载并安装Unreal Engine 4.19.2

使用如下命令下载并安装Unreal Engine(注意:我们使用4.19.2版,因为下文构建CARLA0.9.0需要依赖该版本,如果使用其他更低级版本,我不知道是否会出错,感兴趣的话可以尝试。但我一开始没注意使用最新的4.20.1版,结果就报错了,具体描述见3.6节

# 下载源代码
git clone [email protected]:EpicGames/UnrealEngine.git

# 进入Unreal Engine源代码目录
cd UnrealEngine

# 查看标签列表
git tag --list

# 签出标签4.19.2-release并在本地同步建立4.19.2-release分支
# -b后第一个参数表示分支名,第二个参数表示标签名
# 更新过程时间会比较长
git checkout -b 4.19.2-release 4.19.2-release

# 查看本地分支,确认目前处于4.19.2-release分支
git branch

# 配置编译所需的环境,可能耗时较长,最终出现“SUCCESS”消息
# 配置过程中会弹出一个对话框,需要你确认。
./Setup.sh

# 生成Makefile
./GenerateProjectFiles.sh

# 构建Unreal Engine,编译时间会比较长
make

# 确认已经正确安装了Unreal Engine 4.19.2
./Engine/Binaries/Linux/UE4Editor

在下载和构建过程中,需要获取很多文件,如果你的代理网速不理想,整个过程会耗时漫长(可能超过半天),甚至失败。
如果构建过程中出现编译错误,请参考该文档获取答案。

2.3 设置环境变量

使用vi编辑器打开配置文件~/.bashrc,将如下内容加入到文件末尾:

# Unreal Engine
export UE4_ROOT=~/code/UnrealEngine

操作命令如下:

vi ~/.bashrc
source ~/.bashrc

三、安装CARLA模拟器

3.1 下载CARLA源代码

使用如下命令下载CARLA源代码:

# 下载源代码
git clone [email protected]:carla-simulator/carla.git
# 进入CARLA源代码目录
cd carla
# 查看标签列表
git tag --list
# 签出最新的稳定版0.9.0并在本地同步建立0.9.0分支
# -b后第一个参数表示分支名,第二个参数表示标签名
git checkout -b 0.9.0 0.9.0
# 查看本地分支,确认目前处于0.9.0分支
git branch

如果不是天朝伟大的墙,基于源代码安装CARLA是一件很简单的事,使用命令./Update.shmake launch即可,但由于脚本./Update.sh需要从美国服务器下载一个2.9 GB的依赖文件:Content_0.9.0.tar.gz,因此要想在命令行内下载,几乎是一个不可能完成的任务(见我发的一个问题帖:Issue #652)。于是我们另辟蹊径,使用下载工具uGet手动下载安装,当然使用下载工具时,同样需要使用代理,如果没有代理,仍然不能顺利完成下载。

3.2 安装下载工具uGet

使用如下命令安装uGet:

sudo add-apt-repository ppa:plushuang-tw/uget-stable
sudo apt update
sudo apt install uget

在命令行内输入如下命令打开uGet

uget-gtk

或者在图形化界面中通过如下方法搜索并打开uGet
4

3.3 通过uGet下载依赖文件:Content_0.9.0.tar.gz

打开uGet,新建下载任务,下载链接根据源代码文件carla/Util/ContentVersions.txt中的描述(如下所示)确定,记住我们要下载0.9.0版对应的依赖文件:Content_0.9.0.tar.gz
注意:使用uGet下载依赖文件时不能直接使用文档中的链接,而必须使用浏览器打开,等浏览器开始下载后的链接才是真正下载链接。因为该链接每天都发生变化,所以这里无法直接给出。
下载时,uGet使用SOCK v5代理,代理服务器为127.0.0.1,端口为1080Max Connections可根据实际情况适当增大到5~10。因为该文件不支持断点续传,有可能要下载几次才能成功。

Here we keep a list of the Google Drive id's of the Content files. The last id
in the list it's picked up by the Setup.sh script to download the last version
of the contents.

You can direct download with https://drive.google.com/open?id=PUT_FILE_ID_HERE

0.5.4: 0B2HFV-VuKn3PYUFFanlmZ2VMTW8
0.6.0: 1Gw8sw01hDEV4FtpHEZZwvS-6XN0jmaLT
0.7.0: 11PKC_lG7L80L1ZxiMlzV17utU45UcRnT
0.7.1: 1gf3YaFIjwr1EaK6qxq2V-a510Brt9Imq
0.8.0: 1tA-WwKA0RNhBoENYunqF3-F_wg11dL86
0.8.1: 1su5wQH7KJphAcirMA8VEDLndGigQ9tzq
0.8.2: 1llrBkZDvJmxXYh4r3jz0wuwz8Q8jRQeZ
0.8.3: 1z2XKOk9LoKI-EhxcrpI31W5TeYo2-jjn
0.8.4: 1mFNS-w5atQ45yegiTepRIeKBYVm8N8He
0.9.0: 1FtC00CrDb7Kz5StBAwb6vqOGbzZtpROx

For example, the link to 0.9.0 would be https://drive.google.com/open?id=1FtC00CrDb7Kz5StBAwb6vqOGbzZtpROx

5

3.4 升级CMake到3.9.0以上版本

CMake官网下载最新版cmake-3.12.0.tar.gz,使用如下命令,升级安装CMake

# 进入下载目录
cd ~/Downloads/
# 解压文件cmake-3.12.0.tar.gz
tar xzvf cmake-3.12.0.tar.gz
# 进入cmake目录
cd cmake-3.12.0/
# 生成Makefile
./configure 
# 编译cmake
make -j 8
# 安装cmake,默认安装目录为/usr/local/bin
sudo make install
# 建立到/usr/bin/cmake的符号链接
sudo ln -s /usr/local/bin/cmake /usr/bin/cmake
# 检查cmake是否已升级到最新的3.12.0版
cmake --version

3.5 构建CARLA 0.9.0

使用如下命令构建CARLA 0.9.0

# 进入~/code/carla/Unreal/CarlaUE4/Content/Carla目录
cd ~/code/carla/Unreal/CarlaUE4/Content/Carla

# 将Content_0.9.0.tar.gz解压到当前目录,~/Downloads是源文件存放目录
tar xzvf ~/Downloads/Content_0.9.0.tar.gz

# 回CARLA源代码根目录
cd ~/code/carla

# 清除上次编译信息
make clean

# 更新配置信息,注意一定要加-s选项,不然会一直去下载依赖文件Content_0.9.0.tar.gz,
# 而在国内又连不上网,等待很长一段时间后会报网络连接错误
./Update.sh -s

# 构建CARLA,并在UE4Editor中启动CARLA
# 因为make程序又会从网上下载依赖包,而由于墙的原因,自然又无法下载。
# 我实在没办法了,只有借助proxychains在命令行中使用代理下载
# 关于proxychains的安装使用,请见我的博客:
# https://blog.csdn.net/davidhopper/article/details/78883450
# 第六节内容
# 注意:在命令行中使用代理非常不稳定,不到万不得已,尽可能不用
# 如果下载数据出错,一是确认代理已开,二是多次重复执行下述命令
# 如果依赖文件已经下载完毕,就可以直接执行make launch
proxychains make launch

# 构建可单独运行的CARLA模拟器
make package

最后如果出现如下启动界面,表明CARLA 0.9.0已经顺利构建完成:
6
7

3.6 构建CARLA 0.9.0时可能出现的错误

3.6.1 UnrealHeaderTool failed for target 'CarlaUE4Editor'错误

在构建过程中如果出现如下错误:

Error: UnrealHeaderTool failed for target 'CarlaUE4Editor' (platform: Linux, module info: /home/davidhopper/code/carla/Unreal/CarlaUE4/Intermediate/Build/Linux/B4D820EA/CarlaUE4Editor/Development/CarlaUE4Editor.uhtmanifest, exit code: OtherCompilationError (5)).
Makefile:620: recipe for target 'CarlaUE4Editor' failed
make[1]: *** [CarlaUE4Editor] Error 5
make[1]: Leaving directory '/home/davidhopper/code/carla/Unreal/CarlaUE4'
Util/BuildTools/Linux.mk:9: recipe for target 'launch' failed
make: *** [launch] Error 2

8
这是因为CARLA 0.9.0不支持Unreal Engine 4.20以上版本造成,使用如下命令可以查看UE4Editor版本:

cd ~/code/UnrealEngine/Engine/Binaries/Linux
./UE4Editor

7
如上图所示,启动界面显示的UE4Editor版本是4.20.1,表明安装的Unreal Engine版本过高,需重新安装。退出该程序,执行如下命令重新安装Unreal Engine

# 进入Unreal Engine目录
cd ~/code/UnrealEngine

# 查看当前有几个分支,一般默认会有release分支
git branch

# 切换到4.9.2-release分支以外的其他分支,我切换到release分支
git checkout release

# 删除原有4.9.2-release分支
git branch -d 4.19.2-release

# 签出标签4.19.2-release并在本地同步建立4.19.2-release分支
# 更新过程时间会比较长
git checkout -b 4.19.2-release 4.19.2-release

# 配置编译所需的环境,耗时很长,最终出现“SUCCESS”消息
./Setup.sh

# 生成Makefile
./GenerateProjectFiles.sh

# 清除原有编译
make ARGS=-clean

# 构建Unreal Engine,编译时间会比较长
make

# 确认已经正确安装了Unreal Engine 4.19.2
./Engine/Binaries/Linux/UE4Editor

然后执行如下命令继续构建CARLA

cd ~/code/carla
make clean
make launch

3.6.2 找不到libboost_python27.a错误

使用命令package构建可单独运行的CARLA模拟器时,出现如下错误:

x86_64-linux-gnu-gcc: error: /home/davidhopper/code/carla/PythonAPI/dependencies/lib/libboost_python27.a: No such file or directory
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
Util/BuildTools/Linux.mk:47: recipe for target 'PythonAPI' failed
make: *** [PythonAPI] Error 1

8
这是由于Python版本不正确导致,CARLA模拟器源代码默认提供的是基于Python 3.5版的第三方库文件 libboost_python35.a,而我当前使用了Python 2.7。于是,需要修改系统当前使用的Python版本,操作方法见我的博客《Ubuntu 16.04安装tensorflow_gpu 1.9.0的方法》第2.1节内容。为完整起见,下面也给出简单的操作过程:

python -V
sudo update-alternatives --config python
python -V

9
然后重新执行下述编译指令:

make clean
make package

四、使用CARLA模拟器

4.1 启动CARLA模拟器

基于源代码构建CARLA模拟器后,启动方式比较奇葩,使用Ctrl+Alt+T打开一个终端,执行如下命令:

cd ~/code/carla
make launch-only 

如果不怕麻烦,也可以切换到UE4Editor目录,执行如下命令打开:

cd ~/code/UnrealEngine/Engine/Binaries/Linux
./UE4Editor ~/code/carla/Unreal/CarlaUE4/CarlaUE4.uproject

键盘操作说明如下:

W            : throttle 油门
S            : brake 刹车
AD           : steer 方向盘
Q            : toggle reverse 切换倒档
Space        : hand-brake 手刹

P            : toggle autopilot 切换自动驾驶

Arrow keys   : move camera 移动相机
PgUp PgDn    : zoom in and out 放大与缩小
mouse wheel  : zoom in and out 放大与缩小
Tab          : toggle on-board camera 切换车载相机

R            : restart level 重启级别
G            : toggle HUD 切换抬头显示,即在前档玻璃上显示数字信息
C            : change weather/lighting 改变天气/照明

Enter        : jump 跳跃
F            : use the force 使用暴力

F11          : toggle fullscreen 切换全屏
Alt+F4       : quit 退出

4.2 切换CARLA模拟器使用的街景地图

目前提供Town01Town01_BuiltDataTown02testmaptruck等四种街景地图,执行如下命令指定地图:

cd ~/code/UnrealEngine/Engine/Binaries/Linux
# 将Town01替换为Town01_BuiltData、Town02、testmaptruck可切换不同的街景地图
./UE4Editor ~/code/carla/Unreal/CarlaUE4/CarlaUE4.uproject /Game/Carla/Maps/Town01

4.3 将CARLA模拟器作为服务器运行

可以将CARLA模拟器作为服务器运行,这样就可以在客户端连接他,测试深度强化学习算法了。使用Ctrl+Alt+T打开一个终端,执行如下命令:

cd ~/code/UnrealEngine/Engine/Binaries/Linux
# 使用800X600的小视窗,一方面节约资源,另一方面可观察游戏效果
./UE4Editor ~/code/carla/Unreal/CarlaUE4/CarlaUE4.uproject /Game/Carla/Maps/Town01 -carla-server -benchmark -fps=15 -windowed -ResX=800 -ResY=600

4.4 配置CARLA模拟器默认是否以服务器模式运行

使用vi编辑器打开配置文件Unreal/CarlaUE4/Config/CarlaSettings.ini

cd ~/code/carla

# 如果配置文件Unreal/CarlaUE4/Config/CarlaSettings.ini不存在,则先复制一个
cp Docs/Example.CarlaSettings.ini Unreal/CarlaUE4/Config/CarlaSettings.ini

# 修改配置文件Unreal/CarlaUE4/Config/CarlaSettings.ini
vi Unreal/CarlaUE4/Config/CarlaSettings.ini

修改如下配置项,true表示以服务器模式运行,false表示以单机形式运行。

[CARLA/Server]
UseNetworking=false

然后按照4.1节操作,重启CARLA模拟器。

猜你喜欢

转载自blog.csdn.net/davidhopper/article/details/81485872