3. 源码编译与安装:从GitHub拉取源码、编译配置、常见编译错误解决
好,到了这一步,说明你已经把CARLA的依赖环境搞定了。接下来就是真刀真枪地拉代码、编译。说实话,这一步是劝退很多人的地方。我自己第一次编译的时候,也折腾了两天才跑起来。别怕,我把踩过的坑都给你标出来。
3.1 从GitHub拉取源码
CARLA的源码托管在GitHub上,地址是:https://github.com/carla-simulator/carla。我个人习惯用SSH方式拉取,省得每次输密码。如果你还没配SSH key,用HTTPS也行。
# 克隆主仓库
git clone https://github.com/carla-simulator/carla.git
# 进入目录
cd carla
# 切换到我们需要的版本,比如0.9.14
git checkout tags/0.9.14 -b carla-0.9.14
嗯,这里要注意:不要直接拉master分支。master是开发分支,可能不稳定。我建议你选一个release版本,比如0.9.13或0.9.14,这些经过社区验证,坑少很多。
README.md 里的编译说明。CARLA每个大版本的编译步骤可能略有不同,别想当然。
3.2 编译配置详解
CARLA的编译系统用的是CMake + Make。但你别直接敲 cmake ..,它有一套自己的脚本。核心脚本就两个:Setup.sh 和 Makefile。
3.2.1 运行Setup脚本
这个脚本会下载CARLA依赖的资产文件(比如地图、车辆模型),大概有2-3个G。我第一次跑的时候以为卡死了,其实是在后台下载。
# 下载核心资产
./Update.sh
# 安装Python依赖
pip install -r PythonAPI/examples/requirements.txt
3.2.2 编译CARLA核心
接下来就是编译本体。CARLA提供了几个Make目标,我列个表给你看:
| Make目标 | 说明 | 耗时(参考) |
|---|---|---|
make launch |
仅编译CARLA服务器端 | 约30-60分钟 |
make PythonAPI |
仅编译Python API | 约10-20分钟 |
make package |
编译全部并打包成可分发版本 | 约1-2小时 |
我个人建议第一次编译用 make launch,先跑起来再说。等后面熟悉了,再搞 make package。
# 开始编译(在CARLA根目录)
make launch -j4
-j4 表示用4个线程并行编译。你可以根据CPU核心数调整,比如8核CPU可以用 -j8。但别贪多,我试过 -j16,结果内存爆了,编译直接崩掉。
3.3 常见编译错误与解决方案
编译不出错?那是不可能的。我把最常见的几个错误和解决办法列出来,你遇到了直接对照着修。
3.3.1 错误一:UE4引擎找不到
报错信息: Could not find UE4 installation
原因: CARLA基于Unreal Engine 4,编译时需要知道UE4的路径。
解决办法:
# 设置UE4根目录环境变量
export UE4_ROOT=/home/你的用户名/UnrealEngine/4.26
# 或者直接写到 ~/.bashrc 里,一劳永逸
echo 'export UE4_ROOT=/home/你的用户名/UnrealEngine/4.26' >> ~/.bashrc
source ~/.bashrc
3.3.2 错误二:Python版本冲突
报错信息: Python version mismatch 或 Could NOT find PythonLibs
原因: 系统里装了多个Python版本,CMake找错了。
解决办法:
# 明确指定Python版本
cmake -DPYTHON_EXECUTABLE=/usr/bin/python3.8 ..
# 或者用虚拟环境
python3.8 -m venv carla_env
source carla_env/bin/activate
pip install --upgrade pip
嗯,这里有个细节:CARLA 0.9.14 要求Python 3.8。如果你用Python 3.10,编译PythonAPI时会报错。我建议你专门为CARLA建一个Python 3.8的虚拟环境。
3.3.3 错误三:编译过程中内存不足
报错信息: fatal error: Killed signal terminated program cc1plus
原因: 编译UE4的C++代码非常吃内存,尤其是链接阶段。
解决办法:
- 减少并行编译线程数:把
-j4改成-j2甚至-j1 - 增加交换空间:
sudo fallocate -l 8G /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile - 关闭其他占用内存的程序(浏览器、IDE等)
3.3.4 错误四:OpenGL/显卡驱动问题
报错信息: Failed to create OpenGL context 或 libGL error
原因: 显卡驱动没装好,或者CUDA版本不匹配。
解决办法:
# 检查显卡驱动
nvidia-smi
# 如果没输出,重新安装驱动
sudo apt install nvidia-driver-470
# 检查OpenGL版本
glxinfo | grep "OpenGL version"
说白了,CARLA的渲染依赖OpenGL 4.5以上。如果你用的是虚拟机或者远程服务器,可能没有物理GPU,那就只能跑无渲染模式(off-screen mode)。
3.4 编译成功后的验证
编译完成后,你会看到类似这样的输出:
[100%] Built target CarlaUE4
[100%] Built target PythonAPI
这时候别急着高兴,先验证一下能不能跑:
# 启动CARLA服务器
./CarlaUE4.sh -quality-level=Low
# 另开一个终端,运行Python示例
cd PythonAPI/examples
python3 spawn_npc.py -n 10
如果能看到车辆在街道上行驶,恭喜你,编译成功了!
-quality-level=Low 是调试时的最佳选择。等后面调通了再开高画质。
3.5 知识体系总览
我把这一章的核心逻辑画成了流程图,方便你对照着操作:
这张图把整个流程串起来了。你从拉取源码开始,一步步往下走。如果编译出错,就到下面的错误处理区找对应方案。说白了,编译这事就是个耐心活,别急,慢慢来。