多传感器融合中的最小二乘

0. 前言

从接触SLAM开始,多传感器融合一直是该领域的核心,自己也对这块充满了好奇。下面就讲一个自己最开始接触传感器融合的故事吧。

  1. 导入
    在大学期间,第一次做平衡车开始,需要让小车保持平衡,就需要对平衡车进行倾斜角的测量,用到了常见的MEMS惯性传感器MPU6050,里面有XYZ三轴的加速度计,还有XYZ三轴的陀螺仪也就是角速度计,按照常理而言,直接对各个轴的角速度进行积分可以计算出倾角,但是由于设备低廉,你不能保证它静止的时候角速度测量值真的为0度/s,直接积分容易出问题。
  2. 转机
    于是各种查资料,得知物体一直受到重力影响,而加速度刚好又是专门测量加速度的。那么就开始了假设,物体在匀速运动过程中,通过倾斜过程中测量得到的重力加速度在各个轴的分量,可以计算出倾角的大小【狂喜】。实现的过程中发现,物体并不是永远匀速只受到重力加速度,小车稍微的电机振动,就偏差大的不得了。
  3. 加权融合
    加速度测量得到的角度有部分真实可信,但是角速度直接积分又容易出问题。于是又查资料得知,在每次角速度积分的过程中,将加速度测量的角度进行加权,作为本次积分的最终结果,发现效果还不错。于是小车的倾角测量也就终于解决了,后面就是如何根据倾角控制小车平衡了。
  4. 心得
    说实话,不断的查资料解决各种问题让我很有成就感,然后我也就慢慢接触融合相关的内容了。最后,不断的有中想法,就是有没有更好的方案,后面了解到了卡尔曼滤波,然后就是EKF、UKF、ESKF、IEKF。截至目前要讲的非线性优化融合。但是需要注意的是,截至到下面介绍非线性的方案之前,困扰我的是如何使得迭代更加准确,然而融合优化的过程很多时候不一定对实时有那么高的要求,而是对全局的误差最小。

1. 非线性优化融合简介

  1. 这套理论是基于最小二乘法的,里面的有些相关内容与EKF很相似,但又有些思想不太一样。EKF是将非线性测量系统进行了一阶泰勒展开,然后根据变换后的观测先验与真实观测的残差进行状态的优化,需要自己看完这方面后自己总结。
  2. 下面这方面的内容,假设你已经对最小二乘的拟合、求解已经有了初步的认识。
  3. 下面我是基于 IMU 与 Camera 来讲述的。我们将从一个从顶向下的逻辑认识,也就是由简单到复杂的过程。

2. 基于最小二乘法的多传感器融合步骤

2.1 优化的对象:全局 or 局部

进行优化之前,你需要明确你是要全局整体误差最小,还是考虑要求实时性较高的局部最优,这二者的思想有些不太一样。,这篇文章主要对全局优化进行介绍。

  • 将全局的观测数据进行最优化:这个一般会对 所有的边和节点,结合所有观测的误差信息,整体计算一次,得到 每一个节点的状态 的最优状态。这个的实现有两种,一种是每新增一个数据就重新计算。另一种就是每新增一个数据,内部自动保留以前的结果,增量更新,就不用手动添加全部节点,只需要增量假如新节点,这个也会更新全部节点,如ISAM2,适合实时性较高的场景。两种的优化结果理论上一致,能够使得全局优化保持一致。

  • 具有先验信息的局部最优化:这种一般会将以前的优化信息 总结为先验信息,包括先验状态、先验协方差等信息,然后结合当前的测量信息以及观测信息进行后验估计,包含后验状态、后验协方差。然后作为下一次迭代优化的先验信息这种是迭代优化方案,具有局部最优,无法保证全局最优。如EKF、ESKF、UKF等

2.2. 定义系统需要优化状态

  • 在进行优化之前,我们必须知道系统需要最终优化的变量是什么,在SLAM系统中一般需要对机器人位置姿态进行计算。由于我们系统使用了IMU,那么再加一项状态就是关于IMU的测量偏差的估计 b i a s bias bias,最终系统的状态量如下,注意它是一个列向量
    x = [ P w b j , Q w b j , V j w , b a b j , b g b j ] T ( 式2-1) x=[P_{wbj},Q_{wbj},V_{j}^w,b_a^{bj},b_g^{bj}]^T \tag{ 式2-1} x=[Pwbj,Qwbj,Vjw,babj,bgbj]T( 2-1)

