视觉SLAM14讲笔记-第10讲-后端1

这篇具有很好参考价值的文章主要介绍了视觉SLAM14讲笔记-第10讲-后端1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们可以看到,前端视觉里程计能给出一个短时间内的轨迹和地图,但由于不可避免的误差累积,这个地图在长时间内是不准确的。所以怎么办?我们人类自己在现实世界中会记录自己走了多少米,还有就是使用路面的标志物来辅助定位,和机器人的方式也是相同的,即同时存在2种数学上的解释:运动方程观测方程

因此,我们关心的问题就变成:当我拥有某些运动数据u和观测数据z时,如何来确定状态量位姿x,路标y的分布?进而,如果得到了新时刻的数据,那么他们的分布又将发生怎样的变化?在比较常见且合理的情况下,我们假设状态量和噪声项服从高斯分布,这意味着在程序中只需要存储他们的均值和协方差矩阵即可。均值可看作是对变量最优值的估计,而协方差矩阵则度量了它的不确定性。那么,问题就转变为:当存在一些运动数据和观测数据时,我们如何去估计状态量的高斯分布?

马尔可夫性的引出:
人一辈子可能就是一个公式或概念,开玩笑,马尔可夫应该不止如此。简单的一阶马氏性认为,k时刻状态只与k-1时刻状态有关,而与再之前的无关。如果做出这样的假设,我们就会得到以扩展卡尔曼滤波为代表的滤波器方法。
而另外一种方法是依然考虑k时刻状态与之前所有状态的关系,此时将得到非线性优化为主体的优化框架。

重要的事情说3遍:
卡尔曼滤波的重要前提是运动与观测方程只与前一时刻有关,即满足马尔可夫性。
卡尔曼滤波的重要前提是运动与观测方程只与前一时刻有关,即满足马尔可夫性。
卡尔曼滤波的重要前提是运动与观测方程只与前一时刻有关,即满足马尔可夫性。

卡尔曼滤波的公式很简洁,只要直接带入就可以求解。不过卡尔曼的推导却不是那么直接,如果你连一眼也不看,卡尔曼博士可能会不开心。

贝叶斯公式的引出
P ( B ∣ A ) = P ( A ∣ B ) P ( B ) P ( A ) P(B \mid A) = \frac {P(A \mid B)P(B)} {P(A)} P(BA)=P(A)P(AB)P(B)
语言描述为:
当A发生的情况下,B发生的概率 等于 B发生的情况下,A发生的概率 乘以B发生的概率,再除以A发生的概率。

先验分布后验分布的引出
先验分布指的是机器人经过运动方程后的机器人状态的估计分布,后验分布指的是机器人在观测方程后的机器人状态的估计分布

这里停止住高博的思路,因为我实在看不下去了,我之前看过《学习OpenCV》一书里讲解的卡尔曼滤波,我觉的他的方式更容易理解,而且通篇不提贝叶斯,我们知道两个独立事件同时发生的概率等于两个独立事件概率的乘积,即:
P ( A B ) = P ( A ) P ( B ) P(AB) = P(A)P(B) P(AB)=P(A)P(B)
虽然高博也是用的这个公式,但是说是通过贝叶斯公式推导出来的,但是这里这样理解岂不更加简单、直接。

这里A为后验,B为先验,可以理解为
P ( 运动方程 + 观测方程 ) = P (观测方程) ∗ P (运动方程) P(运动方程+观测方程) = P(观测方程)*P(运动方程) P(运动方程+观测方程)=P(观测方程)P(运动方程)

