3、LGSVL基础操作:界面导航、地图加载、车辆选择、传感器配置、运行仿真
LGSVL Simulator(现为LG SVL Simulator,后由Aptiv等社区维护)是自动驾驶开发中常用的开源高保真仿真平台。它基于Unity引擎,能够提供逼真的物理环境、传感器模型和场景交互能力。对于初学者而言,掌握其基础操作是进行后续算法验证、场景测试和系统集成的第一步。本章将围绕LGSVL的五大核心操作模块——界面导航、地图加载、车辆选择、传感器配置和运行仿真——展开系统讲解,帮助学员建立从“打开软件”到“跑通第一个仿真任务”的完整操作链路。
上图展示了LGSVL基础操作的完整链路。从界面导航开始,依次经过地图加载、车辆选择、传感器配置,最终进入运行仿真阶段。右侧的辅助功能模块(天气、交通流、NPC等)和底部数据输出接口(ROS2/CyberRT Bridge)贯穿整个操作过程,是后续进行算法联调的关键。下面我们将逐一深入每个模块的具体操作与原理。
3.1 界面导航:熟悉LGSVL的布局与核心面板
核心原理
LGSVL的界面基于Unity编辑器风格设计,主要分为菜单栏、工具栏、场景视图(Scene View)、游戏视图(Game View)、层级面板(Hierarchy)、检查器面板(Inspector)和项目面板(Project)。理解这些面板的分工是高效操作的前提。场景视图用于编辑和预览仿真环境,游戏视图则模拟最终渲染效果,层级面板列出当前场景中的所有对象,检查器面板显示选中对象的属性(如位置、旋转、缩放、组件配置),项目面板管理资源文件(如地图、车辆预制体、传感器配置)。
操作流程
- 启动与主窗口:双击LGSVL图标启动模拟器,首次启动会进入主菜单(Main Menu),包含“Open Scene”、“Edit Mode”、“Simulation Mode”等选项。选择“Simulation Mode”进入仿真运行界面。
- 工具栏操作:顶部工具栏提供“Play”、“Pause”、“Step”和“Stop”按钮。Play开始仿真,Pause暂停,Step单步执行(用于调试),Stop停止并重置场景。
- 视图切换:使用鼠标右键拖动旋转视角,滚轮缩放,按住鼠标中键平移。在Scene View中,可按F键聚焦选中对象。
- 面板布局调整:每个面板都可以拖动、停靠或浮动。若面板意外关闭,可通过菜单栏“Window”重新打开。
案例拆解:首次启动后的界面检查
假设你刚安装完LGSVL,双击图标后进入主菜单。此时不要急于加载地图,先点击“Simulation Mode”进入空场景。检查右下角的“Simulator Status”面板,确认版本号与Unity版本匹配。然后依次点击菜单栏的“Window”->“Layouts”->“Default”,恢复默认布局。在Hierarchy面板中,你会看到默认的“Main Camera”和“Directional Light”。此时可以拖动鼠标旋转视角,熟悉场景操作手感。这个简单的检查流程能避免后续因界面错乱导致的误操作。
常见误区与复盘
- 误区一:混淆Scene View和Game View。Scene View是编辑视角,Game View是最终渲染视角,两者操作逻辑不同。
- 误区二:忽略工具栏的“Step”按钮。在调试传感器数据时,单步执行能逐帧分析,非常有用。
- 复盘:每次进入新场景前,先重置布局并检查状态栏,形成肌肉记忆。
3.2 地图加载:从内置地图到自定义高精地图
核心原理
LGSVL支持多种地图格式,包括内置的Unity场景地图、Apollo的HD Map(高精地图)以及通过RoadRunner等工具导出的自定义地图。地图加载的本质是将地图文件(如XML、FBX、3D Tiles)解析为Unity场景中的GameObject,并生成对应的碰撞体、车道线、交通信号等语义信息。地图的坐标系与真实世界坐标(经纬度)通过OriginGeoCoordinate进行绑定。
操作流程
- 打开地图选择界面:在Simulation Mode下,点击左侧的“Maps”标签页,点击“Add New”按钮。
- 选择地图来源:可从“Available Maps”列表中选择内置地图(如“SanFrancisco”、“BorregasAve”),或点击“Import”导入外部地图文件。
- 配置地图参数:导入后,需设置地图的“Origin”经纬度坐标,以及“Map Version”(如Apollo 5.0)。
- 加载与验证:点击地图名称,然后点击“Load”按钮。加载完成后,在Scene View中检查地图是否完整,道路是否连续。
| 地图类型 | 文件格式 | 适用场景 | 加载方式 |
|---|---|---|---|
| 内置地图 | Unity场景 | 快速测试、算法验证 | 直接选择 |
| Apollo HD Map | XML/OSM | 与Apollo系统联调 | Import后配置Origin |
| 自定义地图 | FBX/GLTF | 特定园区、测试场 | 需配套生成碰撞体 |
案例拆解:加载Apollo 5.0地图并验证车道线
假设你正在开发基于Apollo的感知算法,需要加载“SanFrancisco”地图。操作步骤如下:
- 点击“Add New”,选择“Import”并找到Apollo地图文件夹中的“base_map.xml”。
- 在“Map Origin”中填入旧金山的经纬度(37.7749, -122.4194)。
- 点击“Load”,等待地图编译。编译完成后,在Scene View中放大检查一条双向四车道,确认车道线、停止线、红绿灯模型是否完整。
- 若发现车道线缺失,检查地图文件是否包含“lane”标签,并确认LGSVL版本与Apollo地图版本兼容。
此案例中,关键指标是地图加载时间(应小于30秒)和车道线数量(与真实道路一致)。若加载时间过长,可能是地图文件过大或电脑内存不足。
常见误区与复盘
- 误区一:忘记设置Origin坐标,导致车辆定位到地图外。
- 误区二:导入地图后不检查碰撞体,车辆直接穿过地面。
- 复盘:加载地图后,先按“Play”运行几秒,观察车辆是否稳定停在地面上,再开始后续配置。
3.3 车辆选择:匹配车型与传感器预设
核心原理
LGSVL提供多种车辆模型,如“Lexus RX 450h”、“Lincoln MKZ”等,每种车型具有不同的物理参数(质量、轴距、转向半径)和外观。车辆选择的核心是匹配你的算法需求:例如,进行泊车测试时选择轴距较短的车型,进行高速巡航测试时选择空气动力学更好的车型。同时,车辆预制体(Prefab)中通常预置了传感器配置,选择车辆后仍需确认传感器是否满足需求。
操作流程
- 打开车辆选择界面:在Simulation Mode下,点击左侧的“Vehicles”标签页。
- 添加车辆:点击“Add New”,从列表中选择车型,或点击“Import”导入自定义车辆模型(需符合LGSVL的车辆规格)。
- 配置车辆参数:选中车辆后,在Inspector面板中可调整车辆颜色、初始位置(X, Y, Z)和朝向(Yaw)。
- 检查传感器挂载:展开车辆层级,查看“SensorSuite”下是否包含所需的传感器(如Camera、LiDAR)。
案例拆解:为园区物流车选择合适车型
假设你要测试一个低速园区物流算法,要求车辆最高速度不超过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)、帧率、噪声模型等。这些参数直接影响仿真数据的真实性和算法测试的有效性。
操作流程
- 选中车辆:在Hierarchy面板中点击车辆对象。
- 添加传感器:在Inspector面板中点击“Add Component”,搜索“Sensor”并选择所需类型。
- 配置传感器参数:以Camera为例,需设置“Width”(如1920)、“Height”(如1080)、“FOV”(如60°)、“Near Clip”(0.3m)、“Far Clip”(1000m)。
- 设置数据输出:在传感器的“Bridge Connector”中,选择已配置的Bridge(如ROS2 Bridge),并指定Topic名称(如“/camera/center”)。
- 验证传感器:点击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 |
案例拆解:配置一个前视摄像头与64线LiDAR组合
假设你需要测试一个融合感知算法,需要前视摄像头和车顶LiDAR。操作如下:
- 在车辆下添加一个Camera传感器,设置位置为(1.5, 1.2, 0.5)(相对车辆中心),旋转为(0, 0, 0)。
- 设置分辨率为1920x1080,FOV为70°,帧率为20Hz。
- 添加一个LiDAR传感器,位置为(0, 1.8, 0),旋转为(0, 0, 0)。选择“64E1”型号,设置频率为10Hz,点云数量约120万点/秒。
- 在Bridge Connector中,分别设置Topic为“/camera/center”和“/lidar/points”。
- 运行仿真,在终端中使用
ros2 topic hz /camera/center验证频率,使用ros2 topic echo /lidar/points查看点云数据。
此案例中,关键指标是摄像头帧率是否稳定在20Hz,LiDAR点云是否包含地面和周围车辆。若点云出现“空洞”,可能是LiDAR的“Min Range”设置过大(如设为1m),导致近处物体被过滤。
常见误区与复盘
- 误区一:传感器位置设置错误,导致摄像头被车顶遮挡。
- 误区二:忘记设置Bridge Connector,导致数据无法发送到ROS。
- 复盘:配置完传感器后,先运行仿真并检查Topic列表,确认所有传感器都在发布数据。
3.5 运行仿真:从Play到数据采集
核心原理
运行仿真是将地图、车辆、传感器和场景动态(如交通流、行人)整合起来,通过物理引擎实时计算并输出数据的过程。LGSVL支持两种运行模式:实时模式(Real-time)和加速模式(Accelerated)。实时模式以1倍速运行,适合与外部算法联调;加速模式可提升至10倍速,适合批量场景测试。仿真运行的核心是“Simulation Loop”,它每帧更新车辆状态、传感器数据和环境动态。
操作流程
- 启动仿真:点击工具栏的“Play”按钮,或按快捷键Ctrl+P。
- 监控状态:观察Scene View中的车辆运动,检查Game View中的传感器画面。
- 控制仿真:使用“Pause”暂停,“Step”单步,“Stop”停止并重置。
- 数据采集:在外部终端中,通过ROS2或CyberRT订阅Topic,记录数据包(ros2 bag record)。
- 场景控制:在左侧的“Simulation”面板中,可添加NPC车辆、设置天气、调整交通流密度。
案例拆解:运行一个包含交通流的城市道路场景
假设你要测试车辆的变道算法,需要模拟城市快速路的交通流。操作如下:
- 加载“SanFrancisco”地图,选择“Lincoln MKZ”车辆,配置好传感器。
- 在“Simulation”面板中,点击“Add NPC”,选择“Sedan”类型,设置数量为20辆。
- 设置“Traffic Density”为“High”,并启用“Random Traffic”模式。
- 点击Play运行仿真。观察车辆是否自动跟随前车,并尝试在外部发送变道指令(通过ROS2 Topic)。
- 使用
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。
操作步骤与关键数据
- 地图加载:加载“BorregasAve”地图,设置Origin为(37.335480, -121.881028)。
- 车辆配置:添加“Lexus RX 450h”,设置初始位置为(0, 0, 0),朝向为(0, 0, 0)。
- 传感器配置:添加Camera传感器,位置(1.2, 1.0, 0.3),旋转(0, 0, 0)。设置Topic为“/camera/raw”。
- 启动仿真:点击Play,确认摄像头画面正常。
- 外部算法联调:在终端中运行
ros2 run yolov5_ros yolo_detect,订阅“/camera/raw”并发布检测结果。
关键指标:摄像头帧率稳定在25Hz,检测算法推理时间小于50ms,检测框准确率在简单场景下大于90%。
结果与复盘
运行5分钟后,检测算法成功识别出场景中的3辆NPC车辆和1个行人。但发现当车辆转弯时,检测框出现抖动。分析原因:摄像头安装位置靠近车辆边缘,转弯时车身遮挡部分视野。解决方案:将摄像头位置移至车辆中心(0, 1.2, 0.5),并增加“Anti-Flicker”滤波。此案例表明,传感器安装位置对算法性能有直接影响,需根据实际场景反复调整。