SLAM代码(VO简介)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

无人机很快会在灾难救援,工业检测环境保护方面祈祷重要作用。这样的应用中获取GPS信息是困难的。因此精确的全自动UAV备选的导航定位系统。使用惯导系统的缺点是累积误差,GPS在受限于使用环境。为了减低重量和功率消耗,视觉导航方法的优点一是不易被干扰,另外是大部分无人机已经配备了相机,视觉系统协同IMU(Inertial Measurement Unit)的方案被广泛采用。本文主要关于VO里程计简介。

定义

选择使用这个词因为它和轮式里程计类似,通过通过对轮子转动圈数积分,增量式估计机器的运动。VO由运动引起的机载相机捕获图像的变化增量式地估计机器的位姿。

assumptions

  • Sufficient illumination in the environment
  • Dominance of static scene over moving objects
  • Enough texture to allow apparent motion to be extracted
  • Sufficient scene overlap between consecutive frames

单目里程计

和双目例程计最大的区别就是尺度未知,这是因为3D结构必须从2D数据中获取,因此前两个相机位姿之间的距离设为1。 新的图像到来之后,相对尺度和相对于前两帧图像的相机位姿使用3D结构或者三焦张量trifocal tensor获取。

有三类方法,分别是feature-based methods, appearance-based methods, and hybrid methods。Feature-based methods 基于显著的可重复的特征,并在各帧图像中跟踪这些特征。appearance-based methods使用每个像素的秘籍信息或者图像的子区域进行匹配。hybrid method混合前两种方法。

减小漂移

因为VO通过增量式的计算相机的路径,每个新的帧间运动引入的误差随着时间累积。在真是的路径上会产生一个漂移。对于一些应用中,保持漂移尽量小至关重要,可以对局部几个位姿进行优化,叫sliding window bundle adjustment or windowed bundle adjustment。

VO is only concerned with the local consistency of the trajectory, whereas SLAM with the global consistency.

vo vs v-SLAM

itemVOv-SLAM
goala global, consistent estimate of the robot pathlocal consistency of the trajectory recovering t pose only over the last n poses
mapa map of the environmentlocal map
previously visited arealoop closure-
Optimizationgloballocal/window
trade offconsistencyperformance

这里写图片描述

formulation

相邻两张图像对应的相机的位置之间的关系为一个刚体变换,如下表示
Tk,k1=[Rk,k10tk,k11]
其中 Rk,k1SO(3) 为旋转矩阵, tk,k1R3 为平移向量,集合 T1:n={T1:0,...,Tn:n1} 包含了运动的全部序列.VO的主要任务就是从图像 Ik 到图像 Ik1 的相对变换T_{k,k-1}. 然后连接这些变换得到整个运动航迹。这意味这VO增量的恢复了运动的路径,pose after pose. 这里使用一种迭代方法调整最近m个位姿,这里通过最小化平方重投影误差。

流程

  1. Compute the relative motion Tk from images Ik1 to image _k
  2. Concatenate them to recover the full trajectory
  3. An optimization over the last m poses can be done to refine locally the trajectory (Pose-Graph or Bundle Adjustment)

Feature-based Methods

Steps:
  1. Extract feature key-points and descriptors.
    Common features: FAST, SIFT, SURF, ORB
  2. Find the corresponding matches.
    Brute-force or kNN match.
  3. Estimate the ego-motion.
    PnP or bundle adjustment.
Comments:
  1. Extraction and matching cannot be always guaranteed to be successful.
  2. Tracking may lost if the motion is too fast.
  3. Ego-motion solution does not always exist or global optimal.
    这里写图片描述
    对于每个图像,首先是检测并和之前帧的图像匹配2D特征,2D特征是相同的3D特征在在不同的帧之间的投影,又叫image correspondence. 第三步是计算相关运动 Tk,k1 ,根据对应时所用的维数可以分为三类方法(下边介绍),然后相机的位姿可以计算出来.
    最后使用一个迭代调整(bundle adjustment),该调整针对与最近m帧图像,来得到一个更加精确的局部轨迹.
    大部分VO假设相机是经过校准的,也就内参数已知.
