2、环境准备:安装LGSVL仿真器、配置Unity环境、依赖库(Python、ROS/ROS2)安装与验证
LGSVL仿真器(现为LG SVL Simulator,后由Aptiv接管并更名为SVL Simulator)是自动驾驶开发中极为重要的开源仿真平台,其核心价值在于提供高保真的传感器模拟、动态交通流以及与主流自动驾驶框架(如Apollo、ROS/ROS2)的无缝对接。在开始场景部署之前,构建一个稳定、版本匹配且验证过的运行环境,是决定后续开发效率与调试成本的关键。本章将系统讲解从底层依赖库到仿真器本体的完整安装流程,并重点解决版本冲突与验证方法这两个核心痛点。
上图展示了LGSVL环境准备的整体架构与验证链路。从底层依赖库到仿真器本体,再到场景部署,每一层都依赖于前一层的正确安装。值得注意的是,版本匹配是贯穿整个安装过程的核心主线——LGSVL的不同版本对Unity、ROS2版本有严格的要求,盲目使用最新版本往往会导致兼容性问题。接下来,我们将按照从底层到顶层的顺序,逐一展开每个组件的安装细节与验证方法。
2.1 核心原理:LGSVL的软件栈依赖关系
理解LGSVL的软件栈是避免安装陷阱的第一步。LGSVL仿真器本质上是一个基于Unity引擎构建的独立可执行程序,它通过桥接节点(Bridge)与外部自动驾驶软件(如ROS、ROS2、Apollo)通信。其运行依赖可以划分为三个层次:
- 系统层:包括NVIDIA GPU驱动、CUDA工具包(用于传感器仿真加速)、以及必要的系统库(如libssl、libvulkan等)。LGSVL利用GPU进行渲染和部分物理计算,没有合适的GPU驱动,仿真器将无法启动或出现严重的画面撕裂。
- 中间件层:主要指Python环境(用于运行API脚本和桥接节点)和ROS/ROS2(用于消息通信)。LGSVL的Python API允许用户通过脚本控制仿真器,而ROS/ROS2桥接则实现了仿真器与自动驾驶算法之间的数据交换。
- 应用层:即LGSVL仿真器本体和Unity编辑器(用于自定义场景或车辆)。Unity编辑器并非运行LGSVL所必需,但若需要修改或创建新的仿真场景,则必须安装与LGSVL版本匹配的Unity版本。
这三层之间存在严格的版本兼容性约束。例如,LGSVL 2021.3版本官方支持Unity 2020.3 LTS和ROS2 Foxy,而LGSVL 2022.1版本则要求Unity 2021.3 LTS和ROS2 Galactic。忽视这些约束,轻则功能异常,重则程序崩溃。
2.2 操作流程:分步安装与配置
以下安装流程以Ubuntu 20.04 LTS系统为例,这是LGSVL官方支持最完善的平台。Windows系统流程类似,但需注意路径和防火墙设置。
步骤一:系统依赖与GPU驱动安装
# 1. 更新系统包
sudo apt update && sudo apt upgrade -y
# 2. 安装NVIDIA驱动(推荐使用官方PPA)
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt install nvidia-driver-470 # 根据GPU型号选择版本
# 3. 验证驱动
nvidia-smi # 应显示GPU型号和驱动版本
# 4. 安装CUDA 11.4(LGSVL 2021.3推荐)
wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run
sudo sh cuda_11.4.0_470.42.01_linux.run --toolkit --silent --override
# 5. 设置环境变量
echo 'export PATH=/usr/local/cuda-11.4/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
nvcc --version # 验证CUDA安装
nvidia-smi无法执行,请检查Secure Boot设置(需禁用)或尝试使用ubuntu-drivers autoinstall命令自动安装推荐驱动。切勿在驱动未正确安装的情况下继续后续步骤,否则LGSVL将无法渲染任何画面。
步骤二:Python虚拟环境配置
强烈建议使用Conda或venv创建独立的Python环境,避免与系统Python冲突。LGSVL的Python API要求Python 3.7及以上版本。
# 使用Miniconda(推荐)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc
# 创建虚拟环境
conda create -n lgsvl python=3.8
conda activate lgsvl
# 安装LGSVL Python API
pip install lgsvl==2021.3.0 # 版本需与仿真器匹配
# 验证安装
python -c "import lgsvl; print(lgsvl.__version__)"
步骤三:ROS/ROS2安装
根据LGSVL版本选择ROS1(Melodic/Noetic)或ROS2(Foxy/Galactic)。这里以ROS2 Foxy为例,因为LGSVL对ROS2的支持更完善。
# 设置编码
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
# 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 安装ROS2 Foxy
sudo apt update
sudo apt install ros-foxy-desktop python3-argcomplete
# 环境配置
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc
# 验证ROS2
ros2 --help
步骤四:Unity Hub与编辑器安装
Unity主要用于场景编辑和自定义车辆模型。LGSVL 2021.3要求Unity 2020.3 LTS版本。
# 下载Unity Hub
wget https://public-cdn.cloud.unity3d.com/hub/prod/UnityHub.AppImage
chmod +x UnityHub.AppImage
./UnityHub.AppImage
# 在Unity Hub中安装Unity 2020.3.30f1(LTS)
# 安装时勾选 Linux Build Support (IL2CPP) 和 WebGL Build Support 模块
步骤五:LGSVL仿真器安装
# 从GitHub Releases下载LGSVL(需科学上网)
wget https://github.com/lgsvl/simulator/releases/download/2021.3/svl_simulator_linux_2021.3.zip
unzip svl_simulator_linux_2021.3.zip
chmod +x svl_simulator_linux_2021.3.x86_64
# 启动仿真器(首次启动需登录账号)
./svl_simulator_linux_2021.3.x86_64
2.3 案例拆解:一次典型的版本冲突排障
背景与约束:某自动驾驶团队在部署LGSVL时,使用Ubuntu 20.04系统,预装了ROS2 Galactic(最新版)和Unity 2021.3 LTS。团队希望运行LGSVL 2021.3版本,但启动仿真器后,桥接节点始终无法建立连接,日志显示Failed to create ROS2 node: rclcpp::init() failed。
分析判断过程:通过查阅LGSVL官方文档,发现2021.3版本仅支持ROS2 Foxy(EOL版本),而Galactic的DDS实现(Fast-DDS 2.6)与LGSVL内置的桥接库(基于Fast-DDS 2.3)存在协议不兼容。此外,Unity 2021.3生成的场景文件格式与LGSVL 2021.3的期望格式不匹配,导致地图加载失败。
实际操作步骤:
- 卸载ROS2 Galactic,安装Foxy版本(步骤见2.2节)。
- 在Unity Hub中安装Unity 2020.3.30f1,并重新导出场景资源。
- 清理LGSVL缓存目录
~/.config/lgsvl,重新启动仿真器。 - 使用
ros2 topic list验证桥接节点是否发布/simulator/status话题。
结果对比:调整后,桥接连接在5秒内建立成功,传感器数据(相机、激光雷达)以30Hz频率正常发布。团队额外花费了3小时进行版本回退,但避免了后续场景开发中的长期隐患。
2.4 常见误区与验证清单
以下是环境准备阶段最常见的五个误区,以及对应的验证方法:
| 误区 | 现象 | 验证方法 |
|---|---|---|
| GPU驱动版本过旧 | 仿真器启动黑屏或崩溃 | nvidia-smi检查驱动版本是否≥470 |
| Python版本不匹配 | 导入lgsvl模块报错 | python --version确认3.7+ |
| ROS2版本不兼容 | 桥接节点无法启动 | ros2 doctor检查DDS实现 |
| Unity版本错误 | 场景资源无法导入 | Unity Hub中确认版本号 |
| 端口冲突 | Web UI无法访问 | netstat -tuln | grep 8080 |
最终验证流程:完成所有安装后,执行以下命令进行端到端验证:
# 1. 启动LGSVL仿真器(后台运行)
./svl_simulator_linux_2021.3.x86_64 --no-gui &
# 2. 启动ROS2桥接(需先source ROS2环境)
ros2 run lgsvl_bridge lgsvl_bridge --port 9090
# 3. 使用Python API连接仿真器
python -c "
import lgsvl
sim = lgsvl.Simulator('http://localhost:8080')
print('Connected to LGSVL:', sim.version)
# 加载地图
sim.load_map('SanFrancisco')
print('Map loaded successfully')
"