新年第一篇,就来聊聊g2o吧。 g2o (general graph optimization) 是SLAM中常用的后端优化库。之前我在文章g2o小结里也大概总结了下g2o在《十四讲》中的使用。 与ceres相比,g2o没有详细的文档,只有两篇论文可以参考。这里我们深入g2o的源代码(core文件夹里的部分),来一窥这个大名鼎鼎的后端优化库的虚实。 这篇文章是我在看g2o源代码是大概做的一个笔记,
我应该还没有这么勤快地更新过专栏文章...但上周刚刚写了关于常见的最小二乘算法的简介。其实公式推导在我的文章第六讲:非线性优化之中已经有了,而非线性优化(一):优化方法中,关于各个算法的推导和伪代码介绍也很通俗。但无论怎样,talking is easy, show me the code. 而且,也为了让我自己对最小二乘算法更加的熟悉,这篇文章里我们就来徒手实现LM算法。 因为我自己常用的进行算
讲完了李群和李代数,就轮到最小二乘优化了。和之前一样,应该会是一系列文章。这一章就先讲讲一些基本的概念和常见的最小二乘算法。 1.问题的定义 一个最小二乘问题的定义如下: 寻找一个关于下列函数的局部最小值 : 这里, 是误差方程。 而局部最小值的定义为: 给定 ,找到一个 ,使得 这里, 是一个给定的小正数。 假设损失函数F是光滑、可微的,就可以对其进行泰勒展开:
之前写完了 David LEE:卡尔曼滤波:从入门到精通1810 赞同 · 73 评论文章 之后一直说要写非线性情况下的推导。但后来想想,EKF不过就是做了一阶泰勒展开而已,要写成一篇文章实在是太短,感觉也没有太多干货,就一直没有动笔。最近在看 《概率机器人》,觉得关于贝叶斯滤波器确实也可以稍作总结,于是就写了这篇卡尔曼滤波家族。 本文对于扩展卡尔曼滤波、无迹卡尔曼滤波仅仅做了一些简要介绍,
题图来源Kinect’s Dazzling Infrared Lights Disco 结构光是辅助进行三维稠密重建的一种技术,通过向被测空间投射特定纹理来简化匹配像素(correspondences)搜索的问题。 本文完。 写这篇文章的原因在于很多关于结构光的博客或资料关于结构光的介绍只有前面的一句话,而大量的篇幅都是在讨论立体几何相关的问题,如极线、基础矩阵等等。关于这些,我之前已经
SLAM按误差函数的形式可以分为两类:最小化光度误差;最小化重投影误差。最小化光度误差也称直接法,误差函数的形式是两个像素的灰度值相减;最小化重投影误差也称特征点法,误差函数的形式是像素的坐标值相减。 整理近几年国内外SLAM的方案,根据误差函数形式可分为三类: 直接法:LSD、DSO 特征点法:ORB_SLAM 半直接法:SVO、VIO、MSCKF、OKVIS、VINS、ROVIO
直接法前端 特征点法和直接法的讨论 特征点法不可避免的会有以下几个缺点: 特征点的提取和描述子的计算非常耗时; 只使用特征点,而忽略了图像上的其他信息; 在纹理缺失的情况下容易失效。 为了克服这些缺点,产生了以下几个思路: 仍然提取特征点,但不计算描述子。使用光流法 (Optical Flow) 来跟踪特征点的运动; 同样只提取特征点但不计算描述子,使用直接法 (Dir
PnP PnP (Perspective-n-Point) 是求解3D - 2D 点对运动的一种方法。和摄影测量中的后方交会类似。它描述了当已知n 个3维空间点及其在相片上的2D 投影点时,如何估计相机的位姿。 在特征点的三维位置已知的情况下,那么最少只需要3个点对就可以估计相机的运动(还需要额外一个点对来验证结果)。特征点的3D 位置可以由RGB-D 相机获得,或者由之前的三角化获得。PnP 的
特征点法前端 前端又称为视觉里程计 (VO),它根据相邻图像间的信息来估计出相机的运动。估计值既可作为结果输出,也可以作为初始值提供给后端来进行优化。VO 的实现,按照是否提取图像特征,分为特征点法前端和直接法前端。本讲介绍的是特征法前端。 特征点与特征点匹配 如前所述,VO 的主要问题是根据图像信息来估计相机的运动。一般来说,我们首先从图像中选取出比较有代表性的点,然后根据这些点来估计相机
1. 李群和流形 首先,要明白李群和李代数是一种数学抽象概念,如同集合等概念一样,而并不就是机器人位姿这样具体的概念。而能够代表机器人位姿的SE(3)或SO(3)等就是具体的李群元素,如同自然数、负数等集合的具象化一样。 而某个李群G,定义为一个光滑的流形(manifold),由一个集合G和定义在该集合上的一个操作 组成,具体的定义就不再赘述了。 而流形可以理解为一个光滑、曲面和非线性的高
首先,我们还是从熟悉的BCH近似公式开始。 1. BCH近似公式 前面已经介绍过BCH公式了,BCH公式表达的是两个矩阵的指数相乘 其中,[] 为李括号。 对应的有李乘积公式 1.1 旋转 考虑在优化中,更新量都为小量,可以用BCH公式近似 其中,Jr和Jl分别为SO3的右雅可比和左雅可比。 对于左右雅可比有 1.2 姿态 与SO3类似,有 对应的雅可
李群和李代数 今天先介绍李群和李代数的基础,说明白了基础,下一讲就可以开始讲讲位姿估计了。 1. 李群 特殊正交群是有效的旋转矩阵的集合: 这里,正交约束 给具有9个参数的旋转矩阵引入了6项约束,把自由度降到了3。我们通过选择 来获得一个有效旋转。 用于表示姿态的是特殊欧几里得群: 如此,我们引入群的定义:群(group)是一种集合加上一种运算的代数结构。把集合记为 ,运
之前看高博的书已然写过一篇李群和李代数,但只是简单地介绍了相关的概念和用法,说得不够深入和系统。之前再次好好学习了一下机器人状态估计问题下的李群和李代数,准备好好聊聊这个问题,这会是一系列文章,大概4、5篇左右,希望能把李群和李代数讲清楚,对大家有所帮助。 再次说明,李群和李代数是一个很广泛的话题,我们聊的只是机器人位姿估计这个大背景下的相关概念和知识。今天先来一个开胃小菜,回顾下刚体在三维空间
题图来自 shutterstoc | morrowind 在SLAM 中,由于噪声的影响,观测方程和运动方程都只能近似成立。但在整个过程中,会有很多多余观测,即一个特征会被机器人在不同位置、不同时间进行观测,机器人每次也都会观测到多个特征,这就形成了约束。利用这些约束,就可以对数据进行优化。 状态估计问题 问题的引出 一个经典的SLAM 模型由一个运动方程和一个观测方程组成: 注意,这里上一
题图来自 pixebay | jonas-svidras 前面我们讨论了机器人位姿的表示和对其进行优化的工具,相当于是SLAM 中运动方程的部分。这一讲我们讨论视觉SLAM 中的观测方程,相机模型和对应的图像表示。 相机模型 相机拍照,是将三维世界中的一个三维点映射到对应的二维影像平面的过程。这个过程能够用一个几何模型来进行描述。在各种各样的模型中,最简单也最常用的就是针孔相机模型,也叫针孔模
题图来自shutterstock | 9george 前面我们介绍了若干种描述三维世界刚体运动的方式。除了用它们来描述相机的位姿之外,还要对它们进行估计和优化。这个问题可以描述为什么样的相机位姿最符合当前观测数据。而典型的做法就是将其构建成一个优化问题来求解。 前面我们介绍了旋转矩阵、旋转向量和四元数等等。而李群和李代数又是什么,我们为什么需要它们?这个问题我们过一会解答,先来看看李群和李
题图来自monicore | Pixabay 三维空间的刚体运动 本讲主要主要关注一个问题:一个刚体在三维空间中的运动是如何描述的。 为什么要研究这个问题?因为当我们描述机器人的位姿时,就是在描述一个刚体在三维空间中的运动。而且我们还要对这个估计出来的位姿进行进一步的优化。如何机器人的位姿的表述就决定了机器人的运动方程和优化方程的表述。 三维空间中,刚体的运动可以用两个概念来表示:旋转和平移。平
题图为SGM算法的一个处理结果。 最近来看看一些双目稠密匹配的算法。说来惭愧,SGM在航测领域是很重要的算法(当然也是最好的双目稠密匹配算法之一),自己却没有认真读过,只是大致有些了解。看了论文,再结合网上一些资料,自己做了些论文笔记。想到关于SGM论文网上还没看到比较翔实的博客,就把自己做的笔记再加些解释分享出来了(下文中的引用部分多为我自己的思考)。 其中还有一些是自己不理解的地方,准备后续写
积分
粉丝
勋章
TA还没有专栏噢
第三方账号登入
看不清?点击更换
第三方账号登入
QQ 微博 微信