解答——为什么自己编的两帧之间视觉里程计结果会如此得差呢?

3D点集的精度

上一篇博客中,我提出了疑问:为什么自己编的视觉里程计效果很差呢?为了解答这个问题,我们首先来思考在程序第4步3D点集获取之后,你得到的3D点集的精度到底如何呢。假设上一帧的3D点集是无误差的,我们将其进行这两帧之间的欧式变换,得到当前帧的3D点集的真值。而 当前帧的3D点集的误差就等于当前帧3D点集的测量值减去当前帧3D点集的真值 !通过matlab绘制其误差图像如下:
在这里插入图片描述

图1 各个坐标轴之间的误差

在这里插入图片描述

图2 总的误差

由图1我们知道:3D点集的X坐标值的误差在±2米之间,Y坐标值的误差在-2米到1米之间,Z坐标值的误差在±20米之间。由图2我们知道:3D特征点的位置误差在0米到20米之间。由此,可以得知,由程序第4步得到的3D点集的精度并不高,误差达到米级。如果仅用这些3D点集来估计旋转矩阵 R R 和平移向量 t t 的话,得到的结果自然而然是十分差的!而SLAM系统中通过后端优化、建图和回环检测等步骤对视觉里程计的输出进行优化,以得到一个较好的旋转矩阵 R R 和平移向量 t t 的估计。

RANSAC阈值

程序第5步RANSAC中,我设置的RANSAC阈值为0.1米,由图1和图2可知,这样的设置是十分不合理的!由图2可知,3D点集的总的误差显然大部分分布在3.5米以下,如果设置其值为0.1米,则更加扩大了 R R t t 的误差。

发布了15 篇原创文章 · 获赞 5 · 访问量 4180

猜你喜欢

转载自blog.csdn.net/YMWM_/article/details/104843710