学习MSCKF笔记——真实状态、标称状态、误差状态

之前在学习《概率机器人》时总结过扩展卡尔曼滤波概率机器人总结——(扩展)卡尔曼滤波先实践再推导,在本书中介绍的滤波对象通常是各种和机器人相关的状态,包括位置、速度等,而MSCKF后端使用的滤波方法是误差状态的卡尔曼滤波,本文主要是总结《Quaternion Kinematics for the Error-state Kalman Filter》文献中对误差状态的推导,首先,为啥要使用误差状态呢?主要有如下四点:
(1)旋转的误差状态可以避免过参数化问题,由于我们通常使用四元数和旋转矩阵来表示旋转状态,这是一种过参数化的表达方式,带来的问题就是在滤波之后的旋转状态可能就不满足四元数为单位四元数或者旋转矩阵为正交矩阵这样的要求,而旋转的误差状态我们可以使用轴角来表示,轴角通过三个参数来表示一个三自由度的误差状态,这样就避免了过参数化问题。
(2)误差状态系统始终在原点伏击运行,远离了参数奇异性、万向节锁等问题,同时保证了扩展卡尔曼线性化有效性始终保持不变。
(3)误差状态的值通常都很小,这意味着二阶阶乘可以忽略不计,这意味着雅克比的计算变得非常容易和快速,部分雅克比甚至可以设置为常量。
(3)误差状态变化比较慢,这样可以使得我们使用比预测更低的速率进行更新。

误差状态卡尔曼系统一共由三部分组成,真实状态(true state)标称状态(norminal state)误差状态(error state),其中,真实状态为考虑噪声影响的状态,标称状态为不考虑噪声影响的状态,而噪声影响的部分都被考虑进误差状态,因此真实状态由标称状态和误差状态两者共同描述。以IMU和视觉系统为例,标称状态通过IMU测量获得的加速度和角速度基于运动学公式进行积分,而误差状态通过IMU测量的噪声基于扩展卡尔曼的预测方程进行预测,当获得视觉观测后,系统基于扩展卡尔曼的更新方程对误差状态进行更新。更新后将误差状态的均值合入标称状态,然后再被重置为零,而误差状态的协方差矩阵就不断更新来反应这个状态更新和重置的过程。下面进行各个状态的公式推导。

1. 连续时间系统

真实状态、标称状态和误差状态的状态变量如下表所示:
在这里插入图片描述

1.1 真实状态运动学公式

真实状态的运动学公式如下: p ˙ t = v t v ˙ t = R t ( a m − a b t − a n ) + g t q ˙ t = 1 2 q t ⊗ ( ω m − ω b t − ω n ) a ˙ b t = a w ω ˙ b t = ω w g ˙ t = 0 \begin{aligned} \dot{\mathbf{p}}_{t} &=\mathbf{v}_{t} \\ \dot{\mathbf{v}}_{t} &=\mathbf{R}_{t}\left(\mathbf{a}_{m}-\mathbf{a}_{b t}-\mathbf{a}_{n}\right)+\mathbf{g}_{t} \\ \dot{\mathbf{q}}_{t} &=\frac{1}{2} \mathbf{q}_{t} \otimes\left(\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b t}-\boldsymbol{\omega}_{n}\right) \\ \dot{\mathbf{a}}_{b t} &=\mathbf{a}_{w} \\ \dot{\boldsymbol{\omega}}_{b t} &=\boldsymbol{\omega}_{w} \\ \dot{\mathbf{g}}_{t} &=0 \end{aligned} p˙tv˙tq˙ta˙btω˙btg˙t=vt=Rt(amabtan)+gt=21qt(ωmωbtωn)=aw=ωw=0通过公式我们可以看到,真实状态同时收到高斯白噪声 a n \mathbf{a}_{n} an ω n \boldsymbol{\omega}_{n} ωn和随机游走噪声 a n \mathbf{a}_{n} an ω n \boldsymbol{\omega}_{n} ωn的影响。

1.2 标称状态运动学公式