2.2 构造优化函数

  • 与传统单项最小二乘法不同的是,多传感器融合涵盖不同传感器,这些传感器之间不会相互影响,因此传感器之间是不相关的,那么就可以单独考虑每个传感器单独构造的代价函数。
  • 因为需要多传感器融合,而且最终的目的只有一个就是得到最优状态,那么就需要设计一个含全部信息的代价优化函数,也就是 F F F,这个 F F F需要包含IMU的信息,也要包含Camera的信息。实际上,这两个传感器,各自单独都可以估计我们最终的状态,那挺好,我们就根据他们各自独立的代价优化函数,最后给加起来就行。
  • 假如IMU的独立代价优化函数为 F i m u F_{imu} Fimu,相机的代价优化函数为 F c a m F_{cam} Fcam,由此我们得到一个包含全部信息的代价优化函数 F F F
    F = F i m u + F c a m = ∑ i = 1 m ∣ ∣ f i m u i ∣ ∣ 2 + ∑ i = 1 n ∣ ∣ f c a m i ∣ ∣ 2 = f i m u T ⋅ f i m u + f c a m T ⋅ f c a m ( 式2-2) \begin{align} F &=F_{imu}+F_{cam} \\ &= \sum_{i=1}^{m}||f_{imu}^i||^2+\sum_{i=1}^{n}||f_{cam}^i||^2\\ &=f^T_{imu} \cdot f_{imu}+f^T_{cam} \cdot f_{cam} \end{align} \tag{ 式2-2} F=Fimu+Fcam=i=1m∣∣fimui2+i=1n∣∣fcami2=fimuTfimu+fcamTfcam( 2-2)
  • 需要解释的是, f i m u f_{imu} fimu是IMU构建的残差向量,具体表示如下,在优化的过程中,IMU的 i i i j j j时刻的预积分量 α b i b j \alpha_{b_ib_j} αbibj q b j b i q_{b_jb_i} qbjbi β b j b i \beta b_jb_i βbjbi是已知的,而且上一时刻状态 p w b i p_{wb_i} pwbi q b i w q_{b_iw} qbiw v i w v_i^w viw b i a b_i^a bia b i g b_i^g big也是已知的,剩下的也就是需要优化的状态量 x = [ P w b j , Q w b j , V j w , b a b j , b g b j ] x=[P_{wbj},Q_{wbj},V_{j}^w,b_a^{bj},b_g^{bj}] x=[Pwbj,Qwbj,Vjw,babj,bgbj]是可变的,不过它是有初值的【插一嘴】:残差向量函数中的残差项,实际上是由状态量进行变换后,与观测量如预积分之间的差值。这与EKF中的残差构建很像。
    f i m u = [ f i m u 1 f i m u 2 f i m u 3 f i m u 4 f i m u 5 ] = [ r p r q r v r b a r b g ] = [ q b i w ( p w b j − p w b i − v i w △ t + 1 2 g w △ t 2 ) − α b i b j 2 [ q b j b i ⊗ ( q b i w ⊗ q w b j ) ] q b i w ( v j w − v i w + g w △ t ) − β b i b j b j a − b i a b j g − b i g ] (式2-3) f_{imu}= \begin{bmatrix} f_{imu}^1 \\ \\ f_{imu}^2 \\ \\ f_{imu}^3 \\ \\ f_{imu}^4 \\ \\ f_{imu}^5 \end{bmatrix} = \begin{bmatrix} r_p \\\\ r_q \\\\ r_v \\\\ r_{ba} \\\\ r_{bg} \end{bmatrix} = \begin{bmatrix} q_{b_iw} (p_{wb_j} - p_{wb_i}-v_i^w\triangle t+\frac{1}{2}g^w\triangle t^2) -\alpha_{b_ib_j}\\\\ 2[q_{b_jb_i} \otimes(q_{b_iw} \otimes q_{wb_j})] \\\\ q_{b_iw}(v_j^w - v_i^w + g^w \triangle t) - \beta_{b_ib_j} \\\\ b_j^a-b_i^a \\\\ b_j^g - b_i^g \end{bmatrix} \tag{式2-3} fimu= fimu1fimu2fimu3fimu4fimu5 = rprqrvrbarbg = qbiw(pwbjpwbiviwt+21gwt2)αbibj2[qbjbi(qbiwqwbj)]qbiw(vjwviw+gwt)βbibjbjabiabjgbig (2-3)

