环境:
本文讲解的是如何在 LGSVL仿真器中测试自动驾驶车辆的感知能力,包括视觉感知、激光雷达感知以及多传感器的感知融合,主要目的是初步了解到 Apollo 感知模块整体结构以及各个模块的主要组成部分,对各感知模块的输入输出有比较清晰的认识。
目前关于视觉部分红绿灯检测和障碍物检测的模块化测试没成功,之后再进行补充。可以先看之后的激光雷达感知和 LGSVL 传感器感知。(#-.-)
进入 svlsimulator 官网给自己的无人车添加激光雷达传感器,调整传感器的位置。
可以参考如下的车辆JSON配置:
"name": "Lidar Sensor",
"parent": null,
"pluginId": "b30d0478-8c7b-4687-bfc2-b3cdb3f5faff",
"sortKey": 9,
"plugin": {
"isFavored": true,
"isShared": false,
"isOwned": false,
"accessInfo": {
"userAccessType": "favored",
"owner": {
"id": "0d888b00-fa53-47c1-882a-b68391268a11",
"firstName": "SVL",
"lastName": "Content"
}
},
"supportedSimulatorVersions": [
"2021.3",
"2021.2",
"2021.2.2",
"2021.1",
"2021.1.1"
],
"id": "b30d0478-8c7b-4687-bfc2-b3cdb3f5faff",
"name": "Lidar Sensor",
"type": "LidarSensor",
"category": "sensor",
"ownerId": "0d888b00-fa53-47c1-882a-b68391268a11",
"accessType": "public",
"description": "This sensor returns a point cloud after 1 revolution.\nSee https://www.svlsimulator.com/docs/simulation-content/sensors-list/#lidar for more details.",
"copyright": "LG Electronics Inc.",
"licenseName": "LG Content",
"imageUrl": "/api/v1/assets/download/preview/dd44a969-c038-4966-a39f-a445ab3b6c00",
"status": "active",
"owner": {
"id": "0d888b00-fa53-47c1-882a-b68391268a11",
"firstName": "SVL",
"lastName": "Content"
},
"shareRequests": []
},
"type": "LidarSensor"
注意:我添加的是128线激光雷达,话题名称为 /apollo/sensor/lidar128/compensator/PointCloud2,参考坐标名称为 velodyne128。如果使用其他线束的激光雷达,需要修改 /apollo/modules/perception/production/dag/目录下的dag_streaming_perception.dag 文件和 /apollo/modules/perception/production/conf/perception/lidar目录下的velodyne128_detection_conf.pb.txt 文件。
例如 23 行修改成与 LGSVL 上 Lidar 输出的相同话题名称。
vim modules/perception/production/dag/dag_streaming_perception.dag
vim modules/perception/production/conf/perception/lidar/velodyne128_detection_conf.pb.txt
完成激光雷达的设置后,启动Apollo Docker容器和 LGSVL 仿真器,打开Dreamview http://localhost:8888/,在上方选择对应的模式、车型以及地图(根据自己的仿真环境选择相应的地图)。
在Module Controller标签页启动Perception模块。
正常情况下的显示如下,可以看到感知模块对点云进行了处理,最终实现目标的识别。
Apollo 视觉感知模块输入输出如下图所示:
Apollo 激光雷达感知模块输入输出如下图所示:
多传感器融合后感知模块的输入输出如下图所示:
对比上面三张图可以看出,检测红绿灯模块的输出话题为 /apollo/perception/traffic_light,检测障碍物模块的输出话题为 /apollo/perception/obstacles (具有航向、速度和分类信息的三维障碍物轨迹)和 /perception/inner/PrefusedObjects (输出给融合模块的障碍物信息)。
LGSVL 仿真器提供了3D Ground Truth sensor 和 Signal sensor,分别用作障碍物检测(输出话题为/apollo/perception/obstacles)和交通灯检测(输出话题为/apollo/perception/traffic_light),换句话说,如果添加以上两种传感器,就可以完全绕过 Apollo 的感知模块,直接获取到红绿灯检测的信息和障碍物信息。 当然,这也就没必要给车辆添加激光雷达、相机和毫米波雷达等传感器(如果是需要显示图像、点云信息的话还是得添加相关的传感器),同理Perception 和 Traffic light 模块也就没有启动的必要。
3D Ground Truth sensor替换 Apollo 的对象检测模块。输出话题 /apollo/perception/obstacles 。
Signal sensor 替换 Apollo 的红绿灯检测模块。输出话题为 /apollo/perception/traffic_light 。
【1】Apollo视觉感知能力介绍
【2】Apollo激光雷达感知介绍
【3】Apollo感知融合能力介绍
【4】LGSVL 仿真器官方文档