标称状态运动学公式如下: p ˙ = v v ˙ = R ( a m − a b ) + g q ˙ = 1 2 q ⊗ ( ω m − ω b ) a ˙ b = 0 ω ˙ b = 0 g ˙ = 0 \begin{aligned} \dot{\mathbf{p}} &=\mathbf{v} \\ \dot{\mathbf{v}} &=\mathbf{R}\left(\mathbf{a}_{m}-\mathbf{a}_{b}\right)+\mathbf{g} \\ \dot{\mathbf{q}} &=\frac{1}{2} \mathbf{q} \otimes\left(\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b}\right) \\ \dot{\mathbf{a}}_{b} &=0 \\ \dot{\boldsymbol{\omega}}_{b} &=0 \\ \dot{\mathbf{g}} &=0 \end{aligned} p˙v˙q˙a˙bω˙bg˙=v=R(amab)+g=21q(ωmωb)=0=0=0可以看到,标称状态的运动学公式中完全不考虑以上高斯噪声和随机游走噪声,模型默认我们获得的测量值就是没有噪声。

1.3 误差状态运动学公式

误差状态运动学公式如下: δ p ˙ = δ v δ v ˙ = − R [ a m − a b ] × δ θ − R δ a b + δ g − R a n δ θ ˙ = − [ ω m − ω b ] × δ θ − δ ω b − ω n δ a b ˙ = a w δ ω ˙ b = ω w δ g ˙ = 0 \begin{aligned} \dot{\delta \mathbf{p}} &=\delta \mathbf{v} \\ \dot{\delta \mathbf{v}} &=-\mathbf{R}\left[\mathbf{a}_{m}-\mathbf{a}_{b}\right]_{\times} \delta \boldsymbol{\theta}-\mathbf{R} \delta \mathbf{a}_{b}+\delta \mathbf{g}-\mathbf{R a}_{n} \\ \dot{\delta \boldsymbol{\theta}} &=-\left[\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b}\right]_{\times} \delta \boldsymbol{\theta}-\delta \boldsymbol{\omega}_{b}-\boldsymbol{\omega}_{n} \\ \dot{\delta \mathbf{a}_{b}} &=\mathbf{a}_{w} \\ \dot{\delta \boldsymbol{\omega}}_{b} &=\boldsymbol{\omega}_{w} \\ \dot{\delta \mathbf{g}} &=0 \end{aligned} δp˙δv˙δθ˙δab˙δω˙bδg˙=δv=R[amab]×δθRδab+δgRan=[ωmωb]×δθδωbωn=aw=ωw=0真实状态和标称状态运动学公式相对易于理解,而误差运动学公式中, δ v \delta \mathbf{v} δv δ θ \delta \boldsymbol{\theta} δθ公式相对复杂,下面进行推导:
(1)速度误差状态 δ v ˙ \dot{\delta \mathbf{v}} δv˙
从上面真实状态和标称状态的运动学公式中我们可以看到真实测量加速度 a t \mathbf{a}_{t} at和测量角速度 a m \mathbf{a}_{m} am满足: a t = R t ( a m − a b t − a n ) + g t \mathbf{a}_{t}=\mathbf{R}_{t}\left(\mathbf{a}_{m}-\mathbf{a}_{b t}-\mathbf{a}_{n}\right)+\mathbf{g}_{t} at=Rt(amabtan)+gt右侧公式中的真实状态我们使用标称状态和误差状态替换有: g t = g + δ g \mathbf{g}_t = \mathbf{g}+\delta \mathbf{g} gt=g+δg a b t = a b + δ a b \mathbf{a}_{bt} = \mathbf{a}_b+\delta \mathbf{a}_b abt=ab+δab R t = R ( I + [ δ θ ] × ) + O ( ∥ δ θ ∥ 2 ) \mathbf{R}_{t}=\mathbf{R}\left(\mathbf{I}+[\delta \boldsymbol{\theta}]_{\times}\right)+O\left(\|\delta \boldsymbol{\theta}\|^{2}\right) Rt=R(I+[δθ]×)+O(δθ2)下面我们定义: a B ≜ a m − a b \mathbf{a}_{\mathcal{B}} \triangleq \mathbf{a}_{m}-\mathbf{a}_{b} aBamab δ a B ≜ − δ a b − a n \delta \mathbf{a}_{\mathcal{B}} \triangleq-\delta \mathbf{a}_{b}-\mathbf{a}_{n} δaBδaban那么上式就可以写为: a t = R t ( a B + δ a B ) + g + δ g \mathbf{a}_{t}=\mathbf{R}_{t}\left(\mathbf{a}_{\mathcal{B}}+\delta \mathbf{a}_{\mathcal{B}}\right)+\mathbf{g}+\delta \mathbf{g} at=Rt(aB+δaB)+g+δg我们对 v t ˙ \dot{\mathbf{v}_t} vt˙以两种不同的形式进行展开: v ˙ + δ v = v t ˙ = R ( I + [ δ θ ] × ) ( a B + δ a B ) + g + δ g \dot{\mathbf{v}}+\delta \mathbf{v}=\dot{\mathbf{v}_{t}}=\mathbf{R}\left(\mathbf{I}+[\delta \boldsymbol{\theta}]_{\times}\right)\left(\mathbf{a}_{\mathcal{B}}+\delta \mathbf{a}_{\mathcal{B}}\right)+\mathbf{g}+\delta \mathbf{g} v˙+δv=vt˙=R(I+[δθ]×)(aB+δaB)+g+δg于是有 R a B + g + δ v = R a B + R δ a B + R [ δ θ ] × a B + R [ δ θ ] × δ a B + g + δ g \mathbf{R} \mathbf{a}_{\mathcal{B}}+\mathbf{g}+\delta \mathbf{v}=\mathbf{R} \mathbf{a}_{\mathcal{B}}+\mathbf{R} \delta \mathbf{a}_{\mathcal{B}}+\mathbf{R}[\delta \boldsymbol{\theta}]_{\times} \mathbf{a}_{\mathcal{B}}+\mathbf{R}[\delta \boldsymbol{\theta}]_{\times} \delta \mathbf{a}_{\mathcal{B}}+\mathbf{g}+\delta \mathbf{g} RaB+g+δv=RaB+RδaB+R[δθ]×aB+R[δθ]×δaB+g+δg R a B + g \mathbf{R} \mathbf{a}_{\mathcal{B}}+\mathbf{g} RaB+g从等式左侧移动到右侧有 δ v ˙ = R ( δ a B + [ δ θ ] × a B ) + R [ δ θ ] × δ a B + δ g \dot{\delta \mathbf{v}}=\mathbf{R}\left(\delta \mathbf{a}_{\mathcal{B}}+[\delta \boldsymbol{\theta}]_{\times} \mathbf{a}_{\mathcal{B}}\right)+\mathbf{R}[\delta \boldsymbol{\theta}]_{\times} \delta \mathbf{a}_{\mathcal{B}}+\delta \mathbf{g} δv˙=R(δaB+[δθ]×aB)+R[δθ]×δaB+δg忽略二阶小项同时调整叉乘顺序有: δ v = R ( δ a B − [ a B ] × δ θ ) + δ g \delta \mathbf{v}=\mathbf{R}\left(\delta \mathbf{a}_{\mathcal{B}}-\left[\mathbf{a}_{\mathcal{B}}\right]_{\times} \delta \boldsymbol{\theta}\right)+\delta \mathbf{g} δv=R(δaB[aB]×δθ)+δg因此有 δ v = R ( − [ a m − a b ] × δ θ − δ a b − a n ) + δ g \delta \mathbf{v}=\mathbf{R}\left(-\left[\mathbf{a}_{m}-\mathbf{a}_{b}\right]_{\times} \delta \boldsymbol{\theta}-\delta \mathbf{a}_{b}-\mathbf{a}_{n}\right)+\delta \mathbf{g} δv=R([amab]×δθδaban)+δg展开获得最终的结论 δ v = − R [ a m − a b ] × δ θ − R δ a b + δ g − R a n \delta \mathbf{v}=-\mathbf{R}\left[\mathbf{a}_{m}-\mathbf{a}_{b}\right]_{\times} \delta \boldsymbol{\theta}-\mathbf{R} \delta \mathbf{a}_{b}+\delta \mathbf{g}-\mathbf{R} \mathbf{a}_{n} δv=R[amab]×δθRδab+δgRan
(2)角度误差状态 δ θ ˙ \dot{\delta \boldsymbol{\theta}} δθ˙
首先根据真实状态和标称状态的角度运动学方程: q ˙ t = 1 2 q t ⊗ ω t \dot{\mathbf{q}}_{t}=\frac{1}{2} \mathbf{q}_{t} \otimes \boldsymbol{\omega}_{t} q˙t=21qtωt q ˙ = 1 2 q ⊗ ω \dot{\mathbf{q}}=\frac{1}{2} \mathbf{q} \otimes \boldsymbol{\omega} q˙=21qω对于角速度真实状态有: ω t ≜ ω m − ω b t − ω n \boldsymbol{\omega}_t \triangleq\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b t}-\boldsymbol{\omega}_{n} ωtωmωbtωn对于角速度标称状态有 ω ≜ ω m − ω b \boldsymbol{\omega} \triangleq \boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b} ωωmωb因此角速度误差状态有 δ ω ≜ − δ ω b − ω n \delta \boldsymbol{\omega} \triangleq-\delta \boldsymbol{\omega}_{b}-\boldsymbol{\omega}_{n} δωδωbωn同理将角度真实状态进行展开有: ( q ⊗ δ q ) ˙ = q ˙ t = 1 2 q t ⊗ ω t \dot{(\mathbf{q} \otimes \delta \mathbf{q})}=\dot{\mathbf{q}}_{t}=\frac{1}{2} \mathbf{q}_{t} \otimes \boldsymbol{\omega}_{t} (qδq)˙=q˙t=21qtωt于是有 q ˙ ⊗ δ q + q ⊗ δ q ˙ = 1 2 q ⊗ δ q ⊗ ω t \dot{\mathbf{q}} \otimes \delta \mathbf{q}+\mathbf{q} \otimes \dot{\delta \mathbf{q}}=\frac{1}{2} \mathbf{q} \otimes \delta \mathbf{q} \otimes \boldsymbol{\omega}_{t} q˙δq+qδq˙=21qδqωt 1 2 q ⊗ ω ⊗ δ q + q ⊗ δ q ˙ = 1 2 q ⊗ δ q ⊗ ω t \frac{1}{2} \mathbf{q} \otimes \boldsymbol{\omega} \otimes \delta \mathbf{q}+\mathbf{q} \otimes \dot{\delta \mathbf{q}}=\frac{1}{2} \mathbf{q} \otimes \delta \mathbf{q} \otimes \boldsymbol{\omega}_{t} 21qωδq+qδq˙=21qδqωt因此有 2 δ q ˙ = δ q ⊗ ω t − ω ⊗ δ q = [ q ] R ( ω t ) δ q − [ q ] L ( ω ) δ q = [ 0 − ( ω t − ω ) ⊤ ( ω t − ω ) − [ ω t + ω ] × ] [ 1 δ θ / 2 ] + O ( ∥ δ θ ∥ 2 ) = [ 0 − δ ω ⊤ δ ω − [ 2 ω + δ ω ] × ] [ 1 δ θ / 2 ] + O ( ∥ δ θ ∥ 2 ) \begin{aligned} 2 \dot{\delta \mathbf{q}} &=\delta \mathbf{q} \otimes \boldsymbol{\omega}_{t}-\boldsymbol{\omega} \otimes \delta \mathbf{q} \\ &=[\mathbf{q}]_{R}\left(\boldsymbol{\omega}_{t}\right) \delta \mathbf{q}-[\mathbf{q}]_{L}(\boldsymbol{\omega}) \delta \mathbf{q} \\ &=\left[\begin{array}{cc} 0 & -\left(\boldsymbol{\omega}_{t}-\boldsymbol{\omega}\right)^{\top} \\ \left(\boldsymbol{\omega}_{t}-\boldsymbol{\omega}\right) & -\left[\boldsymbol{\omega}_{t}+\boldsymbol{\omega}\right]_{\times} \end{array}\right]\left[\begin{array}{c} 1 \\ \delta \boldsymbol{\theta} / 2 \end{array}\right]+O\left(\|\delta \boldsymbol{\theta}\|^{2}\right) \\ &=\left[\begin{array}{cc} 0 & -\delta \boldsymbol{\omega}^{\top} \\ \delta \boldsymbol{\omega} & -[2 \boldsymbol{\omega}+\delta \boldsymbol{\omega}]_{\times} \end{array}\right]\left[\begin{array}{c} 1 \\ \delta \boldsymbol{\theta} / 2 \end{array}\right]+O\left(\|\delta \boldsymbol{\theta}\|^{2}\right) \end{aligned} 2δq˙=δqωtωδq=[q]R(ωt)δq[q]L(ω)δq=[0(ωtω)(ωtω)[ωt+ω]×][1δθ/2]+O(δθ2)=[0δωδω[2ω+δω]×][1δθ/2]+O(δθ2) 2 δ q ˙ = [ 0 δ θ ˙ ] 2 \dot{\delta \mathbf{q}}=\left[\begin{array}{c} 0 \\ \dot{\delta \boldsymbol{\theta}} \end{array}\right] 2δq˙=[0δθ˙]因此有$ δ θ ˙ = δ ω − [ ω ] × δ θ − 1 2 [ δ ω ] × δ θ + O ( ∥ δ θ ∥ 2 ) \dot{\delta \boldsymbol{\theta}}=\delta \boldsymbol{\omega}-[\boldsymbol{\omega}]_{\times} \delta \boldsymbol{\theta}-\frac{1}{2}[\delta \boldsymbol{\omega}]_{\times} \delta \boldsymbol{\theta}+O\left(\|\delta \boldsymbol{\theta}\|^{2}\right) δθ˙=δω[ω]×δθ21[δω]×δθ+O(δθ2)忽略二阶小项有 δ θ ˙ = − [ ω ] × δ θ + δ ω \dot{\delta \boldsymbol{\theta}}=-[\boldsymbol{\omega}]_{\times} \delta \boldsymbol{\theta}+\delta \boldsymbol{\omega} δθ˙=[ω]×δθ+δω展开得 δ θ ˙ = − [ ω m − ω b ] × δ θ − δ ω b − ω n \dot{\delta \boldsymbol{\theta}}=-\left[\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b}\right]_{\times} \delta \boldsymbol{\theta}-\delta \boldsymbol{\omega}_{b}-\boldsymbol{\omega}_{n} δθ˙=[ωmωb]×δθδωbωn

