1. 项目概述
在自动驾驶和仿真测试领域,CARLA作为开源仿真平台已经成为行业标准工具之一。最近我在Ubuntu 22.04系统上完成了CARLA 0.9.16版本的源码编译工作,整个过程涉及大量依赖项管理和编译参数调优。与直接使用预编译版本相比,源码编译能获得更好的性能优化和定制灵活性,特别适合需要深度二次开发的团队。
这个版本虽然已经不是最新,但在很多实际项目中仍然被广泛使用,主要因为其稳定性和成熟的API接口。本文将详细记录从环境准备到最终编译成功的完整过程,重点分享那些官方文档没有明确说明的"坑"和解决方案。
2. 环境准备与依赖安装
2.1 系统基础环境配置
推荐使用Ubuntu 22.04.3 LTS版本,这是一个长期支持版本,系统稳定性有保障。在开始前需要确保:
- 系统已安装最新更新:
sudo apt update && sudo apt upgrade -y磁盘空间至少预留150GB(源码编译会产生大量中间文件)
内存建议16GB以上,8GB内存编译某些组件时可能会因OOM失败
注意:如果在WSL2环境下编译,需要特别处理显卡驱动问题,建议优先使用物理机或完整虚拟机环境
2.2 核心依赖项安装
CARLA的编译依赖可以分为几个大类,我们需要分别处理:
基础编译工具链:
sudo apt install -y build-essential clang-14 lld-14 g++-10 cmake ninja-buildPython环境:CARLA 0.9.16主要支持Python 3.7,但Ubuntu 22.04默认是Python 3.10,我们需要使用pyenv管理多版本:
curl https://pyenv.run | bash exec $SHELL pyenv install 3.7.13 pyenv global 3.7.13图形和物理引擎依赖:
sudo apt install -y libomp-dev libgl1-mesa-dev libglu1-mesa-dev \ libxinerama-dev libxcursor-dev libxi-dev libxrandr-dev \ libbullet-dev libopenscenegraph-dev2.3 特殊依赖处理
有几个关键依赖需要特别注意:
- Unreal Engine 4.26:CARLA 0.9.16需要特定版本的UE4引擎
git clone --depth=1 -b 4.26 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.26 cd ~/UnrealEngine_4.26 ./Setup.sh && ./GenerateProjectFiles.sh && make- rpclib:需要特定版本v2.3.0
git clone -b v2.3.0 --recurse-submodules https://github.com/rpclib/rpclib.git cd rpclib mkdir build && cd build cmake .. && make -j$(nproc) sudo make install3. 源码获取与预处理
3.1 获取CARLA源码
建议从官方GitHub仓库获取0.9.16版本源码:
git clone -b 0.9.16 --recurse-submodules https://github.com/carla-simulator/carla.git cd carla3.2 源码结构调整
CARLA的编译系统有一些特殊要求,需要进行以下调整:
- 创建符号链接确保UnrealEngine路径正确:
ln -s ~/UnrealEngine_4.26 UnrealEngine- 修改CMakeLists.txt中的Python路径:
# 在CMakeLists.txt中添加 set(PYTHON_EXECUTABLE "$(pyenv which python)")- 更新子模块:
git submodule update --init --recursive4. 编译过程详解
4.1 客户端编译
客户端是CARLA的主要Python API接口,编译命令如下:
make PythonAPI这个阶段常见问题及解决方案:
- 报错:找不到Python.h
sudo apt install python3.7-dev- 报错:numpy版本不兼容
pip install numpy==1.19.34.2 服务端编译
服务端是CARLA的仿真核心,基于Unreal Engine:
make launch这个阶段需要特别注意:
- 首次编译会下载大量资源,建议保持网络稳定
- 编译过程可能持续2-4小时(取决于硬件配置)
- 如果失败,可以尝试:
make clean make launch -j$(nproc)4.3 特殊组件编译
CARLA还有一些可选组件需要单独处理:
ROS桥接:
make ROS2场景生成工具:
make rebuild-editor5. 常见问题与解决方案
5.1 编译时内存不足
症状:编译过程中进程被杀死,系统日志显示OOM
解决方案:
- 增加swap空间:
sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile- 限制并行编译线程数:
make launch -j45.2 UE4编辑器崩溃
症状:运行make launch时UE4编辑器闪退
可能原因及解决:
- 显卡驱动问题:
sudo ubuntu-drivers autoinstall- Vulkan兼容性问题:
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json5.3 Python API导入错误
症状:import carla时报找不到模块
解决方案:
- 确保Python环境一致:
pyenv global 3.7.13- 重新生成Python接口:
make clean make PythonAPI6. 性能优化建议
6.1 编译参数优化
在Makefile中添加:
CFLAGS += -march=native -O3 CXXFLAGS += -march=native -O36.2 运行时优化
编辑Config/DefaultEngine.ini:
[ConsoleVariables] r.VSync=0 r.ScreenPercentage=1006.3 资源管理
建议定期清理中间文件:
make clean rm -rf Build/7. 验证与测试
7.1 基础功能测试
启动服务端:
./CarlaUE4.sh -quality-level=Epic运行示例客户端:
python3 examples/manual_control.py7.2 性能基准测试
使用内置基准测试工具:
python3 util/benchmark.py --fps=20 --frames=10008. 后续开发建议
对于需要在CARLA基础上进行二次开发的团队,我建议:
- 使用Git管理自定义修改
- 优先通过CARLA的Python API扩展功能
- 复杂修改可以考虑派生Unreal Engine插件
- 定期同步上游更新(注意版本兼容性)
编译过程中生成的中间文件可以安全删除以节省空间,但建议保留Build/目录下的最终产物。如果需要在多台机器上部署,可以考虑将编译好的二进制文件打包分发。