3、环境搭建(Linux):Ubuntu系统要求与依赖安装、从源码编译Carla、常见编译错误与解决方案、验证安装是否成功

好,咱们直接进入正题。这一章是动手干活的第一步——把Carla从源码编译出来。说实话,这一步劝退了很多人。我见过不少同学卡在依赖安装上,一卡就是半天。其实没那么玄乎,只要把环境理清楚,编译就是个时间问题。

3.1 Ubuntu系统要求与依赖安装

先说说系统。Carla官方推荐Ubuntu 18.04或20.04。我个人习惯用20.04,因为18.04的某些库版本太老,编译时容易出幺蛾子。你想想看,一个仿真平台要跑起来,底层依赖少说几十个,版本不对就是连环报错。

硬件方面,我建议至少16GB内存,CPU核心数越多越好。编译时CPU会跑满,我试过8核机器编译一次大概40分钟,4核的话……嗯,你可以先去泡杯咖啡,再刷两集剧。

依赖安装其实就一条命令的事,但要注意顺序。先更新系统包:

sudo apt-get update
sudo apt-get upgrade -y

然后安装Carla官方列出的依赖包。这里我直接贴我常用的脚本,省得你一个一个敲:

sudo apt-get install -y \
    build-essential \
    cmake \
    git \
    python3-dev \
    python3-pip \
    libpng-dev \
    libjpeg-dev \
    libtiff-dev \
    libboost-all-dev \
    libeigen3-dev \
    libgflags-dev \
    libgoogle-glog-dev \
    libhdf5-dev \
    libopenexr-dev \
    libpugixml-dev \
    libsqlite3-dev \
    libssl-dev \
    libxml2-dev \
    libyaml-cpp-dev \
    libzmq3-dev \
    libomp-dev \
    libvulkan-dev \
    libgl1-mesa-dev \
    libglu1-mesa-dev \
    freeglut3-dev \
    libxrandr-dev \
    libxinerama-dev \
    libxcursor-dev \
    libxi-dev
小提示: 如果你用的是Ubuntu 20.04,记得把libboost-all-dev换成libboost1.71-dev。我踩过这个坑,版本不对会导致编译到一半报boost相关错误。

Python依赖也别漏了。Carla的Python API需要这些:

pip3 install --user \
    numpy \
    pygame \
    matplotlib \
    opencv-python \
    networkx \
    scipy \
    pyyaml

这里有个细节——--user参数。我建议用用户级安装,别用sudo pip。为什么呢?因为系统级pip容易和apt包管理器打架,我曾经因为混用导致Python环境崩了,重装了三次系统才长记性。

3.2 从源码编译Carla

依赖装好,接下来就是拉代码。Carla的GitHub仓库比较大,建议用--depth=1只拉最新版本,省时间:

git clone --depth=1 https://github.com/carla-simulator/carla.git
cd carla

拉完代码后,你会看到几个关键目录:UnrealPythonAPILibCarla。编译主要分两步:先编译Carla核心,再编译Python API。

第一步,编译Carla核心:

make setup
make launch

make setup会下载Unreal Engine的依赖和资产包。这一步很慢,因为要下载几十GB的数据。我记得第一次编译时,下载资产包花了将近两个小时。别急,这是正常的。

make launch才是真正的编译过程。它会调用CMake生成构建文件,然后编译整个项目。编译过程中你会看到大量输出,只要不报错就让它跑着。

第二步,编译Python API:

make PythonAPI

这一步相对快一些,几分钟就能搞定。编译完成后,会在PythonAPI/carla/dist目录下生成一个.egg文件,这就是我们要的Python包。

注意: 编译过程中不要中断,否则下次编译可能因为缓存问题报错。如果实在要停,建议用make clean清理后再重新编译。

3.3 常见编译错误与解决方案

编译不出错是不可能的,这辈子都不可能的。我把自己遇到过的典型错误整理了一下,你遇到类似问题可以直接对照解决。

错误信息 原因 解决方案
fatal error: boost/...: No such file or directory Boost库版本不对或未安装 检查libboost-all-dev是否安装,或指定版本安装
Could not find a package configuration file provided by "Vulkan" Vulkan SDK未安装 安装libvulkan-dev,或从LunarG官网下载Vulkan SDK
error: 'std::filesystem' has not been declared GCC版本低于8.0 升级GCC到8.0以上:sudo apt install gcc-8 g++-8
CMake Error at CMakeLists.txt:... (add_subdirectory) 子模块未初始化 执行git submodule update --init --recursive
Out of memory 内存不足 增加swap空间,或减少并行编译任务数:make -j2

这里重点说一下内存不足的问题。编译Carla时,链接阶段会消耗大量内存。我16GB的机器编译时,内存占用经常飙到14GB。如果你只有8GB内存,建议先创建swap:

sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

还有一个坑——Python版本。Carla官方支持Python 3.6到3.8。如果你系统默认Python是3.9或更高,编译Python API时会报错。我曾经在Ubuntu 22.04上试过,Python 3.10直接编译失败。解决方案是用conda创建一个Python 3.8的环境:

conda create -n carla python=3.8
conda activate carla

3.4 验证安装是否成功

编译完成后,怎么知道它能不能用?我一般做三步验证。

第一步,启动Carla服务端:

./CarlaUE4.sh

如果看到Unreal Engine的启动画面,然后出现一个3D场景窗口,说明核心编译成功。第一次启动可能会慢一些,因为要加载资产。

第二步,运行Python客户端示例:

cd PythonAPI/examples
python3 spawn_npc.py

这个脚本会在场景中生成一些车辆和行人。如果能看到车辆在场景中移动,说明Python API也编译成功了。

第三步,检查Python包是否可导入:

python3 -c "import carla; print(carla.__version__)"

如果输出版本号,比如0.9.13,那就万事大吉了。

验证清单:
  • ✅ CarlaUE4.sh 能正常启动并显示3D场景
  • ✅ Python示例脚本能正常运行
  • import carla 不报错
  • ✅ 能通过Python API控制车辆(如设置速度、转向)

嗯,到这里环境搭建就算完成了。说实话,编译Carla确实是个体力活,但只要你按照步骤来,别跳步,基本不会出大问题。下一章我们会讲持续集成流水线的搭建,到时候你就可以把编译过程自动化了,再也不用手动敲命令了。