当前位置: 首页 > news >正文

SLAM中的块矩阵与schur补

文章目录

    • SLAM中的块矩阵与schur补
      • Schur补的另一种解释
      • 对角块矩阵的逆为各个块的逆的组合

SLAM中的块矩阵与schur补

Schur补的另一种解释

Schur从概率角度来解释是比较常见的一种推导,可以参考博客https://blog.csdn.net/weixin_41469272/article/details/121994485,此外也可以通过消元与回代的基本原理得到相同的结论。

首先设我们需要求解以下问题:
[ A B C D ] [ x 1 x 2 ] = [ v w ] \begin{bmatrix}A&B\\C&D\end{bmatrix}\begin{bmatrix}x_{1}\\x_{2}\end{bmatrix}=\begin{bmatrix}v\\w\end{bmatrix} [ACBD][x1x2]=[vw]
通常对于SLAM问题,信息矩阵中的{ B = C T B=C^T B=CT}, A , D A,D AD为可逆(对称)方阵

可以得到:
A x 1 + B x 2 = v C x 1 + D x 2 = w Ax_{1}+Bx_{2}=v\\Cx_{1}+Dx_{2}=w Ax1+Bx2=vCx1+Dx2=w
设我们需要marg掉 x 2 x_2 x2,或者先求解 x 1 x_1 x1 H Δ x = b H\Delta x=b HΔx=b问题),

我们对第一行左右两侧均乘以 B D − 1 BD^{-1} BD1,继而可以得到:
B D − 1 C x 1 + B D − 1 D x 2 = B D − 1 w ⇒ B x 2 = B D − 1 w − B D − 1 C x 1 BD^{-1}Cx_{1}+BD^{-1}Dx_{2}=BD^{-1}w \Rightarrow Bx_{2}=BD^{-1}w-BD^{-1}Cx_{1} BD1Cx1+BD1Dx2=BD1wBx2=BD1wBD1Cx1

带入 C x 1 + D x 2 = w Cx_{1}+Dx_{2}=w Cx1+Dx2=w得:
( A − B D − 1 C ) x 1 = v − B D − 1 w (A-BD^{-1}C)x_{1}=v-BD^{-1}w (ABD1C)x1=vBD1w

从而可以看出,我们通过回代同样得到了Schur补的情况。从而,我们可以知道无论是边缘化变量,还是更新参数的 H Δ x = b H\Delta x=b HΔx=b的分块求解问题,归根到底都可以理解为变量的消元问题。

对角块矩阵的逆为各个块的逆的组合

对于给定的 ( 9 × 9 9 \times 9 9×9) 矩阵:

B = [ A 1 0 0 0 A 2 0 0 0 A 3 ] B = \begin{bmatrix} A_{1} & 0 & 0 \\ 0 & A_{2} & 0 \\ 0 & 0 & A_{3} \end{bmatrix} B= A1000A2000A3

其中 A 1 A_1 A1, A 2 A_2 A2, 和 A 3 A_3 A3 均为可逆的 3 × 3 3 \times 3 3×3 矩阵,可以通过求解块对角矩阵的逆来找到 B B B的逆。

1. 块对角矩阵的逆

对于一个块对角矩阵:

B = [ A 1 0 0 0 A 2 0 0 0 A 3 ] B = \begin{bmatrix} A_{1} & 0 & 0 \\ 0 & A_{2} & 0 \\ 0 & 0 & A_{3} \end{bmatrix} B= A1000A2000A3

其逆矩阵也是一个块对角矩阵,其形式为:

B − 1 = [ A 1 − 1 0 0 0 A 2 − 1 0 0 0 A 3 − 1 ] B^{-1} = \begin{bmatrix} A_{1}^{-1} & 0 & 0 \\ 0 & A_{2}^{-1} & 0 \\ 0 & 0 & A_{3}^{-1} \end{bmatrix} B1= A11000A21000A31

2. 证明

X X X B B B 的逆矩阵,即 B X = I BX = I BX=I,其中 I I I 9 × 9 9 \times 9 9×9 的单位矩阵。

考虑以下矩阵乘法:

[ A 1 0 0 0 A 2 0 0 0 A 3 ] [ A 1 − 1 0 0 0 A 2 − 1 0 0 0 A 3 − 1 ] = [ A 1 A 1 − 1 0 0 0 A 2 A 2 − 1 0 0 0 A 3 A 3 − 1 ] = [ I 3 0 0 0 I 3 0 0 0 I 3 ] \begin{bmatrix} A_{1} & 0 & 0 \\ 0 & A_{2} & 0 \\ 0 & 0 & A_{3} \end{bmatrix} \begin{bmatrix} A_{1}^{-1} & 0 & 0 \\ 0 & A_{2}^{-1} & 0 \\ 0 & 0 & A_{3}^{-1} \end{bmatrix} = \begin{bmatrix} A_{1}A_{1}^{-1} & 0 & 0 \\ 0 & A_{2}A_{2}^{-1} & 0 \\ 0 & 0 & A_{3}A_{3}^{-1} \end{bmatrix} = \begin{bmatrix} I_{3} & 0 & 0 \\ 0 & I_{3} & 0 \\ 0 & 0 & I_{3} \end{bmatrix} A1000A2000A3 A11000A21000A31 = A1A11000A2A21000A3A31 = I3000I3000I3

