在本地运行多传感器融合定位模块

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_34351547/article/details/100698271

如何在本地运行多传感器融合定位模块

​ 定位技术横跨好几个专业,包括测绘、导航、计算机视觉知识、以及点云处理的知识。业界所说的“多传感器融合”,都是指对摄像头、激光雷达、毫米波雷达、超声波雷达等多种传感器各自分别收集到的数据所做的数据融合。

​ 定位模块依赖的硬件以及数据,包括惯性测量单元 IMU、车端天线、基站、LiDAR、以及定位地图;

​ GNSS定位以及激光点云定位模块,GNSS定位(基站和车端天线辅助)输出位置及速度信息,点云定位(LiDAR和定位地图)输出位置及航向角信息;

​ 融合框架:惯性导航解算、Kalman滤波(卡尔曼滤波器/)是核心模块);融合定位输出是一个6-dof的位置和姿态,以及协方差矩阵,其结果会反过来用于GNSS定位和点云定位的预测。

配置定位模块

​ 为了使定位模块正确运行,需要对地图路径和传感器外参进行配置。假设下载的定位数据的所在路径为DATA_PATH。在进行以下步骤前,首先确定你在docker容器中。

  1. 配置传感器外参

将定位数据中的传感器外参拷贝至指定文件夹下。

cp DATA_PATH/params/ant_imu_leverarm.yaml /apollo/modules/localization/msf/params/gnss_params/  
cp DATA_PATH/params/velodyne64_novatel_extrinsics_example.yaml /apollo/modules/localization/msf/params/velodyne_params/  
cp DATA_PATH/params/velodyne64_height.yaml /apollo/modules/localization/msf/params/velodyne_params/

各个外参的意义:

ant_imu_leverarm.yaml: 杆臂值参数,GNSS天线相对Imu的距离

velodyne64_novatel_extrinsics_example.yaml:Lidar相对Imu的外参

velodyne64_height.yaml: Lidar相对地面的高度

  1. 设置地图路径
在/apollo/modules/localization/conf/localization.conf中添加关于地图路径的配置:
# Redefine the map_dir in global_flagfile.txt--map_dir=DATA_PATH
这将会覆盖global_flagfile.txt中的默认值。

运行多传感容和定位模块

./scripts/localization.sh

定位程序将在后台运行,可以通过以下命令进行查看。

ps -e | grep localization

在/apollo/data/log目录下,可以看到定位模块输出的相关文件。

localization.INFO : INFO级别的log信息

localization.WARNING : WARNING级别的log信息

localization.ERROR : ERROR级别的log信息

localization.out : 标准输出重定向文件

localizaiton.flags : 启动localization模块使用的配置

播放演示rosbag

cd DATA_PATH/bag 
rosbag play *.bag

从播放数据到定位模块开始输出定位消息,大约需要30s左右。

记录可视化定位结果

  1. 记录定位结果

该脚本会在后台运行录包程序,并将存放路径输出到终端上。

./scripts/record_bag.sh
  1. 可视化定位结果
./scripts/localization_online_visualizer.sh

该可视化工具首先根据定位地图生成用于可视化的缓存文件,存放在/apollo/data/map_visual目录下。

然后接收以下topic并进行可视化绘制。

/apollo/sensor/velodyne64/compensator/PointCloud2
/apollo/localization/msf_lidar
/apollo/localization/msf_gnss
/apollo/localization/pose
  1. 可视化效果如下: [外链图片转存失败(img-3p9BaRn1-1568096776319)(/home/zx/文档/o4YBAFwRxPyAbFd8AAU50JUQQEU029.png)]

  2. 如果发现可视化工具运行时卡顿,可使用如下命令重新编译可视化工具:

    cd /apollo bazel build -c opt //modules/localization/msf/local_tool/local_visualization/online_visual:online_local_visualizer
    

    编译选项-c opt优化程序性能,从而使可视化工具可以实时运行。

结束定位模块

./scripts/localization.sh stop

如果之前有运行步骤5的录包脚本,还需执行

./scripts/record_bag.sh stop

验证定位结果

假设步骤5中录取的数据存放路径为OUTPUT_PATH,杆臂值外参的路径为ANT_IMU_PATH

  1. 运行脚本:

./scripts/msf_local_evaluation.sh OUTPUT_PATH ANT_IMU_PATH

该脚本会以RTK定位模式为基准,将多传感器融合模式的定位结果进行对比。注意只有在GNSS信号良好,RTK定位模式运行良好的区域,这样的对比才是有意义的。

  1. 获得如下统计结果:

    [外链图片转存失败(img-bDyH4HBG-1568096776319)(/home/zx/文档/o4YBAFwRxP-AJ5KKAAKBgsAJhGY865.png)]

  2. 可以看到三组统计结果,第一组是组合导航(输出频率200hz)的统计结果,第二组是点云定位(输出频率5hz)的统计结果,第三组是GNSS定位(输出频率约1hz)的统计结果。

    表格中各项的意义:

    error: 平面误差,单位为米

    error lon: 车前进方向的误差,单位为米

    error lat: 车横向方向的误差,单位为米

    error roll: 翻滚角误差,单位为度

    error pit: 俯仰角误差,单位为度

    error yaw: 偏航角误差,单位为度

    mean: 误差的平均值

    std: 误差的标准差

    max: 误差的最大值

    <30cm: 距离误差少于30cm的帧所占的百分比

    <1.0d: 角度误差小于1.0d的帧所占的百分比

    con_frame(): 满足括号内条件的最大连续帧数


    2019年09月10日14:23:06

猜你喜欢

转载自blog.csdn.net/qq_34351547/article/details/100698271