docs/source__build_carla.md

219 lines
7.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 在ubuntu22.04中以源码的方式编译carla0.9.15
## 前言
简单来说carla其实提供了两个版本。一个是为了给大家提供方便的安装版也就是precompiled版本这个版本安装比较方便即插即用适合在校学生做科研和一些通用的算法验证。另外一个是source build的版本这个版本给开发者提供了更多的想象空间基本上底层的很多东西你都是可以去进行修改的。**而如果你要用C++去进行开发的话那么你就得需要安装source build的版本**。这里的话我会对两个版本的安装方法以及遇到的一些问题都进行一些介绍。
## 安装编译器
```shell
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
```
安装所需要的编译器
```shell
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需要检查相关配置避免在编译期间出现问题**
在终端中输入
```shell
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**
如果版本不对,解决方案如下
```shell
# 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:
![image-20241018105247247](/assert/image-20241018105247247.png)
当通过update-alternatives配置默认的gcc前提是不同版本的gcc 已经使用update-alternatives install进行安装
![image-20241018105548321](/assert/image-20241018105548321.png)
这时候再使用clang++ -v 查看选择的gcc版本 并没有受到影响
## 配置安装Python相关依赖
```shell
# 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
```shell
git clone --depth 1 -b carla https://github.com/CarlaUnreal/UnrealEngine.git
```
克隆这一步网上说了一大堆包括官方还要切换分支之类的根本不需要直接克隆最新的就行因为后面克隆carla源码是也是克隆最新的。这样不会缺少对应的依赖
clone的时候需要验证你的github账户
1. 首先进入[UE官网](https://link.zhihu.com/?target=https%3A//www.unrealengine.com/zh-CN/feed) 和自己的Github账号进行关联。右上角登录过后进入个人/应用与账户。关联上自己的Github账户
2. 需要注意的是git clone UE的过程中需要用github 账户登入但从2021年开始Github不支持这种登入方式需要设置Personal Access Token。设置方法参考[Github - 使用新的Personal Access Token进行仓库认证](https://link.zhihu.com/?target=https%3A//blog.csdn.net/HW140701/article/details/119699169) 。
```shell
cd your/unreaEngin/folder
./Setup.sh && ./GenerateProjectFiles.sh && make
# ./Setup.sh 需要从网上下载依赖大约十几个G中间如果断开可以再次执行已下载不会再重新下载了
# 在你的虚幻根目录
cd Engine/Binaries/Linux && ./UE4Editor
# 第一次运行加载速度很慢
```
设置环境变量, 将虚幻的根目录加到环境变量
```shell
echo "UE4_ROOT=your/unreaEngin/folder" >> ~/.bashrc
source ~/.bashrc
```
## 编译carla
```shell
git clone https://github.com/carla-simulator/carla.git .
```
clone最新的就行不用切换分支。
1. 下载资源,主要是一些蓝图资源。天气,汽车 ,地图之类的,不是很重要,不弄也不影响下面的编译,可以有时间再弄
```shell
./Update.sh # 下载资产
```
2. 编译Python client 和 观众视角(服务器)
```shell
# 不要使用sudo
make PythonAPI
make launch
# 没有先后顺序,一定要保证,前面的虚幻编译成功,并且环境变量设置好,再次检查clang++选择的gcc版本
```
3. 编译cpp依赖库
```shell
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版本
1. 安装python依赖
```shell
pip install carla
```
2. 运行 python 例子保证上述make launch 成功启动了server, 并且在UE界面点击play按钮
如果帧率过低 可在UE Editor界面 设置 Editor->Preference->Performance->uncheck “use less cpu while in background”
## 使用C++编写客户端代码
CMakeLists.txt
```cmake
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)
```