二、CARLA安装与配置:支持的操作系统与硬件要求、源码编译与预编译包安装、Python环境配置、常见安装问题排查

CARLA作为一款开源的自动驾驶仿真平台,其安装与配置的成败直接决定了后续开发工作的效率与体验。许多初学者在第一步就遭遇挫折,往往是因为对系统兼容性、硬件瓶颈或Python环境管理缺乏系统性认知。本章将围绕“操作系统与硬件选型”、“两种安装路径(预编译包与源码编译)”、“Python环境隔离”以及“高频故障排查”四个核心模块展开,帮助你建立一套可复用的安装决策框架。下图展示了CARLA安装与配置的整体决策链路,从硬件评估到最终验证,每个环节都相互关联。

CARLA 安装与配置决策链路图 硬件评估 GPU≥6GB显存 RAM≥16GB / 磁盘≥30GB 操作系统选择 Ubuntu 20.04/22.04 Windows 10/11 (WSL2) 驱动与依赖 NVIDIA驱动≥470 CUDA 11.x / 12.x 安装路径 预编译包 / 源码编译 二选一 Python 环境隔离 Conda 创建虚拟环境 Python 3.8 / 3.10 客户端库安装 pip install carla 或使用 egg 文件 环境变量配置 PYTHONPATH 指向 carla/dist 目录 功能验证 启动 CARLA 服务器 运行 Python 示例脚本 常见问题排查 端口冲突 / 显存不足 Python 版本不匹配 性能调优 降低画质 / 分辨率 调整渲染距离 目标:构建稳定、可复现的 CARLA 开发环境

在开始安装之前,请务必理解CARLA的双进程架构:CARLA服务器(负责仿真渲染与物理计算)和CARLA客户端(通过Python API控制仿真)。这种架构决定了安装过程需要同时关注底层图形依赖与上层Python接口的匹配。下面我们逐一深入每个环节。

2.1 支持的操作系统与硬件要求:选对土壤才能生根发芽

核心原理:为什么CARLA对硬件如此敏感?

CARLA基于Unreal Engine 4构建,其渲染管线、物理引擎(PhysX)和传感器模拟(如LiDAR、摄像头)都需要消耗大量计算资源。尤其是GPU,不仅承担画面渲染,还负责CUDA加速的深度学习推理(如语义分割)。因此,硬件配置不是“够用就好”,而是“下限决定体验”。

组件最低要求推荐配置说明
操作系统Ubuntu 18.04 / Windows 10Ubuntu 20.04 / 22.04Ubuntu对CUDA支持更友好,Windows需额外配置WSL2
GPUNVIDIA GTX 1060 6GBRTX 3060 Ti 8GB 或更高显存决定纹理加载与多传感器并发能力
CPU4核8线程8核16线程物理计算与AI代理(如交通流)依赖CPU
内存16GB DDR432GB DDR5加载大型地图(如Town10)时内存占用可超20GB
磁盘30GB HDD50GB NVMe SSDSSD可缩短启动时间50%以上
网络—千兆以太网多机分布式仿真时必需
风险提示:AMD GPU或Intel集成显卡无法运行CARLA,因为其依赖NVIDIA的CUDA架构。若使用笔记本,请确保独显直连而非混合输出模式。

判断方法:三步评估你的机器

  1. 检查GPU驱动:在终端运行 nvidia-smi,确认驱动版本≥470,且CUDA版本≥11.0。
  2. 测试OpenGL支持:运行 glxinfo | grep "OpenGL version",CARLA需要OpenGL 4.5以上。
  3. 磁盘空间预估:CARLA本体约20GB,加上Python环境与缓存,建议预留40GB。

案例拆解:一次因硬件误判导致的安装失败

