技术文档丨LGSVL Simulator使用详解
LGSVL Simulator是一款开源的无人驾驶仿真系统,支持Linux和Windows,可以对接Apollo及Autoware自动驾驶软件使用。运行该仿真系统需要一台带NVidia独立显卡的高配置的电脑。我下载的是Windows版本的Simulator,并通过访问指定的ip地址的方式与运行在Linux上的Apollo建立连接。
在《技术文档丨用LGSVL仿真器运行Apollo 5.0》的分享中,详细讲解了如何让LGSVL Simulator对接Apollo 5.0。本文主要讲解LGSVL Simulator本身具体使用方法。
注意:本文提到的Apollo(3.0)5.0是LG维护的一个分支,其中包含针对该仿真系统的修改,请不要使用Apollo官方版本。
这篇blog可以参考五个网页,第一个最基本的是“Getting Started”网页(具体link见下面),另外四个分别介绍WebUI的各个标签页的用法和传感器的配置。
“Getting Started”网页:
https://www.lgsvlsimulator.com/docs/getting-started/
以下,ENJOY
开始运行分三步:
1、下载最新的可执行文件(Windows或者Linux),可以用这个网页给的link,也可以直接从《官网》(链接见文末)下载。
2、确认安装了最新的NVIDIA驱动。
3、解压并运行下载的可执行文件。
如果用户希望自己编译生成可执行文件,可以参考:
https://www.lgsvlsimulator.com/docs/build-instructions/
启动Simulator以后:
1、点击中间的"Open Browser..."按钮,这会打开一个网页(Web UI),所有后续操作都在这个网页上操作。
2、在Web UI里面的Simulations页面选择地图、车辆,配置其他参数,然后运行这个Simulation(Simulator第一次运行时会默认下载8个地图、4个车辆,并用他们生成5个仿真配置)。
更具体的Web UI的使用方法可以参考以下几个页面:
《Web UI地图选项卡说明》(链接见文末),Map可以处于以下状态:
带有本地URL或已经下载的Map将具有Vaild状态。
如果这个Map资源包的URL不是本地的,并且资源包不在本地数据库中,那么该地图需要下载。当前一次只下载一个资源包。
○ 如果一个资源包正在下载,Map将显示一个灰色的点,该状态将是Downloading并显示下载百分比。
○ 如果另一个资源包正在下载,图标将是橙色的,该状态将会Downloading但是不显示下载百分比。
○ 按“stop”键可中断正在下载的Map。
如果在模拟中该Map不可用,它将处于Invalid状态。这可能是因为本地资源包不可用或下载中断。
在哪里可以找到地图
地图资源包和高精地图可以在《Content website》(链接见文末)上找到。在添加地图时,可以将指向合适资源包的链接作为URL,也可以输入本地路径手动下载资源包。
高精地图可在同一页下载。有关如何将高清地图添加到AD Stack的说明,请参阅相关文档:
《Apollo 5.0》(链接见文末)。
《Apollo 3.0》(链接见文末)。
如何添加地图
1、点击Add new按钮。
2、在打开的对话框中,输入地图的名称和相应资源包的URL。这可以是一个指向云端某个位置的URL(例如,指向《Content website》(链接见文末)上的资源包的链接)或本地驱动上的某个位置(指向environment_xxx文件的绝对路径)。
如果这个URL不在本地,资源包将被下载到本地数据库。
如何编辑地图
1、点击铅笔图标。
2、在打开的对话框中,可以更改地图的名称和指向资源包的URL。
3、如果URL发生更改,数据库中的资源包将被更新(如有必要,可下载)。
如何标注地图
如果已经在旧模拟器中(在HDRP之前)创建了地图,可以通过以下步骤在当前的HDRP模拟器中重新启用这些地图:
在旧的模拟器中
○ 需要在HDMapTool.cs(第148-154行)的header做一些改变:
◆ 将MapOrigin Northing/Easting转换为Longitude/Latitude。
◆ 用Longitude替换left和right的值。
◆ 用Latitude替换top和bottom的值。
◆ 还需要更改header的区域。
○ 如果有路口注释,需要为每个路口进行注释(具体参见《生成junction》(链接见文末)),因为在HDRP模拟器中是基于junction导入路口的。否则,信号/标志不能正确分组,每个信号/标志将作为一个路口对象被创建。
○ 导出地图到Apollo Map文件: base_map.bin。
在当前的HDRP模拟器中
○ 选择Simulator->Import HD Map,并设置Import Format为Apollo 5 HD Map。
○ 选择刚刚导出的地图并导入。
注意:需要检查十字路口,一些信号/标志可能分组不正确。
更多地图标注的内容可以参见《地图标注》(链接见文末)。
车辆可以处在以下状态:
带有本地URL或已经下载的Vehicle将处在Vaild状态。
如果到指向Vehicle的资源包的URL不是本地的,并且资源包不在本地数据库中,那么需要下载资源包。
当前一次只能下载一个资源包。
○ 如果一个资源包正在下载,Vehicle将显示一个灰色的点,该状态将是Downloading并显示下载百分比。
○ 如果另一个资源包正在下载,图标将是橙色的,该状态将会Downloading但是不显示下载百分比。
○ 按停止键可中断正在下载的Vehicle。
如果在模拟中该Vehicle不可用,它将处于Invalid状态。这可能是因为本地资源包不可用或下载中断。
在哪里可以找到车辆
车辆资源包可以在《Content website》(链接见文末)上找到。在添加车辆时,可以将指向合适资源包的链接作为URL,也可以输入本地路径手动下载资源包。
车辆的定位文件可在同一页面下载。有关如何将车辆添加到AD Stack的说明,请参阅相关文档:
《Apollo 5.0》(链接见文末)。
《Apollo 3.0》(链接见文末)。
JSON配置的示例可以在以下页面找到:
《Apollo 5.0》(链接见文末)。
《Apollo 3.0》(链接见文末)。
如何添加车辆
1、点击Add new按钮。
2、在打开的对话框中,输入车辆的名称和相应资源包的URL。这可以是一个指向云端某个位置的URL(例如,指向《Content website》(链接见文末)上的资源包的链接)或本地驱动上的某个位置(指向vehicle_xxx文件的绝对路径)。
3、如果这个URL不在本地,将会下载资源包到本地数据库。
如何编辑车辆
1、点击铅笔图标。
2、在打开的对话框中,可以更改车辆的名称和指向资源包的URL。
3、如果URL发生更改,数据库中的资源包将被更新(如有必要,可下载)。
如何更改车辆的配置
1、点击扳手图标。
2、在打开的对话框中,可以输入车辆的bridge类型和车辆的JSON配置。
3、建议使用JSON美化器使配置更具可读性。
4、桥接类型决定传感器数据将如何适配格式并发送到AD Stack。
5、在向模拟器中添加车辆时,除了No bridge之外的所有bridge类型都需要Bridge Connection String。这个字符串包括AD Stack的IP和开放端口(例如:192.168.1.100:9090)。
6、JSON确定车辆上有哪些传感器、传感器的位置、它们将在什么情况下发布数据以及车辆接受什么控制输入。
《JSON配置示例》(链接见文末)见下文。
有关所有可用传感器的完整定义以及如何将其添加到车辆上,请参见《传感器参数》(链接见文末)。
Bridge类型
No bridge:这是默认可用的Bridge。在设置模拟时不需要任何其他信息。在不需要连接到AD Stack时使用。
ROS:这个Bridge基于AV Stacks允许连接ROS1 (如Autoware)。在设置模拟配置时,ROS1 Bridge需要IP地址和端口号。
ROS Apollo:这个Bridge基于AV Stacks允许连接ROS1,需要protobuf消息格式 (像Apollo 3.0)。在设置模拟配置时,ROS1 Apollo Bridge需要IP地址和端口号。
ROS2:这个Bridge允许连接到基于AV Stacks的ROS2。在设置模拟配置时,ROS2 Bridge需要IP地址、端口号。
Cyber RT:这个Bridge允许连接到Apollo 5.0。在设置模拟配置时,Cyber RT Bridge需要IP地址、端口号。
JSON示例
这是默认车辆Jaguar2015XE(Autoware)上JSON配置的简化版本,使用ROS Bridge类型。
JSON包括一个位于车辆中心的GPS传感器,用来在 “/ nmea_sentence”上发布数据,还包括一个位于车辆中心上方2.312米的激光雷达传感器,用来在 “/ points_raw”发布数据,还有一个手动控制输入传感器,可以使用键盘来控制汽车,和一个车辆控制输入用来订阅Autoware AD Stack的控制命令。
1[
2{
3"type": "GPS Device",
4"name": "GPS",
5"params": {
6 "Frequency": 12.5,
7 "Topic": "/nmea_sentence",
8 "Frame": "gps",
9 "IgnoreMapOrigin": true
10},
11"transform": {
12 "x": 0,
13 "y": 0,
14 "z": 0,
15 "pitch": 0,
16 "yaw": 0,
17 "roll": 0
18}
19},
20{
21"type": "Lidar",
22"name": "Lidar",
23"params": {
24 "LaserCount": 32,
25 "MinDistance": 0.5,
26 "MaxDistance": 100,
27 "RotationFrequency": 10,
28 "MeasurementsPerRotation": 360,
29 "FieldOfView": 41.33,
30 "CenterAngle": 10,
31 "Compensated": true,
32 "PointColor": "#ff000000",
33 "Topic": "/points_raw",
34 "Frame": "velodyne"
35},
36"transform": {
37 "x": 0,
38 "y": 2.312,
39 "z": -0.3679201,
40 "pitch": 0,
41 "yaw": 0,
42 "roll": 0
43}
44},
45{
46"type": "Manual Control",
47"name": "Manual Car Control"
48},
49{
50"type": "Vehicle Control",
51"name": "Autoware Car Control",
52"params": {
53 "Topic": "/vehicle_cmd"
54}
55}
56]
<左右滑动以查看完整代码>
模拟可以处在以下状态:
如果可以运行,Simulation处在Vaild状态。
Simulation会因为以下几个原因而处于Invalid状态:
○ Map或者Vehicle在Simulation创建时就已经变成Invalid状态。
○ 带有Bridge的Vehicle缺少Bridge Connection String。
如何添加/编辑一个仿真
1、 点击Add new按钮或铅笔图标。
2、 打开的对话框有4个选项卡,可以改变模拟的参数:
1. 通用
Simulation Name:仿真名称。
Select Cluster:从下拉菜单中,选择将要运行模拟的计算机集群。
API Only:检查模拟是否通过Python API进行控制。检查此选项将禁用大多数其他选项,因为它们将通过API设置
Headless Mode:检查是否需要在主窗口中渲染模拟器。检查这一点将提高性能。
2. 地图&车辆
Interactive Mode: 检查此选项以启用模拟控制。
Select Map:从下拉菜单中选择要使用的地图。
Select Vehicle:从下拉菜单中,选择将要生成的车辆。
Bridge Connection String:如果所选车辆具有Bridge Type,则必须向bridge主机提供一个IP:port、
+:添加一个额外的车辆。车辆将按顺序在地图的Spawn Info位置产生信息。
3. 交通
Use Predefined Seed:检查此选项并输入一个种子[int],该种子将用于精确地控制NPCs。
Enable NPC:在模拟开始时,检查NPC车辆是否会出现。
Enable Pedestrians:检查这一点,以使行人在模拟开始时出现。
4. 天气情况
Time of Day:为模拟设置一天中的时间。
Rain:[0-1]设定应该下多少雨。
Wetness:[0-1]设置道路的湿度。
Fog:[0-1]设置是否有浓雾。
Cloudiness:[0-1]设置有多少云量。
主车上的各种传感器是由JSON文件配置的,具体参数说明在这里:
https://www.lgsvlsimulator.com/docs/sensor-json-options/
官方支持:
F1— 帮助菜单
←↑↓→— 驱动车辆前进/制动,转弯
1-0—代理选择并跟随相机
鼠标右键—按住并拖拽-查看/旋转
~—自由相机
WS—缩放
AD—扫射
QE—上/下
开发人员使用:
N—切换非玩家角色(NPC)车辆
P—切换行人
End—切换点火(必须打开,车辆才能移动)
Page Up—切换到前进档
Page Down—切换到倒车档
F12—车辆位置复位
其他操作:
H—切换前灯
F—切换雾灯
I—切换车内灯
右Shift—切换停车制动 (车辆需要熄火来移动)
M—切换警示灯
<—切换左信号灯
>—切换右信号灯
罗技G920方向盘输入:
Right Pedal RB—加速
Middle Pedal LB—制动
Rotate Wheel—转弯
A—循环通过代理
B—切换非玩家角色(NPC)车辆
X—切换传感器可视化仪器
Y—循环通过相机状态(跟踪相机、影片相机、自由相机)
Start—[侧边栏/3水平行]暂停模拟(仅限交互式模拟)
Select—[重叠方块]打开菜单
RSB—循环通过代理大灯状态
LSB—切换反向
Center—[Xbox]切换车内灯光(如果可用)
*《官网》
https://www.lgsvlsimulator.com
*《WebUI地图选项卡说明》
https://www.lgsvlsimulator.com/docs/maps-tab/
*《Apollo 5.0》
https://www.lgsvlsimulator.com/docs/apollo5-0-instructions/
https://www.lgsvlsimulator.com/docs/vehicles-tab/#apollo5-0-json-example.md
*《Apollo 3.0》
https://www.lgsvlsimulator.com/docs/apollo-instructions/
https://www.lgsvlsimulator.com/docs/vehicles-tab/#apollo-json-example.md
*《Content website》
https://content.lgsvlsimulator.com/maps/
https://content.lgsvlsimulator.com/vehicles/
*《生成junction》
https://www.lgsvlsimulator.com/docs/map-annotation/#create-junction
*《地图标注》
https://www.lgsvlsimulator.com/docs/map-annotation/
*《JSON配置示例》
https://www.lgsvlsimulator.com/docs/vehicles-tab/#example-json
*《传感器参数》
https://www.lgsvlsimulator.com/docs/sensor-json-options/
以上是"LGSVL Simulator使用详解"的全部内容,更多话题讨论、技术交流可以扫描下方二维码添加『Apollo小哥哥』为好友,进开发者交流群。