3、LGSVL基础操作:界面导航、地图加载、车辆选择、传感器配置、运行仿真

LGSVL Simulator(现为LG SVL Simulator,后由Aptiv等社区维护)是自动驾驶开发中常用的开源高保真仿真平台。它基于Unity引擎,能够提供逼真的物理环境、传感器模型和场景交互能力。对于初学者而言,掌握其基础操作是进行后续算法验证、场景测试和系统集成的第一步。本章将围绕LGSVL的五大核心操作模块——界面导航、地图加载、车辆选择、传感器配置和运行仿真——展开系统讲解,帮助学员建立从“打开软件”到“跑通第一个仿真任务”的完整操作链路。

LGSVL 基础操作链路与核心模块关系图 1. 界面导航 主窗口/工具栏/菜单栏 2. 地图加载 Apollo/HD Map/自定义 3. 车辆选择 车型/传感器配置预设 4. 传感器配置 Camera/LiDAR/Radar/IMU 5. 运行仿真 Play/暂停/步进/停止 辅助功能 天气/交通流/行人 NPC车辆/路测控制 坐标/速度/状态监控 数据输出与接口 ROS2 / CyberRT Bridge 传感器Topic / 车辆状态 场景录制 / 回放 核心操作链路:界面导航 → 地图加载 → 车辆选择 → 传感器配置 → 运行仿真

上图展示了LGSVL基础操作的完整链路。从界面导航开始,依次经过地图加载、车辆选择、传感器配置,最终进入运行仿真阶段。右侧的辅助功能模块(天气、交通流、NPC等)和底部数据输出接口(ROS2/CyberRT Bridge)贯穿整个操作过程,是后续进行算法联调的关键。下面我们将逐一深入每个模块的具体操作与原理。

3.1 界面导航:熟悉LGSVL的布局与核心面板

核心原理

LGSVL的界面基于Unity编辑器风格设计,主要分为菜单栏、工具栏、场景视图(Scene View)、游戏视图(Game View)、层级面板(Hierarchy)、检查器面板(Inspector)和项目面板(Project)。理解这些面板的分工是高效操作的前提。场景视图用于编辑和预览仿真环境,游戏视图则模拟最终渲染效果,层级面板列出当前场景中的所有对象,检查器面板显示选中对象的属性(如位置、旋转、缩放、组件配置),项目面板管理资源文件(如地图、车辆预制体、传感器配置)。

操作流程

  1. 启动与主窗口:双击LGSVL图标启动模拟器,首次启动会进入主菜单(Main Menu),包含“Open Scene”、“Edit Mode”、“Simulation Mode”等选项。选择“Simulation Mode”进入仿真运行界面。
  2. 工具栏操作:顶部工具栏提供“Play”、“Pause”、“Step”和“Stop”按钮。Play开始仿真,Pause暂停,Step单步执行(用于调试),Stop停止并重置场景。
  3. 视图切换:使用鼠标右键拖动旋转视角,滚轮缩放,按住鼠标中键平移。在Scene View中,可按F键聚焦选中对象。
  4. 面板布局调整:每个面板都可以拖动、停靠或浮动。若面板意外关闭,可通过菜单栏“Window”重新打开。
经验提醒:在仿真运行前,建议先在Scene View中检查地图和车辆位置,避免车辆初始位置与地图碰撞体重叠导致仿真崩溃。使用Game View可以实时观察传感器视角(如摄像头画面),但会消耗较多GPU资源,低配机器可关闭Game View仅保留Scene View。

案例拆解:首次启动后的界面检查

假设你刚安装完LGSVL,双击图标后进入主菜单。此时不要急于加载地图,先点击“Simulation Mode”进入空场景。检查右下角的“Simulator Status”面板,确认版本号与Unity版本匹配。然后依次点击菜单栏的“Window”->“Layouts”->“Default”,恢复默认布局。在Hierarchy面板中,你会看到默认的“Main Camera”和“Directional Light”。此时可以拖动鼠标旋转视角,熟悉场景操作手感。这个简单的检查流程能避免后续因界面错乱导致的误操作。

风险提示:LGSVL对显卡驱动要求较高,若界面出现花屏或闪烁,请更新显卡驱动并关闭其他占用GPU的程序。另外,不要随意删除Hierarchy中的“Main Camera”,否则仿真画面将无法渲染。

常见误区与复盘

  • 误区一:混淆Scene View和Game View。Scene View是编辑视角,Game View是最终渲染视角,两者操作逻辑不同。
  • 误区二:忽略工具栏的“Step”按钮。在调试传感器数据时,单步执行能逐帧分析,非常有用。
  • 复盘:每次进入新场景前,先重置布局并检查状态栏,形成肌肉记忆。