某学员使用一台配备GTX 1650(4GB显存)的笔记本,在安装时选择“高画质”模式,结果启动后立即崩溃,报错Out of video memory。分析发现,4GB显存仅能勉强运行Town01地图,且无法同时开启摄像头与LiDAR。解决方案是:在settings.ini中将quality_level改为Low,并将分辨率降至1280x720。调整后仿真流畅运行,但传感器数据延迟增加约15ms。此案例说明,硬件评估不能只看“能否启动”,还要考虑后续开发所需的传感器并发能力。

2.2 源码编译与预编译包安装:两条路径的权衡艺术

核心原理:两种安装方式的本质区别

预编译包是官方编译好的二进制文件,解压即用,适合快速上手;源码编译则从GitHub拉取源码,通过CMake和Makefile自行构建,适合需要修改引擎源码或定制传感器模型的进阶用户。两者的依赖管理逻辑完全不同:预编译包自带依赖,而源码编译需要手动安装所有依赖库。

对比维度预编译包源码编译
安装时间5-10分钟2-4小时(取决于CPU性能)
依赖管理自动包含需手动安装(如Protobuf、Boost、LibXml2)
版本更新滞后于源码实时同步最新提交
定制能力无法修改C++代码可修改传感器模型、物理参数
稳定性高(经过官方测试)中(可能存在编译期警告)

操作流程:预编译包安装(推荐初学者)

# 1. 下载CARLA压缩包(以0.9.15为例)
wget https://carla-releases.s3.us-east-005.backblazeb2.com/Linux/CARLA_0.9.15.tar.gz
# 2. 解压到指定目录
mkdir -p ~/carla && tar -xzf CARLA_0.9.15.tar.gz -C ~/carla
# 3. 下载额外地图包(可选)
wget https://carla-releases.s3.us-east-005.backblazeb2.com/Linux/AdditionalMaps_0.9.15.tar.gz
tar -xzf AdditionalMaps_0.9.15.tar.gz -C ~/carla
# 4. 启动服务器
cd ~/carla && ./CarlaUE4.sh -quality-level=Low
经验提醒:Windows用户需下载.exe版本,并确保安装Visual C++ Redistributable 2019。若启动时提示缺少DLL,请安装DirectX 12运行库。

操作流程:源码编译(进阶用户)

# 1. 克隆源码
git clone --depth 1 -b 0.9.15 https://github.com/carla-simulator/carla.git
cd carla
# 2. 安装依赖(Ubuntu 20.04)
./Setup.sh
# 3. 编译客户端库
make PythonAPI
# 4. 编译服务器端
make launch
# 5. 设置环境变量
export CARLA_ROOT=$(pwd)
export PYTHONPATH=$CARLA_ROOT/PythonAPI/carla/dist:$CARLA_ROOT/PythonAPI/carla
风险提示:源码编译需要至少8GB内存和30GB磁盘空间。编译过程中若出现c++: internal compiler error,通常是内存不足,请关闭其他应用或增加Swap空间。

案例拆解:源码编译中的依赖冲突

一位学员在Ubuntu 22.04上编译CARLA 0.9.13时,遇到Protobuf version mismatch错误。原因是系统自带的Protobuf 3.21与CARLA要求的3.6不兼容。解决过程:首先使用pip uninstall protobuf卸载Python版本,然后通过apt install libprotobuf-dev=3.6.1安装指定版本,最后重新运行make PythonAPI。整个过程耗时40分钟,但编译成功后,该学员成功修改了LiDAR的射线数量参数,实现了自定义传感器配置。此案例表明,源码编译的价值在于深度定制,但代价是必须熟悉Linux包管理机制。

2.3 Python环境配置:隔离是避免灾难的唯一法则

核心原理:为什么必须使用虚拟环境?

CARLA的Python API依赖特定版本的numpy、Pygame和Pillow。如果直接使用系统Python,很可能与TensorFlow或PyTorch等其他框架产生版本冲突。Conda或venv可以创建独立的环境,确保CARLA依赖与其他项目互不干扰。

