4. 环境搭建

自动驾驶虚拟仿真平台的开发,其本质是在软件层面构建一个可重复、可量化、可回归的物理世界替身。环境搭建的质量直接决定了后续传感器仿真、车辆动力学建模、场景泛化与算法部署的稳定性。一个配置混乱的宿主机环境,往往比算法本身的缺陷更早地暴露为“灵异问题”——例如同一份场景文件在不同机器上表现不一致、CUDA 版本与 PyTorch 不匹配导致显存报错、或仿真引擎因缺少系统库而静默崩溃。本章将围绕操作系统选型、依赖库管理、Python 虚拟环境、GPU 驱动栈以及仿真引擎(以 CARLA 和 Autoware 桥接场景为例)的安装与配置展开,帮助读者建立一套可复现、可迁移的工程化环境基线。

自动驾驶虚拟仿真平台环境搭建链路 操作系统层 Ubuntu 20.04 / 22.04 LTS 内核 ≥ 5.4,禁用 Nouveau GPU 驱动栈 NVIDIA Driver ≥ 525 CUDA 11.8 / 12.1 + cuDNN Python 虚拟环境 Miniconda / venv Python 3.8 / 3.10 核心依赖库 NumPy / OpenCV / ROS2 PyTorch / TensorRT 仿真引擎核心 CARLA 0.9.15 / Autoware 桥接 / SUMO 交通流 Unreal Engine 4.26 渲染后端 验证与运行输出 传感器数据流 / 车辆控制指令 / 场景日志 环境验证清单 ✓ nvidia-smi 正常 ✓ python -c "import torch" ✓ CARLA 启动无报错 ✓ 传感器数据频率稳定 ✓ 场景加载时间 < 30s ✓ 多机时间同步误差 < 5ms

4.1 操作系统选型与基础配置

仿真平台对操作系统的要求集中在三点:实时调度能力、GPU 驱动兼容性、以及 ROS/ROS2 生态的完整支持。目前工业界与学术界的主流选择是 Ubuntu 20.04 LTS(搭配 ROS1 Noetic 或 ROS2 Foxy)与 Ubuntu 22.04 LTS(搭配 ROS2 Humble)。前者稳定性经过多年验证,后者对最新 NVIDIA 驱动和 CUDA 12.x 支持更佳。若团队已有基于 Ubuntu 18.04 的旧资产,建议通过 Docker 容器隔离,而非直接升级物理系统。

安装系统时需注意以下关键项:

  • 内核参数:在 GRUB 配置中添加 quiet splash 即可,但必须禁用 Nouveau 开源驱动,否则 NVIDIA 驱动安装会失败。在 /etc/modprobe.d/blacklist-nouveau.conf 中写入 blacklist nouveau 与 options nouveau modeset=0,并执行 sudo update-initramfs -u。
  • 交换分区:建议分配至少 16GB swap,编译大型依赖(如 UE4 源码)时内存溢出是常见问题。
  • 文件系统:推荐使用 ext4,避免 Btrfs 在快照回滚时与仿真引擎的 mmap 机制产生冲突。
  • 用户权限:将当前用户加入 video 和 render 组,避免访问 GPU 设备节点时出现权限错误。
经验提醒:若使用双系统(Windows + Ubuntu),务必在 BIOS 中关闭 Secure Boot,否则第三方内核模块(NVIDIA、VirtualBox)无法加载。同时建议为 Ubuntu 单独分配一块 SSD,避免机械硬盘的 I/O 瓶颈拖慢场景加载速度。

4.2 GPU 驱动、CUDA 与 cuDNN 的版本匹配

GPU 驱动是仿真渲染与深度学习推理的底层基石。CARLA 基于 Unreal Engine 4.26,需要 OpenGL 4.5 以上支持;而 PyTorch 的 CUDA 扩展则要求驱动版本不低于特定阈值。版本匹配的核心原则是:驱动版本决定 CUDA 运行时的上限,CUDA 版本决定 PyTorch/TensorRT 的编译兼容性。

推荐组合如下表所示:

组件推荐版本适用场景注意事项
NVIDIA Driver≥ 525.60.13RTX 30/40 系列驱动向下兼容旧 CUDA
CUDA Toolkit11.8 或 12.1PyTorch 1.13~2.111.8 更稳定,12.1 支持新特性
cuDNN8.6.0 / 8.9.1CNN 加速需与 CUDA 版本严格对应
TensorRT8.5.3 / 8.6.1推理优化可选,非必需

安装驱动时,推荐使用 sudo apt install nvidia-driver-535(Ubuntu 22.04)或从 NVIDIA 官网下载 .run 文件。安装完成后,务必执行 nvidia-smi 验证驱动状态,并检查 /proc/driver/nvidia/version 确认内核模块已加载。CUDA 的安装建议使用 runfile 方式,并选择“仅安装 Toolkit”,避免覆盖系统自带的驱动。

# 验证 CUDA 与 PyTorch 的匹配
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
# 若输出 True 与显卡型号,则说明 GPU 栈配置成功
风险提示:切勿在已安装 PyTorch 的环境下随意升级 CUDA。PyTorch 的二进制包是针对特定 CUDA 版本编译的,例如 torch==2.0.1+cu118 只能使用 CUDA 11.8 运行时。若强行使用 CUDA 12.x,会出现 libcudart.so: cannot open shared object file 错误。

4.3 Python 虚拟环境与依赖库管理