3.2 地图加载:从内置地图到自定义高精地图

核心原理

LGSVL支持多种地图格式,包括内置的Unity场景地图、Apollo的HD Map(高精地图)以及通过RoadRunner等工具导出的自定义地图。地图加载的本质是将地图文件(如XML、FBX、3D Tiles)解析为Unity场景中的GameObject,并生成对应的碰撞体、车道线、交通信号等语义信息。地图的坐标系与真实世界坐标(经纬度)通过OriginGeoCoordinate进行绑定。

操作流程

  1. 打开地图选择界面:在Simulation Mode下,点击左侧的“Maps”标签页,点击“Add New”按钮。
  2. 选择地图来源:可从“Available Maps”列表中选择内置地图(如“SanFrancisco”、“BorregasAve”),或点击“Import”导入外部地图文件。
  3. 配置地图参数:导入后,需设置地图的“Origin”经纬度坐标,以及“Map Version”(如Apollo 5.0)。
  4. 加载与验证:点击地图名称,然后点击“Load”按钮。加载完成后,在Scene View中检查地图是否完整,道路是否连续。
地图类型文件格式适用场景加载方式
内置地图Unity场景快速测试、算法验证直接选择
Apollo HD MapXML/OSM与Apollo系统联调Import后配置Origin
自定义地图FBX/GLTF特定园区、测试场需配套生成碰撞体
关键点:地图的Origin坐标必须与车辆初始位置、传感器标定参数保持一致,否则会导致GPS定位漂移和传感器数据错位。例如,在BorregasAve地图中,Origin通常设置为(37.335480, -121.881028),车辆初始位置应在此坐标附近。

案例拆解:加载Apollo 5.0地图并验证车道线

假设你正在开发基于Apollo的感知算法,需要加载“SanFrancisco”地图。操作步骤如下:

  1. 点击“Add New”,选择“Import”并找到Apollo地图文件夹中的“base_map.xml”。
  2. 在“Map Origin”中填入旧金山的经纬度(37.7749, -122.4194)。
  3. 点击“Load”,等待地图编译。编译完成后,在Scene View中放大检查一条双向四车道,确认车道线、停止线、红绿灯模型是否完整。
  4. 若发现车道线缺失,检查地图文件是否包含“lane”标签,并确认LGSVL版本与Apollo地图版本兼容。

此案例中,关键指标是地图加载时间(应小于30秒)和车道线数量(与真实道路一致)。若加载时间过长,可能是地图文件过大或电脑内存不足。

风险提示:不要加载与LGSVL版本不兼容的高精地图,否则可能导致场景崩溃或传感器数据异常。建议使用官方推荐的Apollo 5.0或6.0地图版本。

常见误区与复盘

  • 误区一:忘记设置Origin坐标,导致车辆定位到地图外。
  • 误区二:导入地图后不检查碰撞体,车辆直接穿过地面。
  • 复盘:加载地图后,先按“Play”运行几秒,观察车辆是否稳定停在地面上,再开始后续配置。

3.3 车辆选择:匹配车型与传感器预设

核心原理

LGSVL提供多种车辆模型,如“Lexus RX 450h”、“Lincoln MKZ”等,每种车型具有不同的物理参数(质量、轴距、转向半径)和外观。车辆选择的核心是匹配你的算法需求:例如,进行泊车测试时选择轴距较短的车型,进行高速巡航测试时选择空气动力学更好的车型。同时,车辆预制体(Prefab)中通常预置了传感器配置,选择车辆后仍需确认传感器是否满足需求。

操作流程

  1. 打开车辆选择界面:在Simulation Mode下,点击左侧的“Vehicles”标签页。
  2. 添加车辆:点击“Add New”,从列表中选择车型,或点击“Import”导入自定义车辆模型(需符合LGSVL的车辆规格)。
  3. 配置车辆参数:选中车辆后,在Inspector面板中可调整车辆颜色、初始位置(X, Y, Z)和朝向(Yaw)。
  4. 检查传感器挂载:展开车辆层级,查看“SensorSuite”下是否包含所需的传感器(如Camera、LiDAR)。
经验提醒:若选择“Lincoln MKZ”车型,其默认传感器配置包含一个64线LiDAR和6个摄像头,适合大多数感知测试。若需使用不同传感器组合,建议在“传感器配置”步骤中重新添加,而不是直接修改默认配置。

案例拆解:为园区物流车选择合适车型