itemfeatures trackingfeatures Matching
detecting featuresindependently in all the imagesin one image
relate to next framematching themtracking them sing a local search
based on somesimilarity metricscorrelation etc

关键帧选择

现有的一些运动估计方法需要3D点和2D图像对应的三角测量。结构计算仍然需要bundle adjustment来计算局部轨迹的更精确的估计。三角测量的3D点由两张图像的2D图像点对应的投影射线的交点。理想的条件下,这些射线会相交于一个3D点。然后优于图像的噪声,相机模型和校正的误差,以及特征匹配的不确定性,他们从不相交。相对于景深来说相邻帧之间的距离间隔很近的时候上述情形容易发生。避免此种情形的一种方法是构成忽略的帧知道平均不确定性降低至小于一个阈值。选择的帧叫做关键帧。关键帧在VO中十分重要,而且应该在跟新运动之前完成。

Pose-Graph Optimization vs BA

Pose-Graph OptimizationBA
这里写图片描述这里写图片描述
这里写图片描述这里写图片描述
only the last m keyframes are usedto not get stuck in local minima, the initialization should be close to the minimum
Gauss-Newton or Levenberg-MarquadtGauss-Newton or Levenberg-Marquadt
more precise
more costly

特征选择和匹配

主要分为2种方法,一是在一张图像中检测特征,在随后的帧中使用局部搜索方法进行跟踪;另外一种方法是对于所用的图像独立的检测特征并根据相似度进行匹配。前者更适合于从较小分为的视角拍摄的图像,后者适合有较大的运动或者视角变化。早期研究比较倾向于前种方法,近期的方法比较集中于后种方法。原因是早前的工作大多设想于小范围的环境,图像拍摄于近景,近期的研究的焦点尽量使得场景的变化范围尽量远,进而解决运动漂移的限制。
这里写图片描述
每个特征检测子包含2各步骤,首先是应用feature-response function对于整张图像,之后是进行非最大值抑制,目标是找到feature-response function的局部极值. 使用检测子具有不变性的诀窍就是使用多尺度,如SIFT,SURF,FAST等.

移除outlier

点匹配经常被outlier,错误关联的数据污染,原因可能来自于图像噪声,遮挡,模糊,视角或光照的变化,这些一般会被检测子和描述子所忽略.一般的假设是关照均匀,单纯的相机旋转和尺度,和仿射畸变。
outlier的一种解决方案是利用运动模型的几何约束。鲁棒的估计方法如M估计法,RANSAC等。

误差传播

VO中的每个变换包含误差,以及不确定性,相机位姿的不确定性依赖于之前时刻的各变换估计结果。VO估计的变换结果的不确定性依赖于相机几何和图像特征。可以证明,当拼接变换时,相机位姿的不确定性总是增加的,因此保持每个变换的不确定性足够小十分重要,以此保证较小的漂移。

相机位姿的优化

最近n帧的图像以及变换已知,加上另外的约束使用图优化可以估计更精确的相机位姿结果。这样相机的估计转化为一个优化问题,从VO估计的相机的位姿表示为位姿graph,每个相机的位姿作为一个节点,每个刚体变换作为边。边的约束可以使用一个代价函数表示
eijCiTeijCj2 ,位姿寻找相机位姿参数最小化代价函数.变换的旋转部分使得代价函数非线性,因此该优化需要一个非线性优化算法。

loop detection

