标签:tty 论文 pre ast com src ros data string
终于到第三个模块了,我们先来回顾下之前的工作:点云数据进来后,经过前两个节点的处理可以完成一个完整但粗糙的里程计,可以概略地估计出Lidar的相对运动。如果不受任何测量噪声的影响,这个运动估计的结果足够精确,没有任何漂移,那我们可以直接利用估计的Lidar位姿和对应时刻的量测值完成建图。但这就如同现实中不存在一个不受外力就能匀速直线运动的小球一样,量测噪声是不可避免的,因此Lidar位姿估计偏差一定存在。
Lidar里程计的结果不准确,拼起来的点也完全不成样子,且它会不断发散,因此误差也会越来越大。我们对特征的提取仅仅只是关注了他们的曲率,且点云中的点是离散的,无法保证上一帧的点在下一帧中仍会被扫到。因此,我们需要依靠别的方式去优化Lidar里程计的位姿估计精度。在SLAM领域,一般会采用与地图匹配的方式来优化这一结果。我们始终认为后一时刻的观测较前一时刻带有更多的误差,换而言之,我们更加信任前一时刻结果。因此我们对已经构建地图的信任程度远高于临帧点云配准后的Lidar运动估计。所以我们可以利用已构建地图对位姿估计结果进行修正。
这一模块的功能:优化Lidar的位姿,在此基础上完成低频的环境建图
依旧从主函数开始
在订阅器订阅到了laserOdometry发布的消息后即可开始进行处理。
接下来就是较为复杂的优化处理部分,我们先看看论文怎么说的
To find correspondences for the feature points, we store the point cloud on the map,
就是说:将地图
接下来对做一些调整,确保位姿在cube中的相对位置(centerCubeI,centerCubeJ,centerCubeK)能够有一个5*5*5的邻域。
处理完毕边沿点,接下来就是在取到的子cube的5*5*5的邻域内找对应的配准点了。
接下来就准备精度更加高的配准了,首先是准备工作,我们需要两堆进行配准的点云
这样,我们就得到了用来配准的点云,接下来步入正题。我们再次拿出KD树,来寻找最邻近的5个点。对点云协方差矩阵进行主成分分析:若这五个点分布在直线上,协方差矩阵的特征值包含一个元素显著大于其余两个,与该特征值相关的特征向量表示所处直线的方向;若这五个点分布在平面上,协方差矩阵的特征值存在一个显著小的元素,与该特征值相关的特征向量表示所处平面的法线方向。
之后则是和LaserOdometry中一样的优化步骤,这里就不再贴出代码了。
在更新了位姿之后,将当前时刻的点云存入cube中,为下一次的配准做准备
最后,将点云数据发布出去
标签:tty 论文 pre ast com src ros data string
原文地址:https://www.cnblogs.com/luojs/p/10817084.html