假设你要测试一个低速园区物流算法,要求车辆最高速度不超过20km/h,且需要精确的倒车入库能力。此时选择“Lexus RX 450h”可能过于宽大,而“Lincoln MKZ”的转向半径较大。更优的选择是导入一个自定义的小型厢式货车模型,或者使用内置的“Jeep Grand Cherokee”并调整其最大速度参数。在车辆参数中,将“Max Speed”设为5.5m/s(约20km/h),并将“Steering Ratio”调大以增加转向灵敏度。此案例中,关键参数是轴距(影响转弯半径)和最大速度。

常见误区与复盘

  • 误区一:只关注车辆外观,忽略物理参数对控制算法的影响。
  • 误区二:车辆初始位置设置在地图边界外,导致仿真启动即报错。
  • 复盘:选择车辆后,先在Scene View中按“F”聚焦车辆,确认其位于道路内,且车头方向与车道方向一致。

3.4 传感器配置:构建你的感知系统

核心原理

传感器配置是LGSVL中最核心的环节之一。LGSVL通过Unity的组件系统模拟传感器,每个传感器(如Camera、LiDAR、Radar、IMU)都是一个挂载在车辆上的GameObject,并带有特定的脚本(如“CameraSensor.cs”)。传感器配置的关键参数包括:安装位置(相对车辆坐标)、分辨率、视场角(FOV)、帧率、噪声模型等。这些参数直接影响仿真数据的真实性和算法测试的有效性。

操作流程

  1. 选中车辆:在Hierarchy面板中点击车辆对象。
  2. 添加传感器:在Inspector面板中点击“Add Component”,搜索“Sensor”并选择所需类型。
  3. 配置传感器参数:以Camera为例,需设置“Width”(如1920)、“Height”(如1080)、“FOV”(如60°)、“Near Clip”(0.3m)、“Far Clip”(1000m)。
  4. 设置数据输出:在传感器的“Bridge Connector”中,选择已配置的Bridge(如ROS2 Bridge),并指定Topic名称(如“/camera/center”)。
  5. 验证传感器:点击Play运行仿真,在Game View中切换至传感器视角,确认画面正常。
传感器类型关键参数典型值输出Topic示例
Camera分辨率、FOV、帧率1920x1080, 60°, 20Hz/camera/center
LiDAR线数、频率、范围64线, 10Hz, 100m/lidar/points
Radar最大距离、角度分辨率200m, 1°/radar/tracks
IMU加速度计/陀螺仪范围±4g, ±500°/s/imu/data
关键点:传感器坐标系的定义至关重要。LGSVL遵循ROS的REP-103规范,X轴向前,Y轴向左,Z轴向上。安装传感器时,需确保其局部坐标系的朝向正确,否则点云或图像数据将发生旋转错位。

案例拆解:配置一个前视摄像头与64线LiDAR组合

假设你需要测试一个融合感知算法,需要前视摄像头和车顶LiDAR。操作如下:

  1. 在车辆下添加一个Camera传感器,设置位置为(1.5, 1.2, 0.5)(相对车辆中心),旋转为(0, 0, 0)。
  2. 设置分辨率为1920x1080,FOV为70°,帧率为20Hz。
  3. 添加一个LiDAR传感器,位置为(0, 1.8, 0),旋转为(0, 0, 0)。选择“64E1”型号,设置频率为10Hz,点云数量约120万点/秒。
  4. 在Bridge Connector中,分别设置Topic为“/camera/center”和“/lidar/points”。
  5. 运行仿真,在终端中使用ros2 topic hz /camera/center验证频率,使用ros2 topic echo /lidar/points查看点云数据。

此案例中,关键指标是摄像头帧率是否稳定在20Hz,LiDAR点云是否包含地面和周围车辆。若点云出现“空洞”,可能是LiDAR的“Min Range”设置过大(如设为1m),导致近处物体被过滤。

风险提示:传感器数量过多或分辨率过高会严重拖慢仿真速度。建议在算法调试阶段使用较低分辨率(如640x480),在最终验证时再调高。

常见误区与复盘

  • 误区一:传感器位置设置错误,导致摄像头被车顶遮挡。
  • 误区二:忘记设置Bridge Connector,导致数据无法发送到ROS。
  • 复盘:配置完传感器后,先运行仿真并检查Topic列表,确认所有传感器都在发布数据。

3.5 运行仿真:从Play到数据采集

核心原理