回环约束经常形成与相邻较远的节点,这些节点可能积累较大的漂移。通常这样记过一段长时间之后有看到之间经过路标landmark或者回到已经建图的区域成为回环检测。回环约束可以在评估当前图像和以前图像的视觉相似度中发生。视觉相似度使用全局图像描述子计算。进来使用局部描述子的视觉相似度进行回环检测被很多研究所关注,比较出众的方式视觉单词直方(visual word histgram)的距离。回环检测的第一步是检测视觉单词,找到最相似的n帧图像之后,使用极限月做一个几何验证。使用宽基线特征的刚体变换确认匹配
- Loop constraints are very valuable constraints for pose graph optimization
- Loop constraints can be found by evaluating visual similarity between the current camera images and past camera images.
- Visual similarity can be computed using global image descriptors (GIST descriptors) or local image descriptors (e.g., SIFT, BRIEF, BRISK features)
- Image retrieval is the problem of finding the most similar image of a template image in a database of billion images (image retrieval). This can be solved efficiently with Bag of Words [Sivic’03, Nister’06, FABMAP, Galvez-Lopez’12 (DBoW2)]

局部窗口bundle adjustment

In bundle adjustment, the error function to minimize is the image reprojection error:
argminXi,CkPikg(xi,Ck)2
重建误差是一个非线性函数,优化方法经常使用LM方法,该方法需要一个靠近最小值的初始值。该优化问题的雅克比有一个特殊的结构可用来提高运算效率。
局部窗口bundle adjustment减小了两视图的漂移,原因是特征测量超过2帧图像。当前相机的位置连接通过3D路标,当前的估计和最近n帧图像的估计一致。窗口的大小由计算量决定。

method classification for image correspondence

  • 2-D-to-2-D: In this case, both fk1 and fk are specified in 2-D image coordinates.
  • l 3-D-to-3-D: In this case, both fk1 and fk are specified in 3-D. To do this, it is necessary to triangulate 3-D points at each time instant; for instance, by using a stereo camera system.
  • 3-D-to-2-D: In this case, fk1 are specified in 3-D and fk are their corresponding 2-D reprojections on the image I k . In the monocular case, the 3-D structure needs to be triangulated from two adjacent camera views (e.g., Ik2 and Ik1 ) and then matched to 2-D image features in a third view (e.g., Ik ). In the monocular scheme, matches over at least three views are necessary. Notice that features can be points or lin

运动估计方法的分类

瞬时从video中恢复相机姿态和视场结构的方法分为2类
- Feature-based method
- Directed method
前者提取显著特征点的稀疏集合并使用invariant descriptors 匹配,使用外极几何恢复相机运动和结构,最后最小化重投影误差调整pose and structure。这个方法的成功之处在于使用了鲁棒的特征监测子和描述子,这样允许帧间有较大的惯性运动。这方法的缺点是依赖于检测子和描述子的阈值,如何处理匹配错的情况,这样的需要使用很多的特征测量来弥补。
后者直接从灰度值估计结构和运动。局部的灰度梯度幅度和方向被使用。梯度值小的点也被直接法使用。光度的计算要比重投影误差要敏感。

sparse model-based image alignment

The maximum likelihood estimate of the rigid body transformation Tk,k1 between two consecutive camera poses minimizes the negative log-likelihood of the intensity residuals:

Tk,k1=argmin12δI(Tk,k1,ui)2

δI(ξ,ui)=Ik(π(T^k,k1pi))Ik1(π(T^(ξ)pi))

open sources

SFM for MAVs

MAVMAP: https://github.com/mavmap/mavmap
Pix4D: https://pix4d.com/

VO (i.e., no loop closing)

Modified PTAM: (feature-based, mono): http://wiki.ros.org/ethzasl_ptam
LIBVISO2 (feature-based, mono and stereo): http://www.cvlibs.net/software/libviso
SVO (semi-direct, mono, stereo, multi-cameras): https://github.com/uzh-rpg/rpg_svo

VIO

ROVIO (tightly coupled EKF): https://github.com/ethz-asl/rovio
OKVIS (non-linear optimization): https://github.com/ethz-asl/okvis

VSLAM

