ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Ubuntu 22.04源码编译CARLA 0.9.16全攻略

Ubuntu 22.04源码编译CARLA 0.9.16全攻略

1. 项目概述

在自动驾驶和仿真测试领域,CARLA作为开源仿真平台已经成为行业标准工具之一。最近我在Ubuntu 22.04系统上完成了CARLA 0.9.16版本的源码编译工作,整个过程涉及大量依赖项管理和编译参数调优。与直接使用预编译版本相比,源码编译能获得更好的性能优化和定制灵活性,特别适合需要深度二次开发的团队。

这个版本虽然已经不是最新,但在很多实际项目中仍然被广泛使用,主要因为其稳定性和成熟的API接口。本文将详细记录从环境准备到最终编译成功的完整过程,重点分享那些官方文档没有明确说明的"坑"和解决方案。

2. 环境准备与依赖安装

2.1 系统基础环境配置

推荐使用Ubuntu 22.04.3 LTS版本,这是一个长期支持版本,系统稳定性有保障。在开始前需要确保:

  1. 系统已安装最新更新:
sudo apt update && sudo apt upgrade -y
  1. 磁盘空间至少预留150GB(源码编译会产生大量中间文件)

  2. 内存建议16GB以上,8GB内存编译某些组件时可能会因OOM失败

注意:如果在WSL2环境下编译,需要特别处理显卡驱动问题,建议优先使用物理机或完整虚拟机环境

2.2 核心依赖项安装

CARLA的编译依赖可以分为几个大类,我们需要分别处理:

基础编译工具链:

sudo apt install -y build-essential clang-14 lld-14 g++-10 cmake ninja-build

Python环境: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-dev

2.3 特殊依赖处理

有几个关键依赖需要特别注意:

  1. 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
  1. 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 install

3. 源码获取与预处理

3.1 获取CARLA源码

建议从官方GitHub仓库获取0.9.16版本源码:

git clone -b 0.9.16 --recurse-submodules https://github.com/carla-simulator/carla.git cd carla

3.2 源码结构调整

CARLA的编译系统有一些特殊要求,需要进行以下调整:

  1. 创建符号链接确保UnrealEngine路径正确:
ln -s ~/UnrealEngine_4.26 UnrealEngine
  1. 修改CMakeLists.txt中的Python路径:
# 在CMakeLists.txt中添加 set(PYTHON_EXECUTABLE "$(pyenv which python)")
  1. 更新子模块:
git submodule update --init --recursive

4. 编译过程详解

4.1 客户端编译

客户端是CARLA的主要Python API接口,编译命令如下:

make PythonAPI

这个阶段常见问题及解决方案:

  1. 报错:找不到Python.h
sudo apt install python3.7-dev
  1. 报错:numpy版本不兼容
pip install numpy==1.19.3

4.2 服务端编译

服务端是CARLA的仿真核心,基于Unreal Engine:

make launch

这个阶段需要特别注意:

  1. 首次编译会下载大量资源,建议保持网络稳定
  2. 编译过程可能持续2-4小时(取决于硬件配置)
  3. 如果失败,可以尝试:
make clean make launch -j$(nproc)

4.3 特殊组件编译

CARLA还有一些可选组件需要单独处理:

ROS桥接:

make ROS2

场景生成工具:

make rebuild-editor

5. 常见问题与解决方案

5.1 编译时内存不足

症状:编译过程中进程被杀死,系统日志显示OOM

解决方案:

  1. 增加swap空间:
sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
  1. 限制并行编译线程数:
make launch -j4

5.2 UE4编辑器崩溃

症状:运行make launch时UE4编辑器闪退

可能原因及解决:

  1. 显卡驱动问题:
sudo ubuntu-drivers autoinstall
  1. Vulkan兼容性问题:
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json

5.3 Python API导入错误

症状:import carla时报找不到模块

解决方案:

  1. 确保Python环境一致:
pyenv global 3.7.13
  1. 重新生成Python接口:
make clean make PythonAPI

6. 性能优化建议

6.1 编译参数优化

在Makefile中添加:

CFLAGS += -march=native -O3 CXXFLAGS += -march=native -O3

6.2 运行时优化

编辑Config/DefaultEngine.ini:

[ConsoleVariables] r.VSync=0 r.ScreenPercentage=100

6.3 资源管理

建议定期清理中间文件:

make clean rm -rf Build/

7. 验证与测试

7.1 基础功能测试

启动服务端:

./CarlaUE4.sh -quality-level=Epic

运行示例客户端:

python3 examples/manual_control.py

7.2 性能基准测试

使用内置基准测试工具:

python3 util/benchmark.py --fps=20 --frames=1000

8. 后续开发建议

对于需要在CARLA基础上进行二次开发的团队,我建议:

  1. 使用Git管理自定义修改
  2. 优先通过CARLA的Python API扩展功能
  3. 复杂修改可以考虑派生Unreal Engine插件
  4. 定期同步上游更新(注意版本兼容性)

编译过程中生成的中间文件可以安全删除以节省空间,但建议保留Build/目录下的最终产物。如果需要在多台机器上部署,可以考虑将编译好的二进制文件打包分发。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进