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

  • 学习MSCKF笔记——真实状态、标称状态、误差状态
    • 1. 连续时间系统
      • 1.1 真实状态运动学公式
      • 1.2 标称状态运动学公式
      • 1.3 误差状态运动学公式
    • 2. 离散时间系统
      • 2.1 标称状态
      • 2.2 误差状态

学习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=vtv˙t=Rt(am−abt−an)+gtq˙t=12qt⊗(ωm−ωbt−ωn)a˙bt=awω˙bt=ωwg˙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˙​t​v˙t​q˙​t​a˙bt​ω˙bt​g˙​t​​=vt​=Rt​(am​−abt​−an​)+gt​=21​qt​⊗(ωm​−ωbt​−ωn​)=aw​=ωw​=0​通过公式我们可以看到,真实状态同时收到高斯白噪声an\mathbf{a}_{n}an​和ωn\boldsymbol{\omega}_{n}ωn​和随机游走噪声an\mathbf{a}_{n}an​和ωn\boldsymbol{\omega}_{n}ωn​的影响。

1.2 标称状态运动学公式

标称状态运动学公式如下:p˙=vv˙=R(am−ab)+gq˙=12q⊗(ωm−ωb)a˙b=0ω˙b=0g˙=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​ω˙b​g˙​​=v=R(am​−ab​)+g=21​q⊗(ωm​−ωb​)=0=0=0​可以看到,标称状态的运动学公式中完全不考虑以上高斯噪声和随机游走噪声,模型默认我们获得的测量值就是没有噪声。

1.3 误差状态运动学公式

误差状态运动学公式如下:δp˙=δvδv˙=−R[am−ab]×δθ−Rδab+δg−Ranδθ˙=−[ωm−ωb]×δθ−δωb−ωnδab˙=awδω˙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[am​−ab​]×​δθ−Rδab​+δg−Ran​=−[ωm​−ωb​]×​δθ−δωb​−ωn​=aw​=ωw​=0​真实状态和标称状态运动学公式相对易于理解,而误差运动学公式中,δv\delta \mathbf{v}δv和δθ\delta \boldsymbol{\theta}δθ公式相对复杂,下面进行推导:
(1)速度误差状态δv˙\dot{\delta \mathbf{v}}δv˙:
从上面真实状态和标称状态的运动学公式中我们可以看到真实测量加速度at\mathbf{a}_{t}at​和测量角速度am\mathbf{a}_{m}am​满足:at=Rt(am−abt−an)+gt\mathbf{a}_{t}=\mathbf{R}_{t}\left(\mathbf{a}_{m}-\mathbf{a}_{b t}-\mathbf{a}_{n}\right)+\mathbf{g}_{t}at​=Rt​(am​−abt​−an​)+gt​右侧公式中的真实状态我们使用标称状态和误差状态替换有:gt=g+δg\mathbf{g}_t = \mathbf{g}+\delta \mathbf{g}gt​=g+δgabt=ab+δab\mathbf{a}_{bt} = \mathbf{a}_b+\delta \mathbf{a}_babt​=ab​+δab​Rt=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)下面我们定义:aB≜am−ab\mathbf{a}_{\mathcal{B}} \triangleq \mathbf{a}_{m}-\mathbf{a}_{b}aB​≜am​−ab​δaB≜−δab−an\delta \mathbf{a}_{\mathcal{B}} \triangleq-\delta \mathbf{a}_{b}-\mathbf{a}_{n}δaB​≜−δab​−an​那么上式就可以写为:at=Rt(aB+δaB)+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我们对vt˙\dot{\mathbf{v}_t}vt​˙​以两种不同的形式进行展开:v˙+δv=vt˙=R(I+[δθ]×)(aB+δaB)+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于是有RaB+g+δv=RaB+RδaB+R[δθ]×aB+R[δθ]×δaB+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将RaB+g\mathbf{R} \mathbf{a}_{\mathcal{B}}+\mathbf{g}RaB​+g从等式左侧移动到右侧有δv˙=R(δaB+[δθ]×aB)+R[δθ]×δaB+δ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(δaB−[aB]×δθ)+δ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(−[am−ab]×δθ−δab−an)+δ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(−[am​−ab​]×​δθ−δab​−an​)+δg展开获得最终的结论δv=−R[am−ab]×δθ−Rδab+δg−Ran\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[am​−ab​]×​δθ−Rδab​+δg−Ran​
(2)角度误差状态δθ˙\dot{\delta \boldsymbol{\theta}}δθ˙:
首先根据真实状态和标称状态的角度运动学方程:q˙t=12qt⊗ωt\dot{\mathbf{q}}_{t}=\frac{1}{2} \mathbf{q}_{t} \otimes \boldsymbol{\omega}_{t}q˙​t​=21​qt​⊗ωt​q˙=12q⊗ω\dot{\mathbf{q}}=\frac{1}{2} \mathbf{q} \otimes \boldsymbol{\omega}q˙​=21​q⊗ω对于角速度真实状态有:ωt≜ωm−ωbt−ω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=12qt⊗ω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​=21​qt​⊗ωt​于是有q˙⊗δq+q⊗δq˙=12q⊗δ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˙​=21​q⊗δq⊗ωt​12q⊗ω⊗δq+q⊗δq˙=12q⊗δ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}21​q⊗ω⊗δq+q⊗δq˙​=21​q⊗δ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δθ˙​]因此有$δθ˙=δω−[ω]×δθ−12[δω]×δθ+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+12(R(am−ab)+g)Δt2v←v+(R(am−ab)+g)Δtq←q⊗q{(ωm−ωb)Δt}ab←abωb←ωbg←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}p←p+vΔt+21​(R(am​−ab​)+g)Δt2v←v+(R(am​−ab​)+g)Δtq←q⊗q{(ωm​−ωb​)Δt}ab​←ab​ωb​←ωb​g←g​