后面的证明同高博一致,这里就不一一叙述了。但是我还是建议大家看看《学习OpenCV》的一维卡尔曼证明,相当简介明了。
与OpenCV介绍不同的是,观测方程里最终是关于观测量(路标)的高斯分布,运动方程里最终是关于机器人位姿的高斯分布。我们不禁想问,对于2种不同变量的分布,是否可以相乘呢?为什么不行,因为他们是独立事件,另外再看看高斯分布的概率密度函数,如下:
如果一个随机变量x服从高斯分布 N ( μ , σ ) N(\mu,\sigma) N(μ,σ),那么它的概率密度函数为
p ( x ) = 1 2 π σ e x p ( − 1 2 ( x − μ ) 2 σ 2 ) p(x)=\frac{1}{\sqrt {2\pi}\sigma}{exp(-\frac{1}{2} {\frac{(x-\mu)^2}{\sigma^2}})} p(x)=2π σ1exp(21σ2(xμ)2)
其高维形式为:这里x是高维形式。
p ( x ) = 1 ( 2 π ) N d e t ( ∑ ) e x p ( − 1 2 ( x − μ ) T ∑ − 1 ( x − μ ) ) p(x) = \frac{1}{\sqrt{(2\pi)^Ndet(\sum)}}exp(-\frac{1}{2}{(x-\mu)^T{\sum}^{-1}}{(x-\mu)}) p(x)=(2π)Ndet() 1exp(21(xμ)T1(xμ))
我们会发现概率密度函数本身就是一个单纯的数(例如0,2 、0,6等)。

EKF的引出:
我们必须澄清一点:SLAM中的运动方程和观测方程通常是非线性函数,尤其是视觉SLAM中的相机模型,需要使用相机内参数模型和李代数表示的位姿,更不可能是一个线性系统。一个高斯分布,经过非线性变换后,往往不再是高斯分布,所以在非线性系统中,我们必须取一定的近似,将一个非高斯分布近似成高斯分布。
通常的做法是,在某个点附近考虑运动方程及观测方程的一阶泰勒展开,只保留一阶项,即线性的部分,然后按照线性系统进行推导。
细节不再一一复述。
但是EKF也存在很多的缺点,我们通常认为,在同等计算量的情况下,非线性优化取得更好的效果。但是在导航中EKF的性价比又是一个很高的选择。

BA与图优化
在21世纪早期,虽然计算机视觉领域的研究者们已经开始利用BA进行重构,但SLAM的研究者们通常认为包含大量特征点和相机位姿的BA计算量过大,不适合实时计算。直到近十年,人们逐渐认识到SLAM问题中BA的稀疏特性,才使它能够在实时的场景中应用。因此,掌握好BA,深入研究其中的理论和实践细节,是做好视觉SLAM的关键。

稀疏性和边缘化的引出
因为残差函数对位姿和路标的导数存在稀疏性,所以H矩阵是一个镐形矩阵(由于雅克比矩阵的稀疏性,导致H也为稀疏性),由于H矩阵的特殊结构,可以使用Schur消元法(也称为Marginalization(边缘化))来进行求解。由于是先求处理关于 x c x_c xc的边缘分布,所以称为边缘化。

鲁棒核函数的引出
如果出现了误匹配,当误差很大时,二范数平方和作为目标函数会使误差增长太快,于是就有了核函数的存在。具体的方式是,把原先误差的二范数度量替换成一个增长没有那么快的函数,同时保证自己的光滑性质。因为他们使得整个优化结果更为稳健,所以又叫它们鲁棒核函数(Robust Kernel)。

虽然表面上很复杂,但是许多软件库为我们提供了细节操作,而我们需要做的主要是构造Bundle Adjustment问题。文章来源地址https://www.toymoban.com/news/detail-702091.html