2. 离散时间系统

根据上面连续时间系统,我们可以推出离散时间系统公式,注意这里推导使用是近似离散法,也就是精确离散法的一阶泰勒展开,在MSCKF中采用的分别是龙格库塔(标称状态)和三阶泰勒展开(误差状态),所以这里的公式和MSCKF中实际应用的离散化方程是不相同的,由于我们实际使用的是标称状态和误差状态的离散时间系统,因此我们只对这两者进行推导,如下

2.1 标称状态

经过时间 Δ t \Delta t Δt系统状态更新为: p ← p + v Δ t + 1 2 ( R ( a m − a b ) + g ) Δ t 2 v ← v + ( R ( a m − a b ) + g ) Δ t q ← q ⊗ q { ( ω m − ω b ) Δ t } a b ← a b ω b ← ω b g ← g \begin{array}{l} \mathbf{p} \leftarrow \mathbf{p}+\mathbf{v} \Delta t+\frac{1}{2}\left(\mathbf{R}\left(\mathbf{a}_{m}-\mathbf{a}_{b}\right)+\mathbf{g}\right) \Delta t^{2} \\ \mathbf{v} \leftarrow \mathbf{v}+\left(\mathbf{R}\left(\mathbf{a}_{m}-\mathbf{a}_{b}\right)+\mathbf{g}\right) \Delta t \\ \mathbf{q} \leftarrow \mathbf{q} \otimes \mathbf{q}\left\{\left(\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b}\right) \Delta t\right\} \\ \mathbf{a}_{b} \leftarrow \mathbf{a}_{b} \\ \boldsymbol{\omega}_{b} \leftarrow \boldsymbol{\omega}_{b} \\ \mathbf{g} \leftarrow \mathbf{g} \end{array} pp+vΔt+21(R(amab)+g)Δt2vv+(R(amab)+g)Δtqqq{(ωmωb)Δt}ababωbωbgg

