7.6 KiB
在ubuntu22.04中以源码的方式编译carla0.9.15
前言
简单来说,carla其实提供了两个版本。一个是为了给大家提供方便的安装版,也就是precompiled版本,这个版本安装比较方便,即插即用,适合在校学生做科研和一些通用的算法验证。另外一个是source build的版本,这个版本给开发者提供了更多的想象空间,基本上底层的很多东西你都是可以去进行修改的。而如果你要用C++去进行开发的话,那么你就得需要安装source build的版本。
安装编译器
sudo apt-get update &&
sudo apt-get install wget software-properties-common &&
sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add
安装所需要的编译器
sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu focal main universe"
sudo apt-get update
sudo apt-get install build-essential clang-10 lld-10 g++-7 cmake ninja-build libvulkan1 python python3 python3-dev python3-pip libpng-dev libtiff5-dev libjpeg-dev tzdata sed curl unzip autoconf libtool rsync libxml2-dev git git-lfs
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-10/bin/clang++ 180 &&
sudo update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-10/bin/clang 180 &&
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 180
注意,如果电脑上安装了多个版本的gcc,需要检查相关配置,避免在编译期间出现问题
在终端中输入
clang++ -v
-----------------------------
# 以下是显示的结果
clang version 10.0.0-4ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0 # 这一行要注意
Candidate multilib: .;@m64
Selected multilib: .;@m64
编译carla使用的是gcc-7 ,所以一定要确保clang++ 选择的gcc版本是7/7.50
如果版本不对,解决方案如下
# clang++ 或者clang 默认会选择目录(/usr/lib/gcc/x86_64-linux-gnu)下版本最高的gcc
# 我没有找到其它方法来让他改变选择的gcc版本,最简单粗暴得方法就是把其他版本的gcc删除或者移动到其他目录,让7版本是最高的版本
注意
当你通过 update-alternatives 切换到不同版本的 GCC 时,它仅影响 GCC 和 G++ 的命令。clang++ 是一个独立的编译器,它在执行时会查找系统上安装的 GCC 版本以进行某些操作,但并不会受到 update-alternatives 的影响。因此,clang++ 显示的 GCC 版本仍然是它在编译时找到的版本。影响的仅是在使用gcc时,默认选择你设置的gcc的版本,eg:
当通过update-alternatives配置默认的gcc(前提是不同版本的gcc 已经使用update-alternatives install进行安装)
这时候再使用clang++ -v 查看选择的gcc版本 并没有受到影响
配置安装Python相关依赖
# For Python 3
pip3 -V
pip3 install --upgrade pip
# For Python 2
pip -V
pip install --upgrade pip
pip install --user setuptools &&
pip3 install --user -Iv setuptools==47.3.1 &&
pip install --user distro &&
pip3 install --user distro &&
pip install --user wheel &&
pip3 install --user wheel auditwheel==4.0.0
编译unreaEngine
git clone --depth 1 -b carla https://github.com/CarlaUnreal/UnrealEngine.git
克隆这一步网上说了一大堆,包括官方,还要切换分支之类的,根本不需要,直接克隆最新的就行,因为后面克隆carla源码是也是克隆最新的。这样不会缺少对应的依赖,也能保证仿真服务器和客户端版本一致
clone的时候需要验证你的github账户
- 首先进入UE官网 和自己的Github账号进行关联。右上角登录过后进入:个人/应用与账户。关联上自己的Github账户;
- 需要注意的是git clone UE的过程中需要用github 账户登入,但从2021年开始Github不支持这种登入方式,需要设置Personal Access Token。设置方法参考:Github - 使用新的Personal Access Token进行仓库认证 。
cd your/unreaEngin/folder
./Setup.sh && ./GenerateProjectFiles.sh && make
# ./Setup.sh 需要从网上下载依赖,大约十几个G,中间如果断开,可以再次执行,已下载不会再重新下载了
# 在你的虚幻根目录
cd Engine/Binaries/Linux && ./UE4Editor
# 第一次运行加载速度很慢
设置环境变量, 将虚幻的根目录加到环境变量
echo "UE4_ROOT=your/unreaEngin/folder" >> ~/.bashrc
source ~/.bashrc
编译carla
git clone https://github.com/carla-simulator/carla.git .
clone最新的就行,不用切换分支。
- 下载资源,主要是一些蓝图资源。天气,汽车 ,地图之类的,不是很重要,不弄也不影响下面的编译,可以有时间再弄
./Update.sh # 下载资产
-
编译Python client 和 观众视角(服务器)
# 不要使用sudo make PythonAPI make launch # 没有先后顺序,一定要保证,前面的虚幻编译成功,并且环境变量设置好,再次检查clang++选择的gcc版本
-
编译cpp依赖库
cd carla/root mkdir build # 名字自定义 cd build cmake \ -G "Ninja" \ -DCMAKE_BUILD_TYPE=Client \ -DLIBCARLA_BUILD_RELEASE=ON \ -DLIBCARLA_BUILD_DEBUG=OFF \ -DLIBCARLA_BUILD_TEST=OFF \ -DCMAKE_TOOLCHAIN_FILE=../Examples/CppClient/ToolChain.cmake \ -DCMAKE_INSTALL_PREFIX=../carlalib \ .. # 说明 # -DCMAKE_INSTALL_PREFIX 编译好后,库文件和头文件的安装目录 自由指定 # -DLIBCARLA_BUILD_RELEASE=ON -DLIBCARLA_BUILD_DEBUG=OFF 指定编译模式 ninja cmake --install . # 如果没有在上述cmake命令中指定CMAKE_INSTALL_PREFIX # cmake --install . --prefix your/install/folder
运行PythonAPI中实例Python代码(可选)
calar中使用的是python 3.7 如果安装了其他版本的python,需要使用conda切换python版本
-
安装python依赖
pip install carla
-
运行 python 例子(保证上述make launch 成功启动了server, 并且在UE界面点击play按钮)
如果帧率过低 可在UE Editor界面 设置 Editor->Preference->Performance->uncheck “use less cpu while in background”
使用C++编写客户端代码
CMakeLists.txt
cmake_minimum_required(VERSION 3.26)
project(test) # your project name
set(CMAKE_CXX_STANDARD 14)
# 替换成自己下载的路径
set(CARLA_LIB "$ENV{HOME}/Desktop/carla_lib")
add_executable(${PROJECT_NAME}
main.cpp)
target_include_directories(${PROJECT_NAME} PRIVATE ${CARLA_LIB}/include)
target_link_directories(${PROJECT_NAME} PRIVATE ${CARLA_LIB}/lib)
target_compile_options(${PROJECT_NAME} PRIVATE -isystem ${CARLA_LIB}/include/system)
target_link_libraries(${PROJECT_NAME} PRIVATE
-Wl,-Bstatic -lcarla_client -lrpc -lboost_filesystem -Wl,-Bdynamic
-lpng
-ltiff
-ljpeg
-lRecast
-lDetour
-lDetourCrowd -pthread)