# 创建Conda环境
conda create -n carla_env python=3.8
conda activate carla_env
# 安装CARLA客户端库(两种方式任选)
# 方式一:pip安装(推荐)
pip install carla==0.9.15
# 方式二:使用egg文件(需先找到对应文件)
cd ~/carla/PythonAPI/carla/dist
pip install carla-0.9.15-py3.8-linux-x86_64.egg
关键点:CARLA的Python API与服务器版本必须严格匹配。例如,服务器是0.9.15,客户端库也必须使用0.9.15,否则会出现RPC connection failed错误。

判断方法:验证Python环境是否就绪

  1. 在Conda环境中运行 python -c "import carla; print(carla.__version__)",应输出0.9.15。
  2. 启动CARLA服务器后,运行 python -c "import carla; client = carla.Client('localhost', 2000); print(client.get_server_version())",确认客户端与服务器版本一致。
  3. 若提示ModuleNotFoundError,检查PYTHONPATH是否包含carla/dist目录。

实战场景:多版本CARLA共存

某团队同时维护0.9.12和0.9.15两个项目。他们创建了两个Conda环境:carla_912和carla_915,并在各自的site-packages中安装对应版本的carla库。切换项目时只需conda activate对应环境,无需修改系统路径。这种做法的代价是磁盘占用增加约2GB,但避免了反复卸载安装的麻烦。

2.4 常见安装问题排查:从报错到解决的系统化思维

核心原理:CARLA错误日志的解读逻辑

CARLA的报错信息通常分为三类:启动类错误(服务器无法启动)、连接类错误(客户端无法连接服务器)、运行类错误(仿真中途崩溃)。每类错误的排查路径不同,但核心原则是:先检查日志文件,再检查环境变量,最后检查硬件状态。

错误现象可能原因排查命令/方法解决方案
启动时黑屏闪退GPU驱动不兼容nvidia-smi检查驱动更新驱动至≥470
端口2000被占用其他仿真程序占用lsof -i:2000修改CARLA端口或关闭冲突进程
Python API导入失败PYTHONPATH未设置echo $PYTHONPATH添加carla/dist路径
显存不足崩溃画质设置过高查看Log.txt中的Out of memory降低-quality-level
传感器数据延迟高CPU瓶颈top查看CPU占用减少AI代理数量

操作流程:标准排障五步法

  1. 复现问题:记录完整的操作步骤和报错截图。
  2. 查看日志:CARLA的日志位于~/carla/Log.txt,关注FATAL和ERROR级别信息。
  3. 检查环境:运行 python -c "import carla" 和 nvidia-smi 确认基础环境。
  4. 最小化测试:使用官方示例脚本 PythonAPI/examples/spawn_npc.py 测试基本功能。
  5. 逐步回退:若问题出现在修改配置后,回退到默认设置再测试。

案例拆解:一次典型的“客户端-服务器版本不匹配”排障

一位学员在运行manual_control.py时,报错RuntimeError: version mismatch。排查过程:首先检查服务器版本(0.9.15),然后检查客户端库版本(0.9.14),确认不匹配。进一步分析发现,该学员在Conda环境中执行了pip install carla,但该命令默认安装了最新版(0.9.15),而服务器是旧版。解决方法是:pip install carla==0.9.14,重新启动后问题解决。此案例的教训是:安装前务必确认服务器版本号,可通过./CarlaUE4.sh --version查看。

总结复盘:安装配置的黄金法则

  • 硬件评估先行:不要跳过GPU和内存检查,否则后续问题会层出不穷。
  • 版本一致性是生命线:服务器、客户端库、Python版本三者必须严格对应。
  • 虚拟环境是安:永远不要在系统Python中直接安装CARLA。
  • 日志是唯一真相:遇到问题先看Log.txt,不要盲目猜测。
  • 渐进式验证:从spawn_npc.py开始测试,再逐步增加复杂度。
经验之谈:建议在安装完成后,立即创建一个“环境快照”文档,记录操作系统版本、GPU驱动版本、CARLA版本、Python版本和所有依赖库版本。这将在未来复现环境或团队协作时节省大量时间。