视觉里程计总介绍-----冯兵
来源:互联网 发布:域名转发 编辑:程序博客网 时间:2024/04/30 08:00
转载地址:视觉里程计总介绍
在前两篇博客中,我们实现了一个简单的视觉里程计,在最后我们也分析了其存在的问题,那接下来的文章就是对上述简单视觉里程计一步步优化,提高算法的精度,效率以及鲁棒性。
在此之前,我们先对视觉里程计整个发展做一个回顾。具体可以参考大牛Davide Scaramuzza的两篇文章Visual Odometry: Part I[1],Visual Odometry: Part II[2].
英语也不是很好,就不对这两篇文章进行翻译了,主要对这两篇文章进行一下回顾。
为什么研究VO?
- 相比普通的轮子里程计,不会因为轮子打滑,或者斜侧等原因导致结果误差较大
- 相比轮子里程计,更加精确(相对位置误差0.1%-2%)
- 可以作为轮子里程计,GPS,IMU,激光里程计等补充
- 在GPS无法涉及的环境,比如室内,水下,太空等环境VO显得比较重要。
工作原理简介
具体架构
其计算相机轨迹是通过递增的方式,具体如图:
VO与Structure from Motion (SfM)及Visual SLAM
VO 与 Structure from Motion (SfM)
- SfM是从一组非畸变图像中恢复场景三维结构和相机姿态。其对图像采用了一个全局的离线优化,计算复杂度就会随着图片的增加。
- VO是SfM中的一种特殊情况,其基本思想与SfM一致,而其采用了局部优化,实时给出相机姿态信息。
VO 与 Visual SLAM
- 基于视觉的SLAM的目标是为了获得一个全局稳定的机器人路径,具体思路可以参考ORB_SLAM
,如下图: - VO的目标是为了获得局部稳定的轨迹,而SLAM的目标是为了获得全局稳定的轨迹及地图信息
VO可以作为SLAM中的一部分,也就是在闭环检测之前。
问题求解
具体整个问题的求解,前面两个博文中已经简单介绍了一个具体思路,对于问题的核心姿态估计是通过估算两幅图像的本质矩阵,对本质矩阵进行SVD分解。那有没有其他思路了呢,具体根据特征是2D还是3D,可以分成如下三种方式:
2D-to-2D
- 3D-to-3D
- 3D-to-2D
2D-to-2D
这种方式就是我们前面博文中介绍的方式。
具体问题就是:我们已知两幅图像中的匹配,计算两幅图像之间的
两幅图像之间满足对极几何的性质:
根据5点法或者8点法可以求解本质矩阵,后通过SVD分解计算相机旋转关系。
对于2D-to-2D的方式存在尺度的问题,也就是不能通过两幅图像计算出平移的绝对尺度。其中一种方式通过计算两个时刻,两幅图像对应3D点之间的距离,具体如下:
为了鲁棒性考虑,一般会计算这个时刻所有对应特征计算的
3D-to-3D
这种方式一般用于双目,具体示意图如下:
具体优化通过:
3D-to-2D
对于这个问题就是PnP问题,OpenCV中就有方法solvePnP以及solvePnPRansac,具体优化通过:
对于目前单目情况,这个3D点需要根据相连两帧来确定,然后将得到的3D点投影匹配到第三幅图像中。
关键帧
我们确定3D点的时候,有如下几个因素影响这个3D点的准确性。
1、图像噪声
2、相机标定误差
3、特征匹配的不确定性
因此我们将到所有交叉光线的最小距离的点作为确定的3D点,具体如图:
我们会发现,两帧的距离很近的时候会影响3D点的准确度,具体如图:
这样为了避免出现跳动的情况,我们对两帧的距离设定阈值,如下图:
关键帧的选择比较重要,后期对VO进行优化的时候会添加关键帧
相机姿态优化
我们之前计算相机变换只是考虑了相连两帧,而我们可以考虑计算非相连的帧计算的结果作为约束条件。具体图如下:
通过如下式子进行优化:
为了考虑下面,这边只计算最近的K个关键帧,具体求解可以通过Levenberg-Marquadt算法进行优化。
在对姿态进行优化后,另外对点进行优化。
具体式子:
闭环检测
闭环检测对于图优化来说,是非常有用的约束条件,这个在Visual SLAM中更为常见。
下一步
通过对VO整个过程的分析,接下来就根据上述分析过程一步步实现高精度,高效率,高鲁邦的VO算法。
[1]: Scaramuzza, D., Fraundorfer, F., Visual Odometry: Part I - The First 30 Years and Fundamentals, IEEE Robotics and Automation Magazine, Volume 18, issue 4, 2011.
[2]: Fraundorfer, F., Scaramuzza, D., Visual Odometry: Part II - Matching, Robustness, and Applications, IEEE Robotics and Automation Magazine, Volume 19, issue 2, 2012.
- 视觉里程计总介绍-----冯兵
- 视觉里程计简介(冯兵)
- 视觉里程计总结
- 视觉里程计研究小结
- 视觉里程计学习
- 视觉里程计(一)
- 视觉里程计(二)
- 视觉里程计(三)
- 视觉里程计(四)
- 里程计、推算定位与视觉里程计
- 里程计、推算定位与视觉里程计
- 里程计、推算定位与视觉里程计
- 里程计、推算定位与视觉里程计
- 里程计、推算定位与视觉里程计
- 里程计、推算定位与视觉里程计
- 里程计、推算定位与视觉里程计
- 里程计、推算定位与视觉里程计
- 一个简单的视觉里程计实现(1)----冯兵
- LinkBell-低功耗可视门铃全球首发
- VS编写c程序时提示This function or variable may be unsafe
- Java 修饰符
- 歌儿轻轻唱 风儿轻轻吹
- WEB测试之美
- 视觉里程计总介绍-----冯兵
- listview去掉下滑线
- iOS 应用发布到AppStore流程
- 胶水代码(glue code)的定义(粘合代码)
- CSS深入理解之overflow
- exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive
- windows 杀端口号
- 什么是AGC自动增益控制?
- 【32.89%】【codeforces 574D】Bear and Blocks