ORB-SLAM (feature based, mono and stereo): https://github.com/raulmur/ORB_SLAM
LSD-SLAM (semi-dense, direct, mono): https://github.com/tum-vision/lsd_slam

IMU-Vision fusion:

Multi-Sensor Fusion Package (MSF) (Weiss et al.) - EKF, loosely-coupled:
http://wiki.ros.org/ethzasl_sensor_fusion
SVO + GTSAM (Forster et al. RSS’15) (optimization based, pre-integrated IMU):
https://bitbucket.org/gtborg/gtsam
 Instructions here: http://arxiv.org/pdf/1512.02363

optimisation Tools

GTSAM: https://collab.cc.gatech.edu/borg/gtsam?destination=node%2F299
G2o: https://openslam.org/g2o.html
Google Ceres Solver: http://ceres-solver.org/

Place recognition

DBoW2: https://github.com/dorian3d/DBoW2
FABMAP: http://mrg.robots.ox.ac.uk/fabmap/

data sets

These datasets include ground-truthed 6-DOF poses from Vicon and
synchronized IMU and images:
- EUROC MAV Dataset (forward-facing stereo):
http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinerti
aldatasets
- RPG-UZH dataset (downward-facing monocular)
http://rpg.ifi.uzh.ch/datasets/dalidation.bag

refer

  • D. Scaramuzza, F. Fraundorfer, “Visual Odometry: Part I - The First 30 Years and Fundamentals IEEE Robotics and Automation Magazine”, Volume 18, issue 4, 2011.
  • F. Fraundorfer and D. Scaramuzza, “Visual Odometry : Part II: Matching, Robustness, Optimization, and Applications,” in IEEE Robotics & Automation Magazine, vol. 19, no. 2, pp. 78-90, June 2012.
    doi: 10.1109/MRA.2012.2182810
slam学习笔记五----视觉里程计的学习1 一,什么是视觉里程计 SLAM系统分为前端和后端,前端也称为是视觉里程计,主要功能是根据相邻图像的信息粗略的估计出相机的运动,为后端提供较好的初始值。 视觉里程计的算法有两大类特征点法和直接法。特征点法是常用方法,它具有稳定,对光照、动态物体不敏感的优势。视觉里程计的原理就是提取图像的特征点,通过匹配估计两帧之间相机运动和场景结构,实现一个两帧间的视觉里程计。其核心问题就是如何通过图像估计相机的运动。 二,特征点法的原理 从图像中选取比较有代表的点,该点在相机视角发生少量变化后依旧保持不... 阅读详情

相关推荐

视觉里程计(VisualOdometry)原理及实现

一、视觉里程计(VisualOdometry)介绍 目前,有不止一种方式可以确定移动机器人的轨迹,这里将重点强调“视觉里程计”这种方法。在这种方法中,单个相机或者双目相机被用到,其目的是为了重构出机器人6-DOF的轨迹。 视觉里程计通过分析一系列图像序列,来确定机器人的朝向和位置。 二、单目(monocular)与双目(stereo)视觉里程计比较 双目VO的优势在于,能够精确的估计运动轨

松间明月 4万+

SLAMSLAM相机简介SLAM五步流程简介(VO+BEO+LCD+M)之详细攻略

SLAMSLAM相机简介SLAM五步流程简介(VO+BEO+LCD+M)之详细攻略 目录 SLAM相机 1、单目相机 2、双目Stereo相机 3、深度相机/RGB-D相机 SLAM五步流程 1、传感器信息读取 2、VO视觉里程计 2.1、视觉里程计Visual Odometry 2.2、累计漂移AD 3、BEO后端优化 4、LCD回环检测 5、Mapping建图 5.1、度量地图Metric Map 5.2、拓扑地图Topological Ma...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4459

视觉里程计系列(3):什么是视觉里程计(visual odometry)及相机模型