2.3 状态变量的优化更新

  • 根据代价函数的雅可比矩阵,来优化状态变量,已经有了相关算法研究,这里介绍最简单的最速梯度下降。需要注意 x k x_k xk可以看作有值的。
    x k + 1 − x k = − J k T (式2-4) x_{k+1} - x_k = -J_k^T \tag{式2-4} xk+1xk=JkT(2-4)
  • 本次更新中,每迭代更新都需要更新雅可比矩阵 J k J_k Jk,这个 J k J_k Jk总的代价优化函数F 关于 状态x 的雅可比矩阵,计算表达式如下,最终的结果为两部分独立代价函数对状态的雅可比矩阵之和。
    J k = ∂ F ∂ x = ∂ F i m u ∂ x + ∂ F c a m ∂ x = [ ∂ F i m u ∂ x 1 , ∂ F i m u ∂ x 2 . . . ∂ F i m u ∂ x n ] + [ ∂ F c a m ∂ x 1 , ∂ F c a m ∂ x 2 . . . ∂ F c a m ∂ x n ] (式2-5) \begin{align} J_k &= \frac{\partial F}{\partial x} \\\\ &= \frac{\partial F_{imu}}{\partial x} + \frac{\partial F_{cam}}{\partial x} \\\\ &= [ \frac{\partial F_{imu}}{\partial x_1}, \frac{\partial F_{imu}}{\partial x_2} ... \frac{\partial F_{imu}}{\partial x_n} ] + [ \frac{\partial F_{cam}}{\partial x_1}, \frac{\partial F_{cam}}{\partial x_2} ... \frac{\partial F_{cam}}{\partial x_n} ] \end{align} \tag{式2-5} Jk=xF=xFimu+xFcam=[x1Fimu,x2Fimu...xnFimu]+[x1Fcam,x2Fcam...xnFcam](2-5)
  • 实际应用中,每一部分如 ∂ F i m u ∂ x \frac{\partial F_{imu}}{\partial x} xFimu 是相对计算的,如 LM优化中,它会计算残差向量函数 f i m u f_{imu} fimu关于状态的雅可比矩阵 J f i m u J_{f_{imu}} Jfimu,以及未更新状态前的残差向量值 f i m u f_{imu} fimu,然后通过等价形式得到 F i m u F_{imu} Fimu关于状态的雅可比矩阵。
    ∂ F i m u ∂ x = ( J f i m u T ⋅ f i m u ) T ,且 J f i m u T = ∂ f i m u ∂ x = [ J 1 x J 2 x . . . J 5 x ] (式2-6) \frac{\partial F_{imu}}{\partial x}= (J^T_{f_{imu}} \cdot {f_{imu}})^T,且J^T_{f_{imu}}=\frac{\partial f_{imu}}{\partial x}= \begin{bmatrix} J_1{x} \\\\ J_2{x} \\\\ ... \\\\ J_5{x} \end{bmatrix} \tag {式2-6} xFimu=(JfimuTfimu)T,且JfimuT=xfimu= J1xJ2x...J5x (2-6)

2.4 引入各自协方差作为更新权重

  • 在因子图中,每一个因子的分布都是一个多维高斯分布,因此不同观测因子有着不同的协方差,那么该观测因子对于节点状态的更新权重不一样。此时需要考虑 IMU和Camera 各自协方差。
    p ( x ) = 1 ∣ 2 π Σ ∣ ⋅ e x p − 1 2 ( x − u ) T Σ − 1 ( x − u ) p(x)=\frac{1}{\sqrt{|2\pi \Sigma|}}\cdot exp^{ -\frac{1}{2}(x-u)^T \Sigma^{-1} (x-u) } p(x)=∣2πΣ∣ 1exp21(xu)TΣ1(xu)

  • 信息矩阵:它是协方差矩阵的逆,内部的元素代表变量之间影响程度,0代表二者不影响,这玩意源自多元正态分布;协方差矩阵某元素为0,其对应信息矩阵元素不一定为0。对信息矩阵的元素进行操作时,需要了解边缘化、舒尔补

  • 假如IMU预积分量的协方差为 Σ i m u \Sigma_{imu} Σimu ,在IMU的代价优化函数中,对于状态量引入信息矩阵的解为
    J f i m u T ⋅ Σ i m u − 1 ⋅ J f i m u ⏟ I M U 预积分的贡献 ⋅ △ x = − J f i m u T ⋅ Σ i m u − 1 ⋅ f i m u ⏟ I M U 预积分的贡献 \underbrace{J^T_{f_{imu}}\cdot \Sigma_{imu}^{-1}\cdot J_{f_{imu}}}_{IMU预积分的贡献} \cdot \triangle x=- \underbrace{J^T_{f_{imu}}\cdot \Sigma^{-1}_{imu}\cdot f_{imu}}_{IMU预积分的贡献} IMU预积分的贡献 JfimuTΣimu1Jfimux=IMU预积分的贡献 JfimuTΣimu1fimu

  • 对于多个因子的更新累加形式,自己推的话有些地方还是需要注意下,已核查的正确如下:
    ( ∑ i = 1 J f i T ⋅ Σ i − 1 ⋅ J f i ) ⋅ △ x = ( ∑ J f i T ⋅ Σ i − 1 ⋅ f i ) (\sum_{i=1} J^T_{f_{i}}\cdot \Sigma_{i}^{-1}\cdot J_{f_{i}}) \cdot \triangle x = (\sum J^T_{f_{i}}\cdot \Sigma^{-1}_{i}\cdot f_{i}) i=1JfiTΣi1Jfix=JfiTΣi1fi

