SLAM的Bundle Adjustment上,随着时间的推移,路标特征点(landmark)和相机的位姿pose愈来愈多,BA的计算量随着变量的增长而增长,即便BA的H矩阵是稀疏的,也吃不消。所以,咱们要限制优化变量的多少,不能只一味的增长待优化的变量到BA里,而应该去掉一些变量。那么如何丢变量就成了一个很重要的问题!好比有frame1,frame2,frame3 以及这些frame上的特征点pt1…ptn。新来了一个frame4,为了避免再增长BA时的变量,出如今脑海里的直接作法是把frame1以及相关特征点pt直接丢弃,只优化frame2,frame3,frame4及相应特征点。然而,这种作法好吗?ide
Gabe Sibley [2]在他们的论文中就明确的说明了这个问题。直接丢掉变量,就致使损失了信息,frame1可能能更多的约束相邻的frame,直接丢掉的方式就破坏了这些约束。在SLAM中,通常几率模型都是建模成高斯分布,如相机的位姿都是一个高斯分布,轨迹和特征点造成了一个多元高斯分布p(x1,x2,x3,pt1…),而后图优化或者BA就从一个几率问题变成一个最小二乘问题。所以,从这个多元高斯分布中去掉一个变量的正确作法是把他从这个多元高斯分布中marginalize out.优化
这marginalize out具体该如何操做呢?Sliding widow Filter [2]中只是简单的一句应用Schur complement(舍尔补). 咱们知道SLAM中的图优化和BA都是最小二乘问题,以下图所示(ref.[1])
.net
构建出来的Hx=b是利用了marg变量的信息,也就是说咱们没有人为的丢弃约束,因此不会丢失信息,可是计算结果的时候,咱们只去更新了咱们但愿保留的那些变量的值。在slam的过程当中,BA不断地加入新的待优化的变量,并marg旧的变量,从而使得计算量维持在必定水平。blog
marginalize的本意是:只更新部分变量,而不是全部变量。图片
一句话总结以下:要把一部分变量从多元高斯分布从分离出来,须要把协方差矩阵也给分开,然而协方差矩阵你们都知道,众多变量之间息息相关,不能简单地说协方差矩阵的哪一块就是谁的,须要用到schur complement (舍尔补)来分割。get
边缘化(marginalization)的过程就是将滑窗内的某些较旧或者不知足要求的视觉帧剔除的过程,因此边缘化也被描述为将联合几率分布分解为边缘几率分布和条件几率分布的过程(说白了,就是利用shur补减小优化参数的过程)。博客
利用Sliding Window作优化的过程当中,边缘化的目的主要有两个:it
直接进行边缘化而不加入先验条件的后果:io
这两种边缘化的措施主要仍是针对悬停和恒速运动等退化运动。class
按理说是不该该把滑窗当作一小节来说的,边缘化、舒尔补都属于滑窗的范围,但前面已经总结了。
并且正如贺一加师兄在其博客中提到的,滑窗的三大法宝"Marginalization","Schur complement","First estimate jacobin",这些在前面也提到了。