视觉里程计的主要任务是根据图像对相机的运动(包括旋转和平移)进行估计。它根据图像序列序列,估计相机的运动轨迹和场景的空间结构,而SLAM需要再此基础上通过后端进一步优化,通过闭环检测改善飘移的情况,从而构建地图。

weixin_46444742的博客 3037

视觉里程计(Visual Odometry)详解

视觉里程计旨在通过处理连续的图像序列,估计摄像头的相对位姿变化,即平移和旋转。与惯性里程计(基于IMU)或激光里程计(基于激光雷达)的传统方法相比,视觉里程计具有成本低、信息丰富和适应性强等优势。然而,其性能受限于光照变化、动态环境和特征稀缺等因素,仍面临诸多挑战。视觉里程计作为一种基于视觉信息的位姿估计技术,在多个领域中发挥着重要作用。其核心在于通过图像特征的提取与匹配,结合几何优化算法,实现对设备运动的精确追踪。

m0_73640344的博客 5210

视觉里程计:起源、优势、对比、应用

视觉里程计(Visual Odometry,简称VO)是SLAM技术中非常关键的部分,主要侧重于计算机视觉算法。本文从VO的发展起源、技术优势、术语对比、应用场景几方面对VO做一个简要的介绍,后续文章会继续介绍VO相关的技术细节。 视觉里程计概念来自车轮里程计 视觉里程计的研究最早是从上个世纪八十年代开始的,2004年David Nister 在CVPR上发表了一篇以视觉里程计...

wb790238030的博客 7189

Visual SLAM算法笔记

最近在学习SLAM算法,这里作为阅读笔记记录和总结一下。对经典的单目SLAM/VO算法做了摘要和总结,比如Nister VO、MonoSLAM、PTAM、ORB-SLAM、LSD-SLAM、SVO、DSO等,对几个单目和IMU的融合算法也做了简单总结,比如MSCKF、OKVIS、IMU-Preintegration等。

MulinB的技术博客 3万+

SfM、VOSLAM介绍

一家之言,仅作分享,如有不合理或需要改进的地方,欢迎各位讨论。 前言     在自动驾驶地图定位模块的功能开发中,主要研究方向分为三种:建图、里程计、定位。建图是根据车辆传感器感知信息进行三维构建,不论是 ...

weixin_43891708的博客 7132

SLAM代码SLAM简介

SLAM是什么呢?Google一下,就会发现很长的一串名字-Simultaneous Localization and Mapping,哇感觉第一单词就不明白是干啥的啊!听我慢慢道来,先看后边的,Localization就是定位,Mapiing就是建图。所以从这里可以看到,这个东东至少玩了2个并发的线程。”同时“这个词就是要告诉我们localization 和mapping是同时发生的。 第一个线

何必浓墨重彩 5209

开源项目推荐:VO-SLAM-Review

开源项目推荐:VO-SLAM-Review 1. 项目基础介绍与主要编程语言 VO-SLAM-Review 是一个关于视觉同步定位与建图(SLAM)的开源项目,主要关注视觉里程计(Visual Odometry, VO)的相关研究。该项目由 Michael Beechan 维护,旨在汇总和整理 VOSLAM 领域的重要研究和开源代码。项目使用 Python 作为主要编程语言,便于研究人员快速...

gitblog_00600的博客 592

SLAM--搭建自己的视觉里程计VO-RGBD相机()

