翻译自:iSAM2: Incremental Smoothing and Mapping Using the Bayes Tree
摘要
提出了一种新型的贝斯树处理稀疏矩阵,在转化为因子图,可以更好的求解平方根信息和映射问题。
文中提出了三个概念
- 使用概率密度项进行矩阵分解
- 介绍如何将矩阵分解转换为贝叶斯数和条件概率密度
- 基于贝叶斯树提供了一种新的系数非线性优化:ISAM2(进行重新排序和重新线性化,避免了批量更新)
问题描述
文章聚焦与如何用增量实时解决非线性问题,
-
利用增量即新的测量值实时更新估计值?:比如机器人的导航和规划
-
使用因子图求解一个状态估计文题
(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:里程计

-
假设测量模型为高斯模型
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∣∣∑i2
目标函数更新为:
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)∣∣∑i2
定义协防差矩阵为(马氏距离):
Σ : 协 防 差 矩 阵 Σ:协防差矩阵 Σ:协防差矩阵
∣ ∣ e ∣ ∣ Σ 2 = e T Σ − 1 e ||e||^2_Σ=e^T Σ^{-1}e ∣∣e∣∣Σ2=eTΣ−1e -
使用高斯牛顿/列文伯格方法求解非线性方程: 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, -
最后得到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): θ 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)=Πifi(Θ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
926



被折叠的 条评论
为什么被折叠?



