gtsam 学习十(ISAM2 理论)

VIPgtsam 学习十(ISAM2 理论)
翻译自:iSAM2: Incremental Smoothing and Mapping Using the Bayes Tree摘要提出了一种新型的贝斯树处理稀疏矩阵,在转化为因子图,可以更好的求解平方根信息和映射问题。文中提出了三个概念使用概率密度项进行矩阵分解介绍如何将矩阵分解转换为贝叶斯数和条件概率密度基于贝叶斯树提供了一种新的系数非线性优化:ISAM2(进行重新排序和重新线性化,避免了批量更新)问题描述文章聚焦与如何用增量实时解决非线性问题,利用增量即新的测量值实时更新估
开通可读全文 ·8.4k 人阅读
最低0.47元/天 解锁文章

翻译自:iSAM2: Incremental Smoothing and Mapping Using the Bayes Tree

摘要

提出了一种新型的贝斯树处理稀疏矩阵,在转化为因子图,可以更好的求解平方根信息和映射问题。
文中提出了三个概念

  1. 使用概率密度项进行矩阵分解
  2. 介绍如何将矩阵分解转换为贝叶斯数和条件概率密度
  3. 基于贝叶斯树提供了一种新的系数非线性优化:ISAM2(进行重新排序和重新线性化,避免了批量更新)

问题描述

