专栏系列文章如下:

一.因子图优化学习---董靖博士在深蓝学院的公开课学习(1)_goldqiu的博客-CSDN博客

二.因子图优化学习---董靖博士在深蓝学院的公开课学习(2)_goldqiu的博客-CSDN博客

三.因子图优化学习---董靖博士在泡泡实验室的公开课学习_goldqiu的博客-CSDN博客_因子图优化c++

对于因子图的isam1和isam2论文,核心就是增量QR分解和贝叶斯树。

增量QR分解

对于高斯牛顿法中J(x)矩阵构成的线性增量方程组的求解方式是矩阵分解。J(x)矩阵是由误差函数f(x)决定的,而在SLAM问题中J(x)矩阵是维数很高的矩阵。但由于J(x)矩阵的稀疏特性,利用QR分解求解J(x)矩阵构成的高维矩阵的效率就变得很高。

在机器人运行的过程中,因子图一般是逐渐成长和增大的。对于逐渐往外延伸的一个因子图,在机器人往前移动的过程中,增加了一组节点,随着观测的数据越来越多,增加了越来越多的因子进来。每一次求解因子图都是比上次求解的因子图大一些,而且大部分因子图与之前的因子图是基本一致的,这是增量推理问题。如果从零开始求解优化问题,所求矩阵会越来越大,求解速度会越来越慢,而且绝大多数都是重复性的工作。所以这里采用增量QR分解或贝叶斯树的方法来构建因子图,这分别对应了isam1和isam2。

isam1实际上做的就是增量QR分解。对于增量推理问题,有:

,对A矩阵做QR分解,即A = QR,有:

当增加一个新的观测量(因子)时:

进行QR矩阵更新:

因为系统增加了新的因子而导致R矩阵的下一列增加了非零元素,通过对R矩阵左乘Givens旋转矩阵,将增加的列上的非零元素置为零,假设旋转矩阵为Φ :

最后得到一个密集的三角阵,需要重新对状态变量进行排列,将矩阵重新转换为稀疏矩阵,以便后面优化的计算。

贝叶斯树

而isam2利用贝叶斯树进行线性因子图推理,将因子图转换成树状结构,如果是增加了少量因子,只需要增加少许树上的节点,不需要重新求解整个树,求解速度比较快。所有的数据都在树结构上,从树的根部开始,受影响了多大范围,就更新多大范围。但如果遇到很大的回环,因为大部分变量都有触及,所以贝叶斯树中的很多元素会被移动,有大量节点需要重新计算。这就是贝叶斯树构建的因子图优化方法。贝叶斯树是理论最优的方法,实现起来比较难;而增量QR分解是偏经验的方法,可以根据需求来选择采用isam1的增量QR分解还是isam2的贝叶斯树。但这两种方法在遇到大回环的情况下增加了大量因子,都需要重新进行求解。

应用:

根据原理和系统设计思路设计C++源程序,并配置在ROS-Catkin环境中,其中主要的难点是状态变量因子误差函数的构建和对应协方差矩阵的计算。这里使用了第三方库GTSAM,通过库中的API接口进行因子的添加、误差函数的构建、对应协方差矩阵的计算、因子图的优化求解等。GTSAM添加因子构建优化问题求解步骤如下:

1. 构建因子图:首先定义误差模型,然后加先验因子和其他变量因子,通过表示不同传感器的误差函数和协方差矩阵,构建不同类型传感器的因子,最后给因子设定初值。

2. 优化求解:选择优化器对因子图进行优化。

3. 对优化求解进行后处理工作。

四.因子图优化学习---对因子图优化的粗浅理解相关推荐

  1. 凸优化学习:PART3凸优化问题(持续更新)

    凸优化问题 凸优化问题的广义定义: 目标函数为凸函数 约束集合为凸集 一.优化问题 基本用语 一般优化问题的描述: minimize ⁡ f 0 ( x ) subject to  f i ( x ) ...

  2. Java性能优化学习2:性能优化切入点(上)

    性能优化的七类技术手段 性能优化分为,业务优化和技术优化.业务优化一般属于产品和管理的范畴,作为后端开发,一般应有技术优化. 技术优化一般有七类技术手段. 性能优化的重点是在照顾性能的前提下,达到资源 ...

  3. 凸优化学习-(十八)对偶性Duality 拉格朗日函数与对偶函数

    凸优化学习 对偶性是凸优化学习的核心,重中之重. 学习笔记 一.拉格朗日函数与对偶函数 对于一个普通优化问题: min⁡f0(x)s.t.fi(x)≤0i=1⋯mhi(x)=0i=1⋯p\begin{ ...

  4. 三.因子图优化学习---董靖博士在泡泡实验室的公开课学习

    专栏系列文章如下: 一.因子图优化学习---董靖博士在深蓝学院的公开课学习(1)_goldqiu的博客-CSDN博客 二.因子图优化学习---董靖博士在深蓝学院的公开课学习(2)_goldqiu的博客 ...

  5. 二.因子图优化学习---董靖博士在深蓝学院的公开课学习(2)

    专栏系列文章如下: https://blog.csdn.net/weixin_36773706/article/details/122440411http://一.因子图优化学习---董靖博士在深蓝学 ...

  6. 带你读论文:分子图表示学习

    论文:<Hierarchical Inter-Message Passing for Learning on Molecular Graphs> 背景介绍: 分子图表示学习:一般来说,我们 ...

  7. 深度学习-各类梯度下降优化算法回顾

    本文是根据 链接 进行的翻译,回顾了深度学习的各种梯度下降优化算法.*已获得原作者的翻译许可. 文章目录 一.概述 二.引言 三.Gradient Descent Variants(梯度下降法变体) ...

  8. 搜索引擎优化学习原理_如何使用数据科学原理来改善您的搜索引擎优化工作

    搜索引擎优化学习原理 Search Engine Optimisation (SEO) is the discipline of using knowledge gained around how s ...

  9. 深度学习自动编译和优化技术调研

    深度学习自动编译和优化技术调研 转自:https://moqi.com.cn/blog/deeplearning/ 作者:墨奇科技全栈开发 在墨奇科技,我们需要将一些包含深度神经网络(DNN)的 AI ...

最新文章

  1. IDEA和Eclipse设置文件编码格式
  2. 解决oracle11g安装导致数据库无法自动搜集统计信息-转
  3. 并发编程不是少数派技能,每个程序员都要尝试掌握
  4. Finding Similar Items 文本相似度计算的算法——机器学习、词向量空间cosine、NLTK、diff、Levenshtein距离...
  5. Delphi中的容器类
  6. jquery实现图片懒加载
  7. C - And and Pair
  8. 仿真器如何工作以及如何编写? [关闭]
  9. krpano html5略缩图边框颜色,krpano加载场景缩略图列表
  10. 微积分知识总览(0)
  11. oracle11g安装程序闪退,win10安装oracle11g-client闪退
  12. Oracle 10G安装指导
  13. 简单的Android 红外线遥控
  14. 漫画:如何给女朋友解释灭霸的指响并不是真随机消灭半数宇宙人口的?
  15. mahout实现协同过滤推荐算法
  16. Labview连接bartender自动打印条码
  17. java百度地图逆地址解析_百度地图逆地址解析
  18. 球弹跳10次的计算c语言,C/C++编程学习 - 第6周 ⑤ 球弹跳高度的计算
  19. 项目管理 : 如何成为合格的项目经理
  20. 微信JSSDK上传多张图片

热门文章

  1. mybatis 插入数据时返回主键
  2. 京东私有云建设:挑战与应对之道
  3. 【回文字符串】 最长回文子串O(N) Manacher算法
  4. Classifier4J的中文支持
  5. Thinking in C++ Notes 常量
  6. 浏览器屏蔽flash视频广告
  7. secureCRT及secureFX安装注册和secureFX中出现中文乱码的处理方式
  8. 编程指南_halide编程技术指南(连载一)
  9. 重新学习 React (二) Diffing 算法
  10. autoline 手册