3. IMU预积分相关知识

3.1 IMU预积分的残差

  • 这部分内容实际上为了构建系统需要估计的状态与IMU预积分量之间的残差,实际上是为了服务状态估计的。只不过状态量为系统状态量,也就是待估计状态,然后预积分量作为观测,从而构建残差。
  • IMU的残差构建如(式子2-3)

3.2 残差关于状态的雅可比矩阵

  • 优化的过程中,待估计的状态 x x x 一般是有初值的,变换后与观测量存在差值,此时需要通过差值更新状态 x x x,因此需要计算残差项关于状态的雅可比矩阵。

3.3 IMU预积分过程的协方差

  • 在IMU进行预积分的过程中,加速度计和角速度计都是有噪声的,那么它的每一次积分都会使得误差累积,因此需要考量:1. 之前预积分的协方差如何变化,2. 当前积分过程中噪声对方差的变化.
  • 噪声传播:因此期望得到下面在每次预积分迭代过程中,关于噪声的传播如下, a a a 代表加速度计, g g g 代表角速度计; δ \delta δ 代表误差, n n n 代表测量噪声。
    [ δ α k + 1 δ θ k + 1 δ β k + 1 δ b a k + 1 δ b g k + 1 ] = F ⋅ [ δ α k δ θ k δ β k δ b a k δ b g k ] + G ⋅ [ n a n g n a n b a n b g ] \begin{bmatrix} \delta \alpha_{k+1} \\\\ \delta \theta_{k+1} \\\\ \delta \beta_{k+1} \\\\ \delta b_{a_{k+1}} \\\\ \delta b_{g_{k+1}} \end{bmatrix} =F\cdot \begin{bmatrix} \delta \alpha_k \\\\ \delta \theta_k \\\\ \delta \beta_k \\\\ \delta b_{a_k} \\\\ \delta b_{g_k} \end{bmatrix}+ G\cdot \begin{bmatrix} n_a \\\\ n_g \\\\ n_a \\\\ n_{b_a} \\\\ n_{b_g} \end{bmatrix} δαk+1δθk+1δβk+1δbak+1δbgk+1 =F δαkδθkδβkδbakδbgk +G nangnanbanbg
  • 噪声传播得到协方差传播,注意这是预积分量的协方差。除非你起始就开始积分,才代表状态量。注意,刚开始时 Σ k = 0 \Sigma_k=0 Σk=0
    Σ k = F k − 1 ⋅ Σ k − 1 ⋅ F k − 1 T + G k − 1 ⋅ Σ n ⋅ G k − 1 \Sigma_k=F_{k-1} \cdot \Sigma_{k-1} \cdot F^T_{k-1} + G_{k-1} \cdot \Sigma_n \cdot G_{k-1} Σk=Fk1Σk1Fk1T+Gk1ΣnGk1

4. 相机相关知识

4.1 BA(Bundle Adjustment)

  • 简介:BA是针对 一段时间内 相机与被观测点构成的观测关系,进行相机Pose、被观测点LandMark的Pose最优化的问题

5. 推荐链接:

  1. 知乎:从零开始做自动驾驶定位
  2. CSDN:自制SLAM框架
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酸奶可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值