仿真平台涉及 Python 包众多,且版本敏感。例如 CARLA 的 Python API 依赖 numpy==1.23,而 Autoware 的感知模块可能需要 numpy==1.24。使用虚拟环境隔离不同项目的依赖是唯一可靠的方案。推荐使用 Miniconda 作为环境管理器,其优势在于:

  • 支持 Python 版本的无缝切换(conda create -n sim python=3.8)
  • conda 包管理器能处理 CUDA 相关的非 Python 依赖(如 cudatoolkit)
  • 环境导出与复现简单(conda env export > environment.yml)

创建仿真专用环境后,建议按以下顺序安装依赖:

  1. 基础数值库:numpy、scipy、pandas
  2. 图像与点云处理:opencv-python、open3d、pybind11
  3. 深度学习框架:torch、torchvision(按 CUDA 版本选择安装命令)
  4. ROS 桥接:rospkg、catkin_pkg、lark(用于解析 ROS 消息)
  5. 仿真专用:carla(从 pip 或源码安装)、pygame(用于可视化)
# 创建并激活环境
conda create -n autosim python=3.8 -y
conda activate autosim

# 安装 PyTorch(以 CUDA 11.8 为例)
pip install torch==2.0.1 torchvision==0.15.2 --index-url https://download.pytorch.org/whl/cu118

# 安装 CARLA Python API
pip install carla==0.9.15
实战要点:CARLA 的 Python API 与仿真引擎版本必须严格一致。若引擎是 0.9.15,则 pip 安装的 carla 包也必须是 0.9.15,否则会出现 AttributeError: module 'carla' has no attribute 'Client'。建议在项目根目录维护 requirements.txt,并锁定所有包的主版本号。

4.4 仿真引擎安装与配置(以 CARLA 为例)

CARLA 是目前学术界与工业界使用最广泛的开源自动驾驶仿真器。其安装方式分为两种:预编译包与源码编译。预编译包适合快速验证,源码编译适合需要修改渲染管线或传感器模型的团队。本节以预编译包为主,并给出源码编译的关键参数。

预编译包安装流程:

  1. 从 CARLA 官方 GitHub Releases 下载 CARLA_0.9.15.tar.gz(约 20GB,包含地图与资源)。
  2. 解压至 /opt/carla,并设置环境变量 export CARLA_ROOT=/opt/carla。
  3. 启动服务器端:./CarlaUE4.sh -quality-level=Low(低画质模式可减少显存占用)。
  4. 启动客户端测试:python -c "import carla; client = carla.Client('localhost', 2000); print(client.get_server_version())"。

源码编译关键参数:若需编译 UE4 与 CARLA 源码,需确保系统内存 ≥ 32GB,磁盘剩余 ≥ 100GB。编译命令如下:

# 克隆 CARLA 源码
git clone --depth=1 -b 0.9.15 https://github.com/carla-simulator/carla.git
cd carla
# 更新子模块(UE4 补丁)
./Update.sh
# 编译 Python API
make PythonAPI
# 编译服务器端
make launch

编译过程中最常见的错误是 fatal error: GL/glew.h: No such file or directory,此时需安装 libglew-dev libglm-dev libpng-dev。另外,UE4 编译对 GCC 版本敏感,Ubuntu 22.04 自带的 GCC 11 可能导致编译失败,建议使用 GCC 9(sudo apt install gcc-9 g++-9)。

排障指南:若 CARLA 启动后黑屏或闪退,优先检查显卡驱动是否支持 Vulkan。执行 vulkaninfo --summary 查看 Vulkan 实例是否正常。若缺少 Vulkan,安装 sudo apt install mesa-vulkan-drivers。此外,CARLA 默认使用 2000 端口,若端口被占用,可通过 ./CarlaUE4.sh -carla-rpc-port=3000 修改。

4.5 环境验证与常见误区复盘

环境搭建完成后,必须进行系统性验证,而非仅检查单个组件是否安装成功。建议执行以下验证清单:

验证项命令/方法预期结果
GPU 驱动nvidia-smi显示显卡型号与驱动版本
CUDA 运行时python -c "import torch; print(torch.cuda.is_available())"输出 True
CARLA 引擎启动服务器后运行客户端脚本获取服务器版本号
传感器数据流加载 Town03 地图,生成相机图像图像分辨率与频率符合预期
多机同步使用 PTP 或 NTP 同步两台机器时间误差 < 5ms

在实际项目中,环境问题往往以“玄学”形式出现。以下是三个高频误区:

  • 误区一:盲目追求最新版本。CUDA 12.2 虽然性能更好,但 PyTorch 官方尚未提供对应预编译包,导致需要从源码编译,耗时且易错。建议以 PyTorch 的 pip install torch --index-url 列表为准,反向选择 CUDA 版本。
  • 误区二:忽略系统库依赖。CARLA 依赖 libomp5、libxerces-c-dev 等系统库,缺少时不会报错,但会在运行特定地图时崩溃。建议执行 ldd CarlaUE4/bin/CarlaUE4 检查动态库链接。
  • 误区三:环境变量污染。多个虚拟环境共存时,PYTHONPATH 可能指向错误路径。建议在启动脚本中显式设置 export PYTHONPATH=$CARLA_ROOT/PythonAPI/carla/dist/carla-0.9.15-py3.8-linux-x86_64.egg:$PYTHONPATH。
复盘总结:环境搭建的本质是建立“依赖锁定”与“可复现性”机制。建议团队使用 Docker 镜像固化环境,将 Dockerfile 纳入版本控制。每次更新依赖后,重新构建镜像并运行完整的回归测试(包括传感器同步、物理引擎稳定性、渲染帧率)。只有环境可复现,算法对比才有意义。