这里的 I 3 I_{3} I3 3 × 3 3 \times 3 3×3 的单位矩阵。

可以看到,右边的矩阵确实是 9 × 9 9 \times 9 9×9 的单位矩阵 I I I。因此,

[ A 1 − 1 0 0 0 A 2 − 1 0 0 0 A 3 − 1 ] \begin{bmatrix} A_{1}^{-1} & 0 & 0 \\ 0 & A_{2}^{-1} & 0 \\ 0 & 0 & A_{3}^{-1} \end{bmatrix} A11000A21000A31

是 B$ 的逆矩阵。

因而型如以下的SLAM求解问题,可以使用schur补+对角块矩阵逆的特性,高效求解
[ B E E T C ] [ Δ x c Δ x p ] = [ 2 20 ] \left[\begin{matrix}B&E\\E^{T}&C\end{matrix}\right]\left[\begin{matrix}\Delta x_{c}\\\Delta x_{p}\end{matrix}\right]=\left[\begin{matrix}2\\20\end{matrix}\right] [BETEC][ΔxcΔxp]=[220]
其中, Δ x c \Delta x_{c} Δxc对应传感器位姿变量的更新量; Δ x c \Delta x_{c} Δxc特征点位置对应的更新量。SLAM问题中的信息矩阵的结构对应如下图所示,其中关于特征点的部分(该矩阵中的C块矩阵)为对角块矩阵。

Schur补得到:
[ B − E C − 1 E T 0 E T C ] [ Δ x c Δ x p ] = [ v − E C − 1 w w ] . \begin{bmatrix}B-EC^{-1}E^T&\mathbf{0}\\E^T&C\end{bmatrix}\left[\begin{array}{c}\Delta\boldsymbol{x}_c\\\Delta\boldsymbol{x}_p\end{array}\right]=\left[\begin{array}{c}\boldsymbol{v}-\boldsymbol{E}C^{-1}\boldsymbol{w}\\\\\boldsymbol{w}\end{array}\right]. [BEC1ETET0C][ΔxcΔxp]= vEC1ww .

从而可以将求逆问题简化为对角块矩阵求逆的问题,先得到 Δ x c \Delta\boldsymbol{x}_c Δxc
[ B − C − 1 E T ] Δ x c = v − E C − 1 w . [B-C^{-1}E^T]\Delta\boldsymbol{x}_c=\boldsymbol{v}-EC^{-1}\boldsymbol{w}. [BC1ET]Δxc=vEC1w.

而后,再带入 B Δ x c + E Δ x p = v B\Delta\boldsymbol{x}_c+E\Delta\boldsymbol{x}_p=\boldsymbol{v} BΔxc+EΔxp=v计算得到 Δ x p \Delta\boldsymbol{x}_p Δxp

此外,也可以利用SAM的方法参考链接,经过因式分解,得到上三角阵,而后使用回代的方法进行求解。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 平安银行秋招攻略,考试内容详解
  • 【AI大模型】赋能儿童安全:楼层与室内定位实践与未来发展
  • 安防监控/视频汇聚平台EasyCVR设备录像回看请求播放时间和实际时间对不上,是什么原因?
  • 昇思训练营打卡第二十天(CycleGAN图像风格迁移互换)
  • 基于JavaScript、puppeteer的爬虫
  • 【Unix/Linux】Unix/Linux如何查看系统版本
  • 双系统ubuntu20.04扩容
  • 使用 Qt 和 ECharts 进行数据可视化
  • 百川工作手机实现销售管理微信监控系统
  • The IsA relationship and HasA relationship
  • Ubuntu安装PostgreSQL
  • Python开发 ——循环中的 `continue` 语句
  • DNS隧道
  • Kafka 和 RabbitMQ对比
  • 我跟ai学web知识点:“短链接”
  • 分享一款快速APP功能测试工具
  • Android 控件背景颜色处理
  • Java 内存分配及垃圾回收机制初探
  • JavaScript异步流程控制的前世今生
  • Object.assign方法不能实现深复制
  • PermissionScope Swift4 兼容问题
  • SpriteKit 技巧之添加背景图片
  • Vue ES6 Jade Scss Webpack Gulp
  • vuex 学习笔记 01
  • 初识 beanstalkd
  • 将回调地狱按在地上摩擦的Promise
  • 浅谈web中前端模板引擎的使用
  • 小程序开发中的那些坑
  • 用jQuery怎么做到前后端分离
  • 找一份好的前端工作,起点很重要
  • ​决定德拉瓦州地区版图的关键历史事件
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #70结构体案例1(导师,学生,成绩)
  • $.ajax()
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (分布式缓存)Redis哨兵
  • (论文阅读40-45)图像描述1
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (区间dp) (经典例题) 石子合并
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十一)手动添加用户和文件的特殊权限
  • (译) 函数式 JS #1:简介
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转)原始图像数据和PDF中的图像数据
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net core docker部署教程和细节问题
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET和.COM和.CN域名区别
  • .NET中分布式服务
  • .skip() 和 .only() 的使用
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...