里程计及基于双目视觉的视觉里程计(stereo visual odometry)

里程计在slam算法中扮演的作用不言而喻,通常里程计可以分为轮子编码器的里程计(wheel odometry)和视觉里程计(visual odometry)。而视觉里程计又可分为基于单目的视觉里程计(monocular odometry)和基于双目的视觉里程计(stereo odometry)。


关于轮子编码器的里程计,当路面平整时精度尚可,否则误差越来越大,此时有基于IMU等传感器的数据融合方法来对轮子里程计进行误差修正,结果任然是不尽如人意。关于轮子编码器的里程计的原理介绍可参考以下内容:

http://robotics.stackexchange.com/questions/106/what-is-a-suitable-model-for-two-wheeled-robots/134#134

http://rossum.sourceforge.net/papers/DiffSteer/


通常使用方程


或者

里程计及基于双目视觉的视觉里程计(stereo visual odometry)_第1张图片

来估计机器人位置。


接下来介绍视觉里程计的原理。

视觉里程计主要有单目和双目之分,单目里程计通常有一个维度上的丢失,也即是单目里程计恢复的里程非常依赖于三维场景中的某些物体的已知尺寸参数或者尺度未知。该方法主要原理是使用摄像机采集到的前后帧图片进行提取特征点。然后匹配特征点,剔除误匹配点,之后进行5自由度的运动估计(通常是使得平移量translation的模为1)。最后可以通过空间中已知尺寸的物体在图像上所成的像这一投影关系恢复出6自由度的空间运动参数(即确定平移量translation的模)。这样依次循环下去即是基于单目视觉的里程计。此外还有不基于特征点的直接法等。


由双目视觉原理可知,经双目标定后的双目摄像机可以直接恢复欧几里德几何意义下的三维点云数据(依赖与立体匹配)。所以基于双目的视觉里程计更适合大范围大场景的应用。双目视觉里程计的原理是重构出当前时刻摄像机视野中通过极线约束(降低匹配搜索维度)匹配到的特征点的三维坐标,与前一时刻所重构出的特征点进行匹配,剔除误匹配点,使用绝对定向(absolute orientation,eg:umeyama,quaternion )算法估计出6自由度刚体运动参数。如此循环下去即是基于双目的视觉里程计。此外还有一些该算法的改进算法,有的是提取一些关键帧作为运动估计的参考,涉及到关键帧的提取与剔除机制;有的通过融合IMU数据,或者激光雷达数据,通过icp来优化,回环检测等;重构三维特征点用g2o优化再求解运动等等。



里程计及基于双目视觉的视觉里程计(stereo visual odometry)_第2张图片

上图来自

Two years of Visual Odometry on the Mars Exploration Rovers

http://onlinelibrary.wiley.com/doi/10.1002/rob.20184/pdf


stereo odometry的一些资料:

https://github.com/raulmur/ORB_SLAM2

http://www.cvlibs.net/datasets/kitti/eval_odometry.php

http://www.cvlibs.net/software/libviso/


slam的入门教程

http://www.iri.upc.edu/people/jsola/JoanSola/objectes/curs_SLAM/SLAM2D/SLAM%20course.pdf


你可能感兴趣的:(opencv3,标定,slam)