到了这里,关于视觉SLAM14讲笔记-第10讲-后端1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【视觉SLAM十四讲学习笔记】第五讲——相机模型

    专栏系列文章如下: 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角 【视觉SLAM十四讲学习笔记】第三讲——四元数 【视

    2024年01月17日
    浏览(31)
  • 【SLAM14讲】02 视觉SLAM基本架构

    根据安装位置分为两类: 携带于机器人本体 上的传感器,比如激光传感器、相机、轮式编码器、惯性测量单元(Inertial Measurement Unit, IMU)等等,它们测到的通常都是一些间接的物理量而不是直接的位置数据。例如, 轮式编码器会测到轮子转动的角度、IMU 测量运动的角速度和

    2024年02月12日
    浏览(52)
  • 视觉学习笔记4——ORB-SLAM3的地图保存与使用

    前言:视觉学习笔记4——学习研究ORB-SLAM3 ORB-SLAM3基本搭建完成,具体可以看开头的系列文章目录,接下来需要研究如何自定义自己的地图,也就是实时地图的保存与运用。 按照开源说明来看,地图保存与加载在V1.0已经实现了,需要修改相应的yaml文件即可,也就是相机yaml文

    2024年02月06日
    浏览(37)
  • 视觉SLAM十四讲——ch9实践(后端1)

    Ceres BA使用的是BAL数据集。在本例中,使用problem-16-22106-pre.txt文件。 BAL的数据集自身存在的特殊 BAL的相机内参模型由焦距f和畸变参数k1,k2给出。 因为BAL数据在投影时假设投影平面在相机光心之后,所以按照我们之前用的模型计算,需要在投影之后乘以系数-1。 安装meshlab,

    2024年02月09日
    浏览(35)
  • 手撕 视觉slam14讲 ch7 / pose_estimation_3d2d.cpp (1)

     1. 读图,两张rgb(cv::imread)  2. 找到两张rgb图中的特征点匹配对        2.1定义所需要的参数:keypoints1, keypoints2,matches        2.2 提取每张图像的检测 Oriented FAST 角点位置并匹配筛选(调用功能函数1)  3. 建立3d点(像素坐标到相机坐标)         3.1读出深度图(c

    2024年02月10日
    浏览(34)
  • 《视觉SLAM十四讲》笔记(4-6)

    为了解决什么样的相机位姿最符合当前观测数据的问题,可以构建出一个优化问题来求解最优的R和t。以达到误差最小。但是旋转矩阵自身是带有约束的(正交且行列式为1),这会引入额外的约束,导致优化变得困难。通过李群——李代数这种关系,希望把位姿估计的问题变

    2024年02月15日
    浏览(28)
  • 视觉学习笔记10——opencv的卸载、安装与多版本管理

    参考文献 参考文献 参考文献 参考文献 之前在ubuntu18系统上已经安装了opencv4.4.0和扩展库opencv_contrib,但是最近需要跑一个SLAM的源代码,而这个SLAM系统是基于opencv3.4.2开发的,直接运行会出现很多opencv版本不兼容的问题。因此想再安装opencv3.4.2和扩展库opencv_contrib3.4.2,过程中

    2024年02月05日
    浏览(34)
  • SLAM面试笔记(8) — 计算机视觉面试题

    目录 问题1:目标检测的算法分类 问题2:卷积神经网络的组成 问题3:输入层的作用 问题4:卷积层作用  问题5:卷积核类型 问题6:1×1卷积核作用 问题7:卷积核是否越大越好 问题8:棋盘效应及解决办法 问题9:如何减少卷积层参数 问题10:神经网络可视化工具 问题11:池

    2024年02月07日
    浏览(30)
  • 超全!SLAM论文与开源代码汇总(激光+视觉+融合)

    1.代表性视觉SLAM算法论文与开源代码总结 2.代表性激光SLAM算法论文与开源代码总结 3.代表性激光-视觉融合SLAM算法论文总结 激光-视觉-IMU-GPS融合SLAM算法理论与代码讲解: https://mp.weixin.qq.com/s/CEJPWHVAnKsLepqP3lSAbg 参考文献 [1] CADENA C, CARLONE L, CARRILLO H, et al. Past, present, and future of

    2024年02月05日
    浏览(33)
  • slam建图与定位_cartographer代码阅读(7)后端约束构建

    1.cartographer里的节点:当扫描匹配结束后,有新的一帧scan加入到submap中,这个扫描匹配的结果就叫做节点 global_trajectory_builder.cc 2.子图内约束,子图的原点坐标与节点间的约束pose_graph_2d.cc 3.回环检测:当前的节点与所有已经完成的子图进行约束的计算pose_graph_2d.cc 4.回环检测(

    2024年02月15日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包