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
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
拉完代码后,你会看到几个关键目录:Unreal、PythonAPI、LibCarla。编译主要分两步:先编译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确实是个体力活,但只要你按照步骤来,别跳步,基本不会出大问题。下一章我们会讲持续集成流水线的搭建,到时候你就可以把编译过程自动化了,再也不用手动敲命令了。