在自动驾驶技术中,感知模块负责获取自动驾驶车辆周围环境信息,是自动驾驶车辆的“眼睛”,下游模块通过感知得到的环境信息来进行下一步决策。
常用的感知传感器包括激光雷达、摄像头、毫米波雷达等,因为激光雷达传感器具备准确的障碍物定位能力等优点,Apollo 目前采取以其为主的自动驾驶感知方案。
激光雷达感知模块接受来自激光雷达驱动的点云信息,利用这些点云信息进行障碍物的检测以及跟踪,得到的结果会被输出到感知融合模块进行下一步处理。
激光雷达感知模块接收到点云数据之后,通过高精度地图 ROI(The Region of Interest)过滤器过滤 ROI 之外的点云,去除背景对象,例如:路边建筑物、树木等,过滤后的点云数据通过障碍物检测深度学习模型进行 3D 障碍物的检测和分类,然后对得到的障碍物进行跟踪,最终得到障碍物的形状、位置、类别、速度等信息。
进入 Apollo Docker 环境。
./apollo.sh
在 Docker 环境里启动 Dreamview。
bash scripts/bootstrap.sh
如果需要关闭 Dreamview,请您执行以下命令:
./scripts/bootstrap.sh stop
在浏览器中输入网址 http://localhost:8888,打开 Dreamview,选择模式、车型和地图信息
把车开到空旷场地,便于接收GPS信号(比如主楼后花园、电机楼门口等)
开启GPS、Transform、Location、Perception、Lidar模块
执行指令
cyber_monitor
查看各个模块是否已经正常启动
操作无人车运动,此时Dreamviewer应该可以观察到感知结果,类似这样(不过应该没有车道线)
之前结果的历史记录 https://www.youtube.com/watch?v=F4fSd9BWccY
使用MMDetection3D框架进行训练,在KITTI验证集上结果如下表所示,PointPillars的模型指标来自于Mmdetction3d官方。将PointPillars和模型在KITTI数据集上的检测结果进行了可视化,如下图所示。从图中可以看出模型具有更好的检出效果。可以看到,模型可以召回被截断和阻挡的车辆:
如果后续对新模型进行部署,可以使用Libtorch进行线上部署,利用Pytorch的Torch.jit.trace函数。
可以参考
"modules/perception/lidar/lib/detector/point_pillars_detection/point_pillars.cc"
为了方便Apollo模型的拓展,这里重构了检测模块以允许更多检测模型可以便捷的添加和切换。只需要修改对应的配置文件就可以选择启动不同的模型。相关的配置文件在路径下:
modules/perception/production/data/perception/lidar/models/lidar_obstacle_pipeline/
下面有多个目录,对应着不同的设备名称。对于激光雷达传感器,修改目录下的"lidar_obstacle_detection.conf"配置文件的Detector关键字即可切换检测模型。
同时,如果进行仿真和算法验证,更推荐下文中Recode数据的方法进行离线验证和仿真。该方法可以提取记录数据,并整理成文件格式(pcd等),便于实际深度学习环境下的验证。
模型的后续导出和训练可以参考MMDetection3D,也可以自己实现~