2.2 误差状态

经过时间Δt\Delta tΔt系统状态更新为:δp←δp+δvΔtδv←δv+(−R[am−ab]×δθ−Rδab+δg)Δt+viδθ←R⊤{(ωm−ωb)Δt}θ−δωbΔt+θiδab←δab+aiδω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[am​−ab​]×​δθ−Rδab​+δg)Δt+vi​←R⊤{(ωm​−ωb​)Δt}θ−δωb​Δt+θi​←δab​+ai​←δωb​+ωi​←δg​其中vi,θi,ai,ωi\mathbf{v}_{\mathbf{i}}, \boldsymbol{\theta}_{\mathbf{i}}, \mathbf{a}_{\mathbf{i}} ,\boldsymbol{\omega}_{\mathbf{i}}vi​,θi​,ai​,ωi​为高斯白噪声和随机游走造成的随机变量,其均值为零,协方差矩阵如下Vi=σan2Δt2I[m2/s2]Θi=σω~n2Δt2I[rad2]Ai=σaw2ΔtI[m2/s4]Ωi=σωw2ΔtI[rad2/s2]\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​=σan​2​Δt2IΘi​=σω~n​2​Δt2IAi​=σaw​2​ΔtIΩi​=σωw​2​ΔtI​[m2/s2][rad2][m2/s4][rad2/s2]​我们将上面的状态变量分别进行如下定义有:δx=[δpδvδθδabδωbδg],um=[amωm],i=[viθiaiω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​θi​ai​ωi​​⎦⎥⎥⎤​我们将误差状态的系统更新写成矩阵形式有:δx←f(x,δx,um,i)=Fx(x,um)⋅δx+Fi⋅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}δx←f(x,δx,um​,i)=Fx​(x,um​)⋅δx+Fi​⋅i其中Fx=∂f∂δx∣x,um=[IIΔt00000I−R[am−ab]×Δt−RΔt0IΔt00R⊤{(ωm−ωb)Δt}0−IΔt0000I000000I000000I]\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​=∂δx∂f​∣∣∣∣​x,um​​=⎣⎢⎢⎢⎢⎢⎢⎡​I00000​IΔtI0000​0−R[am​−ab​]×​ΔtR⊤{(ωm​−ωb​)Δt}000​0−RΔt0I00​00−IΔt0I0​0IΔt000I​⎦⎥⎥⎥⎥⎥⎥⎤​Fi=∂f∂i∣x,um=[0000I0000I0000I0000I0000]\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​=∂i∂f​∣∣∣∣​x,um​​=⎣⎢⎢⎢⎢⎢⎢⎡​0I0000​00I000​000I00​0000I0​⎦⎥⎥⎥⎥⎥⎥⎤​补充一句,如果按照扩展卡尔曼滤波的更新方程有:δx^←Fx(x,um)⋅δ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←FxPFx⊤+FiQiFi⊤\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}P←Fx​PFx⊤​+Fi​Qi​Fi⊤​其中δx∼N{δx^,P}\delta \mathbf{x} \sim \mathcal{N}\{\delta \hat{\mathbf{x}}, \mathbf{P}\}δx∼N{δx^,P},并且Qi=[Vi0000Θi0000Ai0000Ω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​=⎣⎢⎢⎡​Vi​000​0Θi​00​00Ai​0​000Ωi​​⎦⎥⎥⎤​至此就完成了误差状态的一个初步推导,具体的误差状态扩展卡尔曼滤波如何应用到MSCKF中下篇博文中再进行总结,包括如何进行状态积分、如果进行状态变量的扩增、如何构建观测方程进行融合,有问题欢迎交流哈~

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

学习MSCKF笔记——真实状态、标称状态、误差状态相关推荐

  1. 学习MSCKF笔记——后端、状态预测、状态扩增、状态更新

    学习MSCKF笔记--后端.状态预测.状态扩增.状态更新 学习MSCKF笔记--后端.状态预测.状态扩增.状态更新 1. 状态预测 2. 状态扩增 3. 状态更新 学习MSCKF笔记--后端.状态预测 ...

  2. 学习MSCKF笔记——四元数基础

    学习MSCKF笔记--四元数基础 学习MSCKF笔记--四元数基础 1. 四元数基本性质 1.1 加法 1.2 乘法 1.3 共轭 1.4 模 1.5 逆 1.6 单位四元数 1.7 指数 1.8 对 ...

  3. 学习MSCKF笔记——前端、图像金字塔光流、Two Point Ransac

    学习MSCKF笔记--前端.图像金字塔光流.Two Point Ransac 学习MSCKF笔记--前端.图像金字塔光流.Two Point Ransac 1. 图像金字塔光流 2. Two Poin ...

  4. 从零开始学习电子之电阻的标称和封装

    电阻 电阻的标称和封装 *电阻可以分为贴片电阻和插件电阻(插件电阻的价格相对来说高一些) *电阻的阻值有实际值和标定值(这涉及到了误差) *误差分为1%和5%精度:1%精度的电阻在精密电压.电流采样时 ...

  5. 文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—前言

    基于误差状态卡尔曼滤波(ESKF)的四元数运动学 文章作者:Joan Sol`a 发表时间:October 12, 2017(注:Quaternion kinematics for the error ...

  6. Windows Workflow HOL学习笔记(十二):创建状态基工作流

    W indows Workflow HOL学习笔记(十二):创建状态基工作流 本文内容来自Microsoft Hands-on Labs for Windows Workflow Foundation ...

  7. Nginx学习笔记3:Shell脚本检测Nginx服务状态

    前言 nginx 服务启动后,我们需要对其服务状态进行监控,今天学习过程中了解到一段非常有用的小脚本,不仅可以监控Nginx,也可以用来监控其他服务 脚本 A=`ps -C nginx –no-hea ...

  8. 数据挖掘学习笔记:标称属性(名词性)的邻近性度量

    邻近性度量:相似性和相异性度量 标称属性:可以拥有2个或者更多个属性值 例:标称属性color:red,yellow,black,blue,green.(有5个属性值可选) 问:对象由标称属性刻画,那 ...

  9. 机器学习学习笔记 --- 标称型数据和数值型数据

    [标称型数据和数值型数据] 监督学习一般使用两种类型的目标变量:标称型和数值型 标称型:一般在有限的数据中取,而且只存在'是'和'否'两种不同的结果(一般用于分类) 数值型:可以在无限的数据中取,而且 ...

最新文章

  1. php输入对话框,如何使用JavaScript实现输入对话框
  2. P4630-[APIO2018]Duathlon铁人两项【圆方树】
  3. 数据库设计(一对一、一对多、多对多)
  4. sql server 创建唯一性非聚集索引语句_数据库专题—索引原理
  5. Hibernate学习笔记之EHCache的配置
  6. 苹果公布了一些最新无人车进展,但,研发依然缓慢
  7. MyEclipse中更改JRE环境
  8. ARTS打卡第14周
  9. flutter怎么手动刷新_Flutter 怎样更新?怎样升级? - Flutter - Angular 教程网
  10. 奥比中光深度摄像头_奥比中光:确认iPhone X前置3D深度摄像头采用结构光方案...
  11. java反射之Method的invoke方法实现
  12. PCD文件格式的转换
  13. PC安装Linux系统傻瓜式教程
  14. Excel如何将单元格公式显示出来
  15. 2022-2028年全球与中国智能咖啡机行业市场前瞻与投资战略规划分析
  16. 母婴广告投放在哪里合适?如何在抖音投放广告抢占市场?
  17. java inputstream read_Java学习之输入输出流
  18. # 编译 qemu,libvirt, qemu rpm 包和 libvirt rpm 包
  19. java 不同包 调用_java中不同包之间的调用
  20. 【每日一题】蜗牛爬井问题

热门文章

  1. java线程锁机制_多线程之锁机制
  2. Spring中毒太深,离开Spring我居然连最基本的接口都不会写了
  3. MySQL中,21个写SQL的好习惯
  4. synchronized 原理知多少
  5. org.activiti.engine.ActivitiException: Couldn‘t deserialize object in variable ‘application‘
  6. Android踩坑日记:使用Fesco图片加载库在GridView上的卡顿优化
  7. 一天搞定CSS: 浮动(float)的副作用--12
  8. 一天搞定HTML----标签类型与类型转换05
  9. linux 关闭权限验证,Linux 账户安全与控制
  10. Oracle 解决4031错误