自己搭建SLAM系统—视觉里程计,没有包括回环检测和BA 位姿优化。 目录一、 视觉里程计VO二、具体代码三、调用代码实现参考 一、 视觉里程计VO 定义camera类:用于相机相关的参数和坐标系变换方法: class camera { public: typedef shared_ptr<camera> Ptr; camera(){} static cv::FileStorage configfile; static cv::Mat K; //Mat类

老邹的博客 4006

VO-SLAM-Review 项目教程

VO-SLAM-Review 项目教程 1. 项目介绍 VO-SLAM-Review 是一个专注于视觉里程计(Visual Odometry, VO)和同步定位与地图构建(Simultaneous Localization and Mapping, SLAM)的开源项目。该项目旨在提供一个全面的资源库,包含各种视觉里程计和SLAM算法的实现、论文、教程和相关工具。通过这个项目,开发者可以深入了解视...

gitblog_00072的博客 822

视觉SLAM学习——视觉里程计VO

视觉SLAM学习——视觉里程计VO 本文为个人学习视觉slam之后的一些片面的理解,希望能够对大家有所帮助 特征点估计 ORB特征检测 这里仅仅介绍ORB特征点的提取的算法过程: 1、FAST特征点提取(设提取n个角点): 1.1、选取像素p,获得其亮度为Ip 1.2、设置阈值T(如:Ip的 20%) 1.3、以p为中心选取半径为3的圆上的16个像素点 1.4、预测试像素:检测索引为1、5、9、1...

qq_37702859的博客 1123

激光SLAM简介

传感器—>传感器数据处理—>前段匹配 —>回环检测 —>后端优化 —>地图构建。

kk521_1314的博客 2206

SFM,VO,SLAM,BA,Graph Optimization的区别

1、SLAM    SLAM 分为很多种,目前主要有:PATM、MonoSLAM、ORB-SKAM、RGBD-SLAM、RTAB-SLAM、LSD-SLAM 在已经接触到的RGBD-SLAM和MonoSLAM前端主要分为feature detect and descriptor、motion estimation等步骤, feature detector可以分为point-feature d

KinboSong的博客 4800

从零开始搭建一个基于SLAM的AR框架

这篇文章,是个人学习过程的记录。除了理论讲解,代码讲解,工具讲解外,还包括AR行业新闻解读。

u014520439的博客 7167

VO-SLAM-Review 项目使用教程

VO-SLAM-Review 项目使用教程 1. 项目的目录结构及介绍 VO-SLAM-Review/ ├── LICENSE ├── README.md ├── gitignore └── 其他文件和目录 LICENSE: 项目许可证文件,本项目使用 Apache-2.0 许可证。 README.md: 项目说明文件,包含项目的基本介绍和使用说明。 gitignore: Git 忽略文件,指...

gitblog_00065的博客 853

ORB_SLAM2 代码分析及介绍(视觉VO及重定位,Tracking)第一部分

文章目录什么是SLAM?前端:视觉里程计(Visual Odometry)后端:非线性优化(Optimization)回环检测(Loop Closing)ORB_SLAM系列概述ORB_SLAMORB_SLAM2结合ORB_SLAM2的代码进行分析主要文件介绍System 什么是SLAM? 参考大牛讲堂|SLAM第一篇:基础知识。 SLAM全称为Simultaneous Localization and Mapping(即时定位与地图构建技术) 传感器分为激光和视觉两大类。基于视觉传感器的SLAM称为视觉S

weixin_46365033的博客 5583

视觉SLAM笔记基本的 VO——特征提取和匹配

这里写目录标题一、两两帧的视觉里程计 一、两两帧的视觉里程计 两两帧之间的 VO 工作示意图如图 在这种 VO 里,定义了参考帧(Ref-erence)和当前帧(Current)这两个概念。以参考帧为坐标系,把当前帧与它进行特征匹配,并估计运动关系。假设参考帧相对世界坐标的变换矩阵为 T rw ,当前帧与世界坐标系间为 T cw ,则待估计的运动与这两个帧的变换矩阵构成左乘关系: T cr , s.t. T cw = T cr T rw . 在匹配特征点的方式中,最重要的参考帧与当前帧之间的特征匹配关系,

mango 4115

视觉SLAM笔记(45) 搭建 VO 框架

确定程序框架、确定基本数据结构、Camera 类、Frame 类、MapPoint 类、Map 类、Config 类

氢键H-H 1万+
上一篇: UAV 预备知识
下一篇: SLAM代码(SLAM简介)
wendox
博客等级 码龄16年 420粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值