
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.26CARLA 0.9.16需要特定版本的UE4引擎git clone --depth1 -b 4.26 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.26 cd ~/UnrealEngine_4.26 ./Setup.sh ./GenerateProjectFiles.sh makerpclib需要特定版本v2.3.0git 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.hsudo apt install python3.7-dev报错numpy版本不兼容pip install numpy1.19.34.2 服务端编译服务端是CARLA的仿真核心基于Unreal Enginemake 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 autoinstallVulkan兼容性问题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 -marchnative -O3 CXXFLAGS -marchnative -O36.2 运行时优化编辑Config/DefaultEngine.ini[ConsoleVariables] r.VSync0 r.ScreenPercentage1006.3 资源管理建议定期清理中间文件make clean rm -rf Build/7. 验证与测试7.1 基础功能测试启动服务端./CarlaUE4.sh -quality-levelEpic运行示例客户端python3 examples/manual_control.py7.2 性能基准测试使用内置基准测试工具python3 util/benchmark.py --fps20 --frames10008. 后续开发建议对于需要在CARLA基础上进行二次开发的团队我建议使用Git管理自定义修改优先通过CARLA的Python API扩展功能复杂修改可以考虑派生Unreal Engine插件定期同步上游更新注意版本兼容性编译过程中生成的中间文件可以安全删除以节省空间但建议保留Build/目录下的最终产物。如果需要在多台机器上部署可以考虑将编译好的二进制文件打包分发。