运行仿真是将地图、车辆、传感器和场景动态(如交通流、行人)整合起来,通过物理引擎实时计算并输出数据的过程。LGSVL支持两种运行模式:实时模式(Real-time)和加速模式(Accelerated)。实时模式以1倍速运行,适合与外部算法联调;加速模式可提升至10倍速,适合批量场景测试。仿真运行的核心是“Simulation Loop”,它每帧更新车辆状态、传感器数据和环境动态。

操作流程

  1. 启动仿真:点击工具栏的“Play”按钮,或按快捷键Ctrl+P。
  2. 监控状态:观察Scene View中的车辆运动,检查Game View中的传感器画面。
  3. 控制仿真:使用“Pause”暂停,“Step”单步,“Stop”停止并重置。
  4. 数据采集:在外部终端中,通过ROS2或CyberRT订阅Topic,记录数据包(ros2 bag record)。
  5. 场景控制:在左侧的“Simulation”面板中,可添加NPC车辆、设置天气、调整交通流密度。
经验提醒:在运行仿真前,务必检查“Simulation Mode”中的“Time Scale”设置。若设置为0,仿真将不会推进,但传感器仍会发布数据(用于单帧调试)。若设置为2,则仿真速度加倍,但传感器帧率可能不稳定。

案例拆解:运行一个包含交通流的城市道路场景

假设你要测试车辆的变道算法,需要模拟城市快速路的交通流。操作如下:

  1. 加载“SanFrancisco”地图,选择“Lincoln MKZ”车辆,配置好传感器。
  2. 在“Simulation”面板中,点击“Add NPC”,选择“Sedan”类型,设置数量为20辆。
  3. 设置“Traffic Density”为“High”,并启用“Random Traffic”模式。
  4. 点击Play运行仿真。观察车辆是否自动跟随前车,并尝试在外部发送变道指令(通过ROS2 Topic)。
  5. 使用ros2 bag record -a录制所有数据,用于后续离线分析。

此案例中,关键指标是仿真帧率(应保持>15FPS)和NPC车辆的行为合理性(如是否闯红灯、是否发生碰撞)。若帧率过低,可减少NPC数量或降低传感器分辨率。

风险提示:在加速模式下,传感器数据的时间戳可能不准确,导致算法时间同步出错。建议在需要精确时间戳的场景中使用实时模式。

常见误区与复盘

  • 误区一:忘记设置车辆初始速度,导致车辆静止不动。
  • 误区二:在仿真运行中修改传感器参数,导致数据中断。
  • 复盘:每次运行前,先检查“Simulation Status”面板中的“FPS”和“Sim Time”,确保仿真健康运行。

3.6 综合实战:从零开始跑通一个自动驾驶感知Demo

场景与目标

本实战将综合运用本章所有知识点,完成一个“车辆检测”Demo。目标是在LGSVL中加载地图、配置车辆与传感器,并通过ROS2订阅摄像头图像,使用YOLOv5进行实时车辆检测。约束条件:使用内置“BorregasAve”地图,车辆为“Lexus RX 450h”,传感器仅使用前视摄像头(分辨率1280x720,FOV 60°),运行环境为Ubuntu 20.04 + ROS2 Foxy。

操作步骤与关键数据

  1. 地图加载:加载“BorregasAve”地图,设置Origin为(37.335480, -121.881028)。
  2. 车辆配置:添加“Lexus RX 450h”,设置初始位置为(0, 0, 0),朝向为(0, 0, 0)。
  3. 传感器配置:添加Camera传感器,位置(1.2, 1.0, 0.3),旋转(0, 0, 0)。设置Topic为“/camera/raw”。
  4. 启动仿真:点击Play,确认摄像头画面正常。
  5. 外部算法联调:在终端中运行ros2 run yolov5_ros yolo_detect,订阅“/camera/raw”并发布检测结果。

关键指标:摄像头帧率稳定在25Hz,检测算法推理时间小于50ms,检测框准确率在简单场景下大于90%。

结果与复盘

运行5分钟后,检测算法成功识别出场景中的3辆NPC车辆和1个行人。但发现当车辆转弯时,检测框出现抖动。分析原因:摄像头安装位置靠近车辆边缘,转弯时车身遮挡部分视野。解决方案:将摄像头位置移至车辆中心(0, 1.2, 0.5),并增加“Anti-Flicker”滤波。此案例表明,传感器安装位置对算法性能有直接影响,需根据实际场景反复调整。

总结复盘:本章从界面导航到运行仿真,构建了LGSVL操作的完整闭环。核心要点是:地图加载需验证Origin坐标,车辆选择需匹配物理参数,传感器配置需关注坐标系与Bridge连接,运行仿真需监控帧率与数据流。掌握这些基础操作后,即可进行更复杂的场景编辑和算法集成。