8. 《自动驾驶与机器人中的SLAM技术》基于保存的自定义NDT地图文件进行自动驾驶车辆的激光定位

发布时间:2024年01月12日

目录

1.?为?NDT 设计一个匹配度评估指标,利用该指标可以判断 NDT 匹配的好坏。

2.?利用第 1 题的指标,修改程序,实现 mapping 部分的回环检测。

3.?将建图结果导出为 NDT map,即将 NDT 体素内的均值和协方差都存储成文件。

4. 实现基于 NDT map 的激光定位。根据车辆实时位姿,加载所需的 NDT 体素并完成定位。

5. 给出上述结果相比于 PCL NDT 的性能、存储空间等关键指标

1.?为?NDT 设计一个匹配度评估指标,利用该指标可以判断 NDT 匹配的好坏。

2.?利用第 1 题的指标,修改程序,实现 mapping 部分的回环检测。

下图是 PCL 版本 NDT 匹配,在阈值设置( ndt_score_th )为 4.5 时的匹配结果( 其中加载
的关键帧数目我删掉了一些,因为实在是耗时有点久。。。)
根据上面 PCL 版本的 NDT 检测结果来确定适配自定义指标的阈值( ndt_score_th )。
使用原来的阈值明显不对,观察,得分在 0.2 附近,于是试着在这个范围寻找合适的阈值。
可见,阈值设置为 0.15 pcl 版本的阈值为 4.5 时的结果差不多。

3.?将建图结果导出为 NDT map,即将 NDT 体素内的均值和协方差都存储成文件。

这里参考 split_map.cc 代码的内容:加载关键帧对应的点云,对其进行滤波,然后计算点
云中的每个点对应的地图区块 id ,最后将区块索引和对应点云分别存储起来。
我们要导出 NDT map ,需要构建 NDT 体素并计算均值和协方差,这些在第七章的 ndt_3d.h
SetTarge 函数中已经实现。
保存的结果:

4. 实现基于 NDT map 的激光定位。根据车辆实时位姿,加载所需的 NDT 体素并完成定位。

原先基于点云地图的激光定位使用的是 PCL 版本 NDT RTK 角度搜索中用到了 10 米, 5 米, 4 米, 2 米的多分辨率 NDT 匹配来确定 RTK 的朝向,所以实现基于 NDT map 的激光定位,也需要加载多分辨率 的体素,所以参照第 3 题重新修改为保存多分辨率的 NDT map 。代码如下:
存储 NDT 体素中的均值和协方差矩阵信息。
①首先,在 fusion 初始化时配置要加载的 NDT map 路径,并参考原来的 loadMapIdex()
数,将多分辨率的 NDT 地图数据加载进来。
②接下来就是定位流程 ProcessMeasurements(m) 。首先要确定 RTK 朝向,加载多分辨率
NDT map ,使用多分辨率来进行寻找。
当然,同样也要准备卸载超出范围的 NDT 地图。
以上过程包含在 loadNdtMap 函数中。
RTK 初始化成功后后续定位流程在 LidarLocalization() 中进行。
至此,实现了基于 NDT map 进行激光定位的功能。
③实现效果:
两者定位效果差不多。
文章来源:https://blog.csdn.net/Walking_roll/article/details/135541340
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。