4. 环境搭建
自动驾驶虚拟仿真平台的开发,其本质是在软件层面构建一个可重复、可量化、可回归的物理世界替身。环境搭建的质量直接决定了后续传感器仿真、车辆动力学建模、场景泛化与算法部署的稳定性。一个配置混乱的宿主机环境,往往比算法本身的缺陷更早地暴露为“灵异问题”——例如同一份场景文件在不同机器上表现不一致、CUDA 版本与 PyTorch 不匹配导致显存报错、或仿真引擎因缺少系统库而静默崩溃。本章将围绕操作系统选型、依赖库管理、Python 虚拟环境、GPU 驱动栈以及仿真引擎(以 CARLA 和 Autoware 桥接场景为例)的安装与配置展开,帮助读者建立一套可复现、可迁移的工程化环境基线。
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 设备节点时出现权限错误。
4.2 GPU 驱动、CUDA 与 cuDNN 的版本匹配
GPU 驱动是仿真渲染与深度学习推理的底层基石。CARLA 基于 Unreal Engine 4.26,需要 OpenGL 4.5 以上支持;而 PyTorch 的 CUDA 扩展则要求驱动版本不低于特定阈值。版本匹配的核心原则是:驱动版本决定 CUDA 运行时的上限,CUDA 版本决定 PyTorch/TensorRT 的编译兼容性。
推荐组合如下表所示:
| 组件 | 推荐版本 | 适用场景 | 注意事项 |
|---|---|---|---|
| NVIDIA Driver | ≥ 525.60.13 | RTX 30/40 系列 | 驱动向下兼容旧 CUDA |
| CUDA Toolkit | 11.8 或 12.1 | PyTorch 1.13~2.1 | 11.8 更稳定,12.1 支持新特性 |
| cuDNN | 8.6.0 / 8.9.1 | CNN 加速 | 需与 CUDA 版本严格对应 |
| TensorRT | 8.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 栈配置成功
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)
创建仿真专用环境后,建议按以下顺序安装依赖:
- 基础数值库:
numpy、scipy、pandas - 图像与点云处理:
opencv-python、open3d、pybind11 - 深度学习框架:
torch、torchvision(按 CUDA 版本选择安装命令) - ROS 桥接:
rospkg、catkin_pkg、lark(用于解析 ROS 消息) - 仿真专用:
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
AttributeError: module 'carla' has no attribute 'Client'。建议在项目根目录维护 requirements.txt,并锁定所有包的主版本号。
4.4 仿真引擎安装与配置(以 CARLA 为例)
CARLA 是目前学术界与工业界使用最广泛的开源自动驾驶仿真器。其安装方式分为两种:预编译包与源码编译。预编译包适合快速验证,源码编译适合需要修改渲染管线或传感器模型的团队。本节以预编译包为主,并给出源码编译的关键参数。
预编译包安装流程:
- 从 CARLA 官方 GitHub Releases 下载
CARLA_0.9.15.tar.gz(约 20GB,包含地图与资源)。 - 解压至
/opt/carla,并设置环境变量export CARLA_ROOT=/opt/carla。 - 启动服务器端:
./CarlaUE4.sh -quality-level=Low(低画质模式可减少显存占用)。 - 启动客户端测试:
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)。
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。
Dockerfile 纳入版本控制。每次更新依赖后,重新构建镜像并运行完整的回归测试(包括传感器同步、物理引擎稳定性、渲染帧率)。只有环境可复现,算法对比才有意义。