2.2 误差状态

经过时间 Δ t \Delta t Δt系统状态更新为: δ p ← δ p + δ v Δ t δ v ← δ v + ( − R [ a m − a b ] × δ θ − R δ a b + δ g ) Δ t + v i δ θ ← R ⊤ { ( ω m − ω b ) Δ t } θ − δ ω b Δ t + θ i δ a b ← δ a b + a i δ ω b ← δ ω b + ω i δ g ← δ g \begin{aligned} \delta \mathbf{p} & \leftarrow \delta \mathbf{p}+\delta \mathbf{v} \Delta t \\ \delta \mathbf{v} & \leftarrow \delta \mathbf{v}+\left(-\mathbf{R}\left[\mathbf{a}_{m}-\mathbf{a}_{b}\right]_{\times} \delta \boldsymbol{\theta}-\mathbf{R} \delta \mathbf{a}_{b}+\delta \mathbf{g}\right) \Delta t+\mathbf{v}_{\mathbf{i}} \\ \delta \boldsymbol{\theta} & \leftarrow \mathbf{R}^{\top}\left\{\left(\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b}\right) \Delta t\right\} \boldsymbol{\theta}-\delta \boldsymbol{\omega}_{b} \Delta t+\boldsymbol{\theta}_{\mathbf{i}} \\ \delta \mathbf{a}_{b} & \leftarrow \delta \mathbf{a}_{b}+\mathbf{a}_{\mathbf{i}} \\ \delta \boldsymbol{\omega}_{b} & \leftarrow \delta \boldsymbol{\omega}_{b}+\boldsymbol{\omega}_{\mathbf{i}} \\ \delta \mathbf{g} & \leftarrow \delta \mathbf{g} \end{aligned} δpδvδθδabδωbδgδp+δvΔtδv+(R[amab]×δθRδab+δg)Δt+viR{(ωmωb)Δt}θδωbΔt+θiδab+aiδωb+ωiδg其中 v i , θ i , a i , ω i \mathbf{v}_{\mathbf{i}}, \boldsymbol{\theta}_{\mathbf{i}}, \mathbf{a}_{\mathbf{i}} ,\boldsymbol{\omega}_{\mathbf{i}} vi,θi,ai,ωi为高斯白噪声和随机游走造成的随机变量,其均值为零,协方差矩阵如下 V i = σ a n 2 Δ t 2 I [ m 2 / s 2 ] Θ i = σ ω ~ n 2 Δ t 2 I [ r a d 2 ] A i = σ a w 2 Δ t I [ m 2 / s 4 ] Ω i = σ ω w 2 Δ t I [ r a d 2 / s 2 ] \begin{array}{ll} \mathbf{V}_{\mathbf{i}}=\sigma_{\mathbf{a}_{n}}^{2} \Delta t^{2} \mathbf{I} & {\left[m^{2} / s^{2}\right]} \\ \Theta_{\mathbf{i}}=\sigma_{\tilde{\omega}_{n}}^{2} \Delta t^{2} \mathbf{I} & {\left[r a d^{2}\right]} \\ \mathbf{A}_{\mathbf{i}}=\sigma_{\mathbf{a}_{w}}^{2} \Delta t \mathbf{I} & {\left[m^{2} / s^{4}\right]} \\ \Omega_{\mathbf{i}}=\sigma_{\omega_{w}}^{2} \Delta t \mathbf{I} & {\left[r a d^{2} / s^{2}\right]} \end{array} Vi=σan2Δt2IΘi=σω~n2Δt2IAi=σaw2ΔtIΩi=σωw2ΔtI[m2/s2][rad2][m2/s4][rad2/s2]我们将上面的状态变量分别进行如下定义有: δ x = [ δ p δ v δ θ δ a b δ ω b δ g ] , u m = [ a m ω m ] , i = [ v i θ i a i ω i ] \delta \mathbf{x}=\left[\begin{array}{c} \delta \mathbf{p} \\ \delta \mathbf{v} \\ \delta \boldsymbol{\theta} \\ \delta \mathbf{a}_{b} \\ \delta \boldsymbol{\omega}_{b} \\ \delta \mathbf{g} \end{array}\right] \quad, \quad \mathbf{u}_{m}=\left[\begin{array}{c} \mathbf{a}_{m} \\ \boldsymbol{\omega}_{m} \end{array}\right] \quad, \quad \mathbf{i}=\left[\begin{array}{c} \mathbf{v}_{\mathbf{i}} \\ \boldsymbol{\theta}_{\mathbf{i}} \\ \mathbf{a}_{\mathbf{i}} \\ \boldsymbol{\omega}_{\mathbf{i}} \end{array}\right] δx=δpδvδθδabδωbδg,um=[amωm],i=viθiaiωi我们将误差状态的系统更新写成矩阵形式有: δ x ← f ( x , δ x , u m , i ) = F x ( x , u m ) ⋅ δ x + F i ⋅ i \delta \mathbf{x} \leftarrow f\left(\mathbf{x}, \delta \mathbf{x}, \mathbf{u}_{m}, \mathbf{i}\right)=\mathbf{F}_{\mathbf{x}}\left(\mathbf{x}, \mathbf{u}_{m}\right) \cdot \delta \mathbf{x}+\mathbf{F}_{\mathbf{i}} \cdot \mathbf{i} δxf(x,δx,um,i)=Fx(x,um)δx+Fii其中 F x = ∂ f ∂ δ x ∣ x , u m = [ I I Δ t 0 0 0 0 0 I − R [ a m − a b ] × Δ t − R Δ t 0 I Δ t 0 0 R ⊤ { ( ω m − ω b ) Δ t } 0 − I Δ t 0 0 0 0 I 0 0 0 0 0 0 I 0 0 0 0 0 0 I ] \mathbf{F}_{\mathbf{x}}=\left.\frac{\partial f}{\partial \delta \mathbf{x}}\right|_{\mathbf{x}, \mathbf{u}_{m}}=\left[\begin{array}{cccccc} \mathbf{I} & \mathbf{I} \Delta t & 0 & 0 & 0 & 0 \\ 0 & \mathbf{I} & -\mathbf{R}\left[\mathbf{a}_{m}-\mathbf{a}_{b}\right]_{\times} \Delta t & -\mathbf{R} \Delta t & 0 & \mathbf{I} \Delta t \\ 0 & 0 & \mathbf{R}^{\top}\left\{\left(\boldsymbol{\omega}_{m}-\boldsymbol{\omega}_{b}\right) \Delta t\right\} & 0 & \mathbf{-} \mathbf{I} \Delta t & 0 \\ 0 & 0 & 0 & \mathbf{I} & 0 & 0 \\ 0 & 0 & 0 & 0 & \mathbf{I} & 0 \\ 0 & 0 & 0 & 0 & 0 & \mathbf{I} \end{array}\right] Fx=δxfx,um=I00000IΔtI00000R[amab]×ΔtR{(ωmωb)Δt}0000RΔt0I0000IΔt0I00IΔt000I F i = ∂ f ∂ i ∣ x , u m = [ 0 0 0 0 I 0 0 0 0 I 0 0 0 0 I 0 0 0 0 I 0 0 0 0 ] \mathbf{F}_{\mathbf{i}}=\left.\frac{\partial f}{\partial \mathbf{i}}\right|_{\mathbf{x}, \mathbf{u}_{m}}=\left[\begin{array}{cccc} 0 & 0 & 0 & 0 \\ \mathbf{I} & 0 & 0 & 0 \\ 0 & \mathbf{I} & 0 & 0 \\ 0 & 0 & \mathbf{I} & 0 \\ 0 & 0 & 0 & \mathbf{I} \\ 0 & 0 & 0 & 0 \end{array}\right] Fi=ifx,um=0I000000I000000I000000I0补充一句,如果按照扩展卡尔曼滤波的更新方程有: δ x ^ ← F x ( x , u m ) ⋅ δ x ^ \hat{\delta \mathbf{x}} \leftarrow \mathbf{F}_{\mathbf{x}}\left(\mathbf{x}, \mathbf{u}_{m}\right) \cdot \hat{\delta \mathbf{x}} δx^Fx(x,um)δx^ P ← F x P F x ⊤ + F i Q i F i ⊤ \mathbf{P} \leftarrow \mathbf{F}_{\mathbf{x}} \mathbf{P} \mathbf{F}_{\mathbf{x}}^{\top}+\mathbf{F}_{\mathbf{i}} \mathbf{Q}_{\mathbf{i}} \mathbf{F}_{\mathbf{i}}^{\top} PFxPFx+FiQiFi其中 δ x ∼ N { δ x ^ , P } \delta \mathbf{x} \sim \mathcal{N}\{\delta \hat{\mathbf{x}}, \mathbf{P}\} δxN{δx^,P},并且 Q i = [ V i 0 0 0 0 Θ i 0 0 0 0 A i 0 0 0 0 Ω i ] \mathbf{Q}_{\mathrm{i}}=\left[\begin{array}{cccc} \mathbf{V}_{\mathbf{i}} & 0 & 0 & 0 \\ 0 & \mathbf{\Theta}_{\mathbf{i}} & 0 & 0 \\ 0 & 0 & \mathbf{A}_{\mathbf{i}} & 0 \\ 0 & 0 & 0 & \mathbf{\Omega}_{\mathbf{i}} \end{array}\right] Qi=Vi0000Θi0000Ai0000Ωi至此就完成了误差状态的一个初步推导,具体的误差状态扩展卡尔曼滤波如何应用到MSCKF中下篇博文中再进行总结,包括如何进行状态积分、如果进行状态变量的扩增、如何构建观测方程进行融合,有问题欢迎交流哈~

此外,对其他SLAM算法感兴趣的同学可以看考我的博客SLAM算法总结——经典SLAM算法框架总结

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