环境:
本文讲解的是 Apollo 中的 Localization 模块。当前, Apollo 提供的定位方案有三种,分别是 RTK(Real Time Kinematic)定位模块、MSF(Multi-Sensor Fusion)定位模块以及 NDT(Normal Distribution Transform)定位模块。本文中重点讲解的是MSF(Multi-Sensor Fusion)定位模块。
高精度、高鲁棒性的定位系统是自动驾驶系统不可或缺的基础模块。定位模块的作用是为 planning 模块提供车辆的位置信息,以及为 control 模块提供车辆的姿态,速度信息。
MSF 定位模块结合 GPS + IMU + Lidar 实现的多传感器融合全局定位,利用多传感器优缺点的互补,实现高精度、高鲁棒性的定位能力。对于 GPS 失效或者 Lidar 地图环境变更场景具备一定的冗余处理能力。本模块可提供城市道路、高速、部分隧道等场景下的定位能力。
MSF 定位系统以多种传感器数据和离线制作的高精度 Lidar 定位地图为输入,其中 GNSS Localization 模块以车端 GPS 信号和基站数据为输入,输出高精度 RTK 定位结果。LiDAR Localization 模块以在线 lidar 扫描数据和高精度 Lidar 定位地图为输入,提供高精度 lidar 定位结果。SINS 模块利用IMU数据进行惯性导航。后端采用 Error-state Kalman filter 融合多种传感器量测信息。最后输出高精度的车辆位置和姿态。
channel名称 | 输入输出 | 说明 |
---|---|---|
/apollo/sensor/hesai40/compensator/PointCloud2 | 输入 | 融合后的点云数据 |
/apollo/sensor/gnss/imu | 输入 | IMU 消息 |
/apollo/sensor/gnss/odometry | 输入 | 里程计消息 |
/apollo/sensor/gnss/best_pose | 输入 | GPS 位置 |
/apollo/sensor/gnss/heading | 输入 | GPS 航向角 |
/apollo/localization/msf_gnss | 输出 | GNSS 定位结果 |
/apollo/localization/msf_lidar | 输出 | Lidar 定位结果 |
/apollo/localization/pose | 输出 | 融合定位结果 |
/apollo/localization/msf_status | 输出 | 融合定位状态 |
本节利用数据集进行 msf 定位实践。
终端上执行以下指令下载完整的定位数据集
# 下载数据集
wget https://apollo-system.cdn.bcebos.com/dataset/localization/demo-localization-data-3.5.tar.gz
# 解压数据集
tar -xvf demo-localization-data-apollo-3.5.tar.gz
解压数据集后会产生四个文件夹,分别为local_map(MSF Localization 定位地图)、ndt_map(NDT Localization 定位地图)、params(车辆参数)和 records(bag 数据)。
为了使定位模块正确运行,需要对传感器外参和地图参数进行配置。
解压下载的数据集 params 文件夹下里包含两个文件夹 gnss_params 和 velodyne_params。
运行以下命令,拷贝车辆参数到定位模块目录下:
cp -r DATA_PATH/params/* /apollo/modules/localization/msf/params/
注意:DATA_PATH 代表定位数据集的路径。
打开 /apollo/modules/localization/conf/localization.conf 文件并修改 --map_dir 字段:
# 使用 vim 打开 localization.conf
vim /apollo/modules/localization/conf/localization.conf
# 移动到第五行,修改 --map_dir 字段
--map_dir=DATA_PATH
cd apollo/
./docker/scripts/dev_start.sh
./docker/scripts/dev_into.sh
./scripts/bootstrap.sh
打开Dreamview http://localhost:8888/,在上方选择对应的模式、车型以及地图(根据自己的仿真环境选择相应的地图)。
cd DATA_PATH/records
cyber_recorder play -f record.*
注意:DATA_PATH 下载定位 demo 数据的路径。
正常显示如下
黑白的背景是地图,颜色表示环境中反射值:颜色越亮表示反射值越高,颜色越暗表示反射值越低,纯黑色表示没有被激光雷达扫描到的区域。
白色车辆模型表示经过 MSF 融合算法得到的位置坐标,蓝色方框表示 GPS 位置,可以在视频中看到蓝色方框在不停跳动,但车辆位置比较稳定,说明融合定位算法提供了更好的平滑性。
按照官方教程对定位结果进行可视化,但是没有正常显示出来,弹出的窗口是黑屏和终端报错,目前尚未找到解决的方法,先将问题记录下来。
为 docker 配置 X-Server:
sudo apt install x11-xserver-utils
执行以下命令启动可视化工具:
cyber_launch start /apollo/modules/localization/launch/msf_visualizer.launch
而正常应该显示这样的结果
灰色背景表示地图,绿色细线表示原始点云数据,红色粗线圆圈表示 LiDAR 定位的置信度,绿色粗线圆圈表示 MSF 定位的置信度。
【1】Apollo定位能力介绍