docs/source__build_carla.md
2024-10-18 11:37:00 +08:00

7.5 KiB
Raw Blame History

在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:

image-20241018105247247

当通过update-alternatives配置默认的gcc前提是不同版本的gcc 已经使用update-alternatives install进行安装

image-20241018105548321

这时候再使用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账户

  1. 首先进入UE官网 和自己的Github账号进行关联。右上角登录过后进入个人/应用与账户。关联上自己的Github账户
  2. 需要注意的是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最新的就行不用切换分支。

  1. 下载资源,主要是一些蓝图资源。天气,汽车 ,地图之类的,不是很重要,不弄也不影响下面的编译,可以有时间再弄
./Update.sh  # 下载资产
  1. 编译Python client 和 观众视角(服务器)

    # 不要使用sudo
    make PythonAPI
    make launch 
    # 没有先后顺序,一定要保证,前面的虚幻编译成功,并且环境变量设置好,再次检查clang++选择的gcc版本 
    
  2. 编译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=./ 
    # 说明
    # -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依赖

    pip install carla
    
  2. 运行 python 例子保证上述make launch 成功启动了server

使用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)