2. LGSVL仿真环境搭建:从零开始跑通你的第一个仿真

好,咱们直接进入正题。这一章我带你亲手把LGSVL环境搭起来。说实话,我第一次搭这个环境的时候也踩了不少坑,尤其是Python API那块,折腾了大半天。今天我把这些经验都揉碎了讲给你听。

2.1 LGSVL Simulator安装与配置

先说说安装。LGSVL Simulator其实是个Unity3D应用,所以它对显卡有一定要求。我个人习惯用NVIDIA显卡,GTX 1060以上基本就能流畅跑起来。

下载安装包

去LGSVL的GitHub Releases页面下载对应系统的安装包。Windows选.exe,Ubuntu选.AppImage。我建议你用Ubuntu 18.04或20.04,兼容性最好。

安装步骤(以Ubuntu为例):

  1. 下载 .AppImage 文件
  2. 赋予执行权限:chmod +x lgssvl*.AppImage
  3. 直接运行:./lgssvl*.AppImage

嗯,这里要注意:第一次启动可能会报缺少库文件的错误。别慌,运行下面这条命令就能解决:

sudo apt-get install libvulkan1 libvulkan-dev

配置WebUI

LGSVL启动后,默认会在浏览器打开一个管理界面,地址是 localhost:8080。你可以在里面管理地图、车辆、传感器配置等。我个人习惯把常用的地图和车辆先下载好,省得每次跑仿真都要等下载。

小技巧: 如果你在公司内网或者网络环境不好,可以提前下载好地图资源包,放到 ~/.lgssvl/maps 目录下。这样启动时就不会卡在下载环节了。

2.2 Python API环境准备

这部分是重点。LGSVL提供了Python API,让我们可以编程控制仿真。说白了,就是你可以用Python脚本启动仿真、控制车辆、获取传感器数据。

安装Python API包

直接用pip安装:

pip install lgssvl

等等,别急着敲回车。我建议你先创建一个虚拟环境,避免和系统Python包冲突:

python3 -m venv lgssvl_env
source lgssvl_env/bin/activate
pip install lgssvl

我曾经遇到过一个问题:安装完API后,导入包时报错说找不到模块。后来发现是Python版本问题。LGSVL的API只支持Python 3.6到3.8,3.9以上会报错。你想想看,光排查这个就花了我两个小时。

避坑指南: 我曾经在Python 3.10上折腾了一整天,最后发现官方文档里明确写着只支持3.6-3.8。所以,老老实实用3.8吧,最稳。

验证API是否安装成功

运行下面这段代码,如果能正常输出,说明环境就绪了:

import lgssvl
print(lgssvl.__version__)

2.3 传感器配置文件结构解析

这是整个课程的核心基础。LGSVL用JSON文件来描述车辆的传感器配置。你想想看,一辆自动驾驶汽车上装了哪些传感器?摄像头、激光雷达、毫米波雷达、GPS、IMU...这些都在一个JSON文件里定义。

配置文件的基本结构

一个典型的传感器配置文件长这样:

{
  "sensors": [
    {
      "type": "Camera",
      "name": "Main Camera",
      "params": {
        "width": 1920,
        "height": 1080,
        "fov": 70,
        "near_plane": 0.1,
        "far_plane": 1000.0
      },
      "transform": {
        "x": 1.5,
        "y": 0.0,
        "z": 1.2,
        "pitch": 0,
        "yaw": 0,
        "roll": 0
      }
    },
    {
      "type": "Lidar",
      "name": "Velodyne VLP-16",
      "params": {
        "lasers": 16,
        "min_distance": 0.5,
        "max_distance": 100.0,
        "rotation_frequency": 10.0,
        "measurements_per_rotation": 18000
      },
      "transform": {
        "x": 0.0,
        "y": 0.0,
        "z": 1.8,
        "pitch": 0,
        "yaw": 0,
        "roll": 0
      }
    }
  ]
}

关键字段说明

字段 说明 我的经验
type 传感器类型:Camera, Lidar, Radar, GPS, IMU等 类型名必须严格匹配,大小写敏感
name 传感器名称,用于在代码中引用 建议用有意义的名称,方便调试
params 传感器参数,不同类型参数不同 参数值要参考真实传感器规格
transform 传感器在车辆坐标系下的安装位置 单位是米,角度是度

重要提醒: transform中的坐标是相对于车辆中心点的。x轴朝前,y轴朝左,z轴朝上。这个坐标系定义和很多其他仿真平台不一样,我第一次用的时候就把左右搞反了,结果激光雷达点云全偏了。

如何加载配置文件

在Python API中,你可以这样加载传感器配置:

from lgssvl.utils import SensorConfig

# 从JSON文件加载
sensor_config = SensorConfig.from_file("my_sensor_config.json")

# 或者直接传入字典
sensor_config = SensorConfig(sensor_dict)

我个人习惯把传感器配置文件和车辆模型分开管理。这样换传感器就像换镜头一样方便,你想想看,测试不同传感器组合时,只需要改一个JSON文件就行了。

调试技巧: 如果你不确定传感器配置是否正确,可以在LGSVL的WebUI里手动加载配置,然后点击"Preview"按钮。它会显示传感器在车辆上的位置和朝向,一目了然。

好了,这一章的内容就到这里。环境搭好了,配置文件也看懂了,下一章我们就可以开始写第一个仿真脚本了。记住,环境搭建是基础中的基础,别嫌麻烦,一步一个脚印来。