文章聚焦与如何用增量实时解决非线性问题,

  1. 利用增量即新的测量值实时更新估计值?:比如机器人的导航和规划

  2. 使用因子图求解一个状态估计文题
    (1):定义一个因子图
    F : 因 子 图 所 有 函 数 节 点 , f i ∈ F F:因子图所有函数节点,f_i\in F F:因子图所有函数节点,fi​∈F
    Θ : 因 子 图 所 有 因 子 节 点 θ j ∈ Θ \Theta:因子图所有因子节点\theta_j \in \Theta Θ:因子图所有因子节点θj​∈Θ
    E : 边 : 两 个 因 子 图 之 间 的 关 系 E:边:两个因子图之间的关系 E:边:两个因子图之间的关系
    G : 一 个 因 子 图 G:一个因子图 G:一个因子图
    G = ( F , Θ , E ) G=(F,\Theta,E) G=(F,Θ,E)
    (2):由因子图可以得到因式分解为:
    Θ i : 表 示 所 有 与 函 数 f i 相 邻 因 子 节 点 θ j 的 集 合 \Theta_i:表示所有与函数f_i相邻因子节点\theta_j的集合 Θi​:表示所有与函数fi​相邻因子节点θj​的集合
    e i j : 表 示 一 个 因 子 节 点 e i 与 一 个 函 数 节 点 e j 的 联 系 e_{ij}:表示一个因子节点e_i与一个函数节点e_j的联系 eij​:表示一个因子节点ei​与一个函数节点ej​的联系
    f ( Θ ) = Π i ( f i ( Θ i ) ) f(\Theta)=\Pi_i(f_i(\Theta_i)) f(Θ)=Πi​(fi​(Θi​))
    (3):得到目标函数为:
    Θ ∗ = a r g m a x Θ f ( Θ ) \Theta^*=argmax_\Theta f(\Theta) Θ∗=argmaxΘ​f(Θ)
    例如下图:
    m : 路 标 测 量 值 m:路标测量值 m:路标测量值
    c : 回 环 c:回环 c:回环
    u : 里 程 计 u:里程计 u:里程计
    在这里插入图片描述

  3. 假设测量模型为高斯模型
    h i ( Θ i ) : 测 量 函 数 模 型 ( 理 论 值 ) h_i(\Theta_i):测量函数模型(理论值) hi​(Θi​):测量函数模型(理论值)
    z i : 测 量 值 z_i:测量值 zi​:测量值
    ∣ ∣ e ∣ ∣ ∑ 2 = e T ∑ − 1 e ||e||^2_{\sum}=e^T\sum^{-1}e ∣∣e∣∣∑2​=eT∑−1e
    f i ( Θ i ) = e − 1 2 ∣ ∣ h i ( Θ i ) − z i ∣ ∣ ∑ i 2 f_i(\Theta_i)=e^{-\frac{1}{2}||h_i(\Theta_i)-z_i||^2_{\sum_i}} fi​(Θi​)=e−21​∣∣hi​(Θi​)−zi​∣∣∑i​2​
    目标函数更新为:
    a r g m i n Θ ( − l o g f ( Θ ) ) = a r g m i n Θ 1 2 ∣ ∣ h i ( Θ i ) − z i ) ∣ ∣ ∑ i 2 argmin_\Theta (-logf(\Theta))=argmin_\Theta \frac{1}{2}||h_i(\Theta_i)-z_i)||^2_{\sum_i} argminΘ​(−logf(Θ))=argminΘ​21​∣∣hi​(Θi​)−zi​)∣∣∑i​2​
    定义协防差矩阵为(马氏距离):
    Σ : 协 防 差 矩 阵 Σ:协防差矩阵 Σ:协防差矩阵
    ∣ ∣ e ∣ ∣ Σ 2 = e T Σ − 1 e ||e||^2_Σ=e^T Σ^{-1}e ∣∣e∣∣Σ2​=eTΣ−1e

  4. 使用高斯牛顿/列文伯格方法求解非线性方程: h i ( Θ i ) h_i(\Theta_i) hi​(Θi​)
    于是目标函数变为:
    A : m × n 阶 的 雅 克 比 矩 阵 , m : 测 量 值 的 个 数 A:m×n 阶的雅克比矩阵,m:测量值的个数 A:m×n阶的雅克比矩阵,m:测量值的个数
    Δ : n 维 向 量 \Delta:n维向量 Δ:n维向量

    a r g m i n Θ ( − l o g f ( Δ ) ) = a r g m i n Θ 1 2 ∣ ∣ A Δ − b ) ∣ ∣ 2 argmin_\Theta (-logf(\Delta))=argmin_\Theta \frac{1}{2}||A\Delta-b)||^2 argminΘ​(−logf(Δ))=argminΘ​21​∣∣AΔ−b)∣∣2
    此时的协防差为:
    ∣ ∣ Δ ∣ ∣ Σ 2 = Δ T Σ − 1 Δ = Δ T Σ − T / 2 Σ − 1 / 2 Δ = ∣ ∣ Σ − 1 / 2 Δ ∣ ∣ 2 ||\Delta||^2_Σ=\Delta^TΣ^{-1}\Delta=\Delta^TΣ^{-T/2}Σ^{-1/2}\Delta=||Σ^{-1/2}\Delta||^2 ∣∣Δ∣∣Σ2​=ΔTΣ−1Δ=ΔTΣ−T/2Σ−1/2Δ=∣∣Σ−1/2Δ∣∣2
    参数 Δ \Delta Δ:
    迭代时,一旦找到当前的 Δ \Delta Δ,使用 Θ ⊕ Δ \Theta\oplus\Delta Θ⊕Δ作为下一次迭代值
    ⊕ : 一 般 为 加 法 , 但 是 在 用 四 元 数 做 3 D 旋 转 和 映 射 时 使 用 相 关 李 群 代 替 \oplus:一般为加法,但是在用四元数做3D旋转和映射时使用相关李群代替 ⊕:一般为加法,但是在用四元数做3D旋转和映射时使用相关李群代替
    参数 A A A:
    A为稀疏块矩阵,对应非线性高斯因子图在 Θ \Theta Θ处的线性化,与原非线性图一样,均在 Δ \Delta Δ处服从高斯分布,
    定义函数: P ( Δ ) P(\Delta) P(Δ):
    定义函数: P ( Δ ) = e − l o g f ( Δ ) = e − 1 2 ∣ ∣ A Δ − b ∣ ∣ 2 P(\Delta)=e^{-logf(\Delta)}=e^{- \frac{1}{2}||A\Delta-b||^2} P(Δ)=e−logf(Δ)=e−21​∣∣AΔ−b∣∣2
    A Δ − b A\Delta-b AΔ−b:可以使用Cholesky或者QR分解:
    在 d Δ : Δ 的 微 分 为 0 时 d\Delta:\Delta的微分为0时 dΔ:Δ的微分为0时:
    (1):Choleskyf分解得到 A T A = R T R A^TA=R^TR ATA=RTR
    (2): y = R Δ y=R\Delta y=RΔ
    可以得到正规方程,先求解y,(或使用QR分解正规方程)就可以得到更新 Δ \Delta Δ
    A T A Δ = ( 1 ) A T b    ⟺    R T y ( 1 ) = A b A^TA\Delta=^{(1)}A^Tb \iff R^Ty^{(1)}=A^b ATAΔ=(1)ATb⟺RTy(1)=Ab,

  5. 最后得到GTSAM中的迭代求解方法(用直接方程求解器(Cholesky,QR)求解SLAM的平滑解的一般结构。)

(1): Θ \Theta Θ:
(2): Θ ′ = Θ ⊕ Δ \Theta'=\Theta\oplus\Delta Θ′=Θ⊕Δ:更新下一步
(3):step3-6步使用信赖区域法迭代求解

1. 添加测量值
2. 添加并初始化变量
3. 在(1)处线性化
4. 使用QR或者Cholesky分解
5. 求解Δ
6. 获得更新的估计值(2)

6.总结
上述迭代方法可以使用局部进行迭代,从而避免了批量处理,然而当加入了新的因子,变量顺序往往不是最优的,ISAM会进行周期性的批量分解,对变量重新排序并进行隐式分解,然而该方法只在批量处理中试探进行,不能得到线性最优解。

贝叶斯树

将状态估计文体直接转换为图模型解决,无需将因子图转换为稀疏矩阵,然后应用稀疏线性代数方法。

  1. 将因子图转换为贝叶斯网络(变量消除)
    伪代码:变量消除法

(1): θ j \theta_j θj​
(2): f j o i n t ( θ j , S j ) = Π i f i ( Θ I ) , ( Θ i : θ j 相 关 函 数 节 点 ) f_{joint}(\theta_j,S_j)=\Pi_if_i(\Theta_I),(\Theta_i:\theta_j相关函数节点) fjoint​(θj​,Sj​)=Πi​fi​(ΘI​),(Θi​:θj​相关函数节点)
(3): f j o i n t ( θ j , S j ) = P ( θ j ∣ S j ) f n e w ( S j ) f_{joint}(\theta_j,S_j)=P(\theta_j|S_j)f_{new}(S_j) fjoint​(θj​,Sj​)=P(θj​∣Sj​)fnew​(Sj​)

1.移除所有相邻与(1)相邻的函数节点,定义Sj,所有移除函数节点相关因子节点,除了(1)
2.得到联合概率密度矩阵(2)
3.使用链式规则,条件概率密度(3),

消除顺序见下图
原 始 函 数 节 点 : f ( x 1 ) , f ( x 1 , x 2 ) , f ( x 2 , x 3 ) , , f ( l 1 , l 1 ) , f ( l 1 , x 2 ) , f ( l 2 , x 3 ) 原始函数节点:f(x_1),f(x_1,x_2),f(x_2,x_3),,f(l_1,l_1),f(l_1,x_2),f(l_2,x_3) 原始函数节点:f(x1​),f(x1​,x2​),f(x2​,x

VIP iSAM2: Incremental Smoothing and Mapping Using the Bayes Tree 阅读笔记 优化这样一个方程,其实就是解这个最小二乘问题,其实就是求A的逆。 这样一个问题包括几个可研究的部分 怎么把各种观测值和变量之间的关系,变成A矩阵 为啥解决一个概率的问题,但都是在处理矩阵的问题呢? 因为我们都是解决的高斯分布的随机变量。高斯分布用一个协方差矩阵和均值向量就能完全表示了。 当我们使用矩阵变换手段,把一个矩阵变成另外一个矩阵,其实也是把一个随机变量变成另外一个随机变量了... 开通可读全文·2.5k 阅读·2 点赞·7 收藏 阅读全文

相关推荐

c++ gtsam/nonlinear/ISAM2.h详细介绍

是一个增量式优化算法,旨在处理实时系统中的因子图。它允许在每次新数据到达时,增量地更新优化结果,而不需要重新优化整个因子图。(Incremental Smoothing and Mapping 2)是 GTSAM 的一种增量式平滑和映射(SLAM)算法实现,用于在动态系统中处理大规模因子图优化问题。提供了一种高效的增量式优化方法,适用于动态系统中的大规模因子图优化问题。通过增量地更新因子图和优化结果,可以处理不断变化的数据,从而在实时应用中保持高效性。算法的参数,例如优化精度、线性化策略等。

HJQD777的博客 926

GTSAM 官方教程学习

GTSAM官方教程学习前言因子图运动建模机器人定位pose slam基于landmark的slamSFMiSAM其他应用 前言 年初完成了深蓝学院多传感器融合的课程,接触到因子图,作业中完成了基于ceres库的因子图构建,但存在cost不下降的问题。计划利用gtsam进行重写,开始学习记录。本文主要内容为gtsam官方教程的翻译,结合泡泡机器人公开课56,会在中间穿插自己的理解和应用。但为了记录自己的学习过程,有些理论性已经掌握的内容会稍微省略。 官方git:官方git(https://github.com

咩吃咩 1万+

Gtsam学习笔记

Gtsam学习笔记 文章目录Gtsam学习笔记cmake引入因子factor预定义的factor生成factor初值定义噪声定义优化方法GaussNewton法LevenbergMarquardt法边缘化 marginal读写 g2o文件iSAM 更新过程LevenbergMarquardtOptimizer cmake引入 # 寻找第三方库,使用大小写都可以,这里列举了两种方式 find_pac...

三川小哥 狂想曲 1万+

GTSAM实战:ISAM2增量优化在机器人SLAM中的5个关键应用技巧

本文深入探讨了GTSAM库中ISAM2增量优化算法在机器人SLAM中的实战应用。通过剖析其增量更新机制,并围绕参数调优、ROS集成、回环处理、内存管理等五个核心技巧,帮助开发者解决从理论到工程落地的关键问题,实现高效、稳定的实时SLAM系统构建。

k6l7m8n9的博客 631

GTSAM Tutorial学习笔记

GTSAM Tutorial学习笔记GTSAM Tutorial学习笔记 GTSAM Tutorial学习笔记 本博客主要

weixin_44580210的博客 3110

GTSAM | gtsam::ISAM2

本节简单介绍`gtsam::ISAM2`类。

九七的博客 732

GTSAM | gtsam::ISAM2Params

本届介绍了GTSAM库的`gtsam::ISAM2Params`类。

九七的博客 638

gtsam-develop-master_gtsam因子图_因子图GTSAM_factorgraph_因子图优化_gtsam库_

因子图优化最好的后端优化库之一,结构清晰,代码简洁易懂,很不错。

Vivado图形化界面烧写MCS文件到SPI FLASH全流程(附常见报错解决方案)

本文详细介绍了使用Vivado图形化界面将MCS文件烧录至SPI FLASH的完整操作流程。内容涵盖从环境准备、MCS文件生成到硬件连接与烧写的每一步,并针对SPI总线宽度报错、FLASH型号识别失败等常见问题提供了深度解决方案,帮助用户高效完成FPGA配置,摆脱对TCL命令行的依赖。

s8t9u0v1w的博客 531

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

weixin_41678956的博客 8656

Jacobi正交多项式在数值分析中的应用与实现

本文深入探讨了Jacobi正交多项式在数值分析中的核心应用与实现。作为最通用的正交多项式族,Jacobi多项式通过参数α和β的调节,可退化为切比雪夫、勒让德等经典多项式,为函数逼近、奇异积分和微分方程求解提供了统一框架。文章重点解析了其在加权高斯积分(高斯-雅可比积分)和谱方法求解微分方程中的关键作用,并提供了基于递归关系和SciPy的稳定高效实现方案,帮助读者掌握这一强大的数值计算工具。

weixin_29306011的博客 243

深度学习图神经网络 (GNN) —— 处理图结构数据(六十九)

本文系统介绍了图神经网络(GNN)的核心概念、主流模型及其应用。主要内容包括: GNN基础:阐述了图结构数据的特性(节点数不定、连接不规则),以及GNN相比CNN/RNN的优势在于处理非欧式空间的图数据。 核心机制:重点讲解了消息传递框架(MPNN),通过聚合邻居信息迭代更新节点表示,并分析了GCN的归一化邻接矩阵计算和GAT的注意力权重机制。 典型模型: GCN:基于归一化邻接矩阵的特征传播 GAT:引入注意力机制区分邻居重要性 GraphSAGE:通过采样解决大图扩展性问题 GIN:理论表达能力最强的图

hello.reader 297

【从0到1实战】C# WinForm开发工业级PLC监控系统(完整串口+Modbus RTU/TCP+数据库存储+源码+避坑指南)

做C#工控上位机开发的工程师,尤其是刚入行的新人,最核心的刚需就是开发一套完整的PLC监控系统。这也是工控领域最基础、最核心、应用最广的项目类型——小到单台PLC的设备测控,大到整线的产线监控,本质都是「上位机与PLC通讯,实现数据采集、参数下发、状态监控、数据存储」。碎片化的知识点学了很多,串口会用了、Modbus协议看了、数据库也懂点,但是始终无法把这些知识点串联起来,做出一套能落地的工业级PLC监控系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1552

020、Sensor 供电设计:AVDD、DVDD、IOVDD 的上电时序与纹波要求

本文总结了图像传感器(Sensor)供电设计中的关键要点与常见问题:1. 三路供电特性差异:AVDD(模拟供电)对纹波最敏感(通常<30mVpp),DVDD需应对大电流瞬态变化,IOVDD需满足MIPI接口电压稳定要求。2. 上电时序至关重要,应遵循"模拟→数字→IO"的启动顺序,时序偏差可能导致初始化失败。3. 纹波控制需合理选择电容组合(如10μF+0.1μF),注意布局走线及电容ESR/ESL特性。4. 调试建议使用示波器多通道测量时序和纹波,重点关注传感器启动瞬间的电源特性。5. 经验教训包括预留设

sundong_81的博客 518

Android12 适配 usb 触屏

在 Android 系统中,输入设备 IDC(Input Device Configuration)设备描述文件(.idc)是用于配置和定义输入设备行为和属性的文本文件。 该文件通常在`/system/usr/idc/` 或 `/vendor/usr/idc/`,具体位置因芯片厂商SDK而异。一般情况此类文件是预置到系统,开发者 root 权限才能修改这些文件。输入设备 IDC 设备描述文件在 Android 系统中起到了识别、配置、映射和定制输入设备的作用,使得系统能够准确解析和处理各种输入设备的事件,提

weixin_35723192的博客 1226

ABAP CURR Data Type 深度解析与实战案例

CURR 数据类型是 SAP ABAP 中为处理货币金额而设计的一种特殊数据类型。CURR 数据类型能够自动根据关联的货币代码字段(例如 WAERS)确定小数位数,从而保证金额数据的精度与正确性。CURR 类型通常在 SAP 数据字典中使用,常见于各类业务数据表中,如会计凭证、销售订单等场景中,用于存储货币金额。CURR 数据类型底层实现上类似于 DEC 数据类型,但其特别之处在于与货币代码字段的绑定,这使得金额的格式化和显示可以自动匹配相应的货币规则。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 874

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: gtsam 学习九(imu 因子)
下一篇: gtsam 学习十一(ISAM2 实践)
磊磊哈哈
博客等级 码龄10年 1286粉丝 94原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值