文章目录
一、fast-lio原理解析
相关解析:知乎
相关解析:csdn
相关连接,强烈推荐:知乎
1. 误差状态方程
在ESKF中,我们通常把原状态变量称为名义状态变量(nominal state),然后把ESKF里的状态变量称为误差状态变量(error state)。我们设ESKF的真值状态为:
x t = [ p t v t R t b a t b g t g t ] \bm{x}_t = \begin{bmatrix} \bm{p}_t \\ \bm{v}_t \\ \bm{R}_t \\ \bm{b}_{at} \\ \bm{b}_{gt} \\ \bm{g}_t \end{bmatrix} xt=
ptvtRtbatbgtgt
这个状态随时间改变,可以记 x ( t ) t \ \bm{x}(t)_t x(t)t。在连续时间上,我们记IMU读数为 ω ~ , a ~ \ \tilde{\boldsymbol{\omega}}, \tilde{\bm{a}} ω~,a~,那么可以写出状态变量导数相对于观测量之间的关系式:
p ˙ t = v t v ˙ t = R t ( a ~ − b a t − η a ) + g R ˙ t = R t ( ω ~ − b g t − η g ) ∧ b ˙ g t = η b g b ˙ a t = η b a g ˙ = 0 \begin{align*} \dot{\bm{p}}_t &= \bm{v}_t \\ \dot{\bm{v}}_t &= \bm{R}_t (\tilde{\bm{a}} - \bm{b}_{at} - \boldsymbol{\eta}_a) + \bm{g} \\ \dot{\bm{R}}_t &= \bm{R}_t (\tilde{\boldsymbol{\omega}} - \bm{b}_{gt} - \boldsymbol{\eta}_g)^{\wedge} \\ \dot{\bm{b}}_{gt} & = \boldsymbol{\eta}_{bg} \\ \dot{\bm{b}}_{at} & = \boldsymbol{\eta}_{ba} \\ \dot{\bm{g}} &= \bm{0} \end{align*} p˙tv˙tR˙tb˙gtb˙atg˙=vt=Rt(a~−bat−ηa)+g=Rt(ω~−bgt−ηg)∧=ηbg=ηba=0
其中带下标 t \ t t的表示真值。下面我们来推导误差状态方程。首先定义误差状态变量为:
p t = p + δ p v t = v + δ v R t = R δ R 或 q t = q δ q b g t = b g + δ b g b a t = b a + δ b a g t = g + δ g \begin{align*} \bm{p}_t &= \bm{p} + \delta \bm{p} \\ \bm{v}_t &= \bm{v} + \delta \bm{v} \\ \bm{R}_t &= \bm{R} \delta \bm{R} \quad \text{或} \ \bm{q}_t = \bm{q} \delta \bm{q} \\ \bm{b}_{gt} &= \bm{b}_g + \delta \bm{b}_g \\ \bm{b}_{at} &= \bm{b}_a + \delta \bm{b}_a \\ \bm{g}_t &= \bm{g} + \delta \bm{g} \end{align*} ptvtRtbgtbatgt=p+δp=v+δv=RδR或 qt=qδq=bg+δbg=ba+δba=g+δg
不带下标的就是名义状态变量。名义状态变量的运动学方程式与真值相同,只是不必考虑噪声(因为噪声在误差状态方程中考虑了)。其中旋转部分的 δ R \ \delta \bm{R} δR 可以用它的李代数 E x p ( δ θ ) \ \mathrm{Exp}(\delta \boldsymbol{\theta}) Exp(δθ) 来表示,此时旋转公式也需要改成用指数形式来表达。
(1)、平移、零偏和重力公式误差推导
关于误差变量的平移、零偏和重力公式,都很容易得出对应的时间导数表达式,只需在等式两侧分别对时间求导即可:
δ p ˙ = δ v δ b g ˙ = η g δ b a ˙ = η a δ g ˙ = 0 \begin{align*} \delta \dot{\bm{p}} &= \delta \bm{v} \\ \delta \dot{\bm{b}_g} &= \boldsymbol{\eta}_g \\ \delta \dot{\bm{b}_a} &= \boldsymbol{\eta}_a \\ \delta \dot{\bm{g}} &= \bm{0} \end{align*} δp˙δbg˙δba˙δg˙=δv=ηg=ηa=0
(2)、旋转误差推导
而速度、旋转两式由于和 δ R \ \delta \bm{R} δR 有关系,所以要单独推导。对旋转式两侧求时间导数,可得:
第一个式子: R ˙ t = R ˙ E x p ( δ θ ) + R E x p ( δ θ ) ˙ 第二个式子: R ˙ t = R t ( ω ~ − b g t − η g ) ∧ \begin{aligned} 第一个式子:\dot{\bm{R}}_t &= \dot{\bm{R}} \mathrm{Exp} (\delta \boldsymbol{\theta}) + \bm{R} \dot{\mathrm{Exp}(\delta \boldsymbol{\theta})} \\ 第二个式子:\dot{\bm{R}}_t &= \bm{R}_t (\tilde{\boldsymbol{\omega}} - \bm{b}_{gt} - \boldsymbol{\eta}_g)^{\wedge} \end{aligned} 第一个式子:R˙t第二个式子:R˙t=R˙Exp(δθ)+RExp(δθ)˙=Rt(ω~−bgt−ηg)∧
该式右边的 E x p ( δ θ ) ˙ \ \dot{\mathrm{Exp}(\delta \boldsymbol{\theta})} Exp(δθ)˙满足:
E x p ( δ θ ) ˙ = E x p ( δ θ ) δ θ ˙ ∧ . \dot{\mathrm{Exp}(\delta \boldsymbol{\theta})} = \mathrm{Exp}(\delta \boldsymbol{\theta}) \delta \dot{\boldsymbol{\theta}}^{\wedge}. Exp(δθ)˙=Exp(δθ)δθ˙∧.
因此第一个式子可写成(公式3):
R ˙ E x p ( δ θ ) + R E x p ( δ θ ) ˙ = R ( ω ~ − b g ) ∧ E x p ( δ θ ) + R E x p ( δ θ ) δ θ ˙ ∧ \begin{aligned} \dot{\bm{R}} \mathrm{Exp} (\delta \boldsymbol{\theta}) + \bm{R} \dot{\mathrm{Exp}(\delta \boldsymbol{\theta})} &= \bm{R} (\tilde{\boldsymbol{\omega}}-\bm{b}_g)^{\wedge} \mathrm{Exp}(\delta \boldsymbol{\theta}) + \bm{R} \mathrm{Exp}(\delta \boldsymbol{\theta} ) \delta \dot{\boldsymbol{\theta}}^{\wedge} \\ \end{aligned} R˙Exp(δθ)+RExp(δθ)˙=R(ω~−bg)∧Exp(δθ)+RExp(δθ)δθ˙∧
而第二个式子可以写成(公式4):
R t ( ω ~ − b g t − η g ) ∧ = R E x p ( δ θ ) ( ω ~ − b g t − η g ) ∧ \begin{aligned} \bm{R}_t \left( \tilde{\boldsymbol{\omega}} - \bm{b}_{gt} - \boldsymbol{\eta}_g \right)^{\wedge} &= \bm{R} \mathrm{Exp} (\delta \boldsymbol{\theta}) \left( \tilde{\boldsymbol{\omega}} - \bm{b}_{gt} - \boldsymbol{\eta}_g \right)^{\wedge} \end{aligned} Rt(ω~−bgt−ηg)∧=RExp(δθ)(ω~−bgt−ηg)∧
将公式3 和4结合则(公式5):
R ( ω ~ − b g ) ∧ E x p ( δ θ ) + R E x p ( δ θ ) δ θ ˙ ∧ = R E x p ( δ θ ) ( ω ~ − b g t − η g ) ∧ \bm{R} (\tilde{\boldsymbol{\omega}}-\bm{b}_g)^{\wedge} \mathrm{Exp}(\delta \boldsymbol{\theta}) + \bm{R} \mathrm{Exp}(\delta \boldsymbol{\theta} ) \delta \dot{\boldsymbol{\theta}}^{\wedge} = \bm{R} \mathrm{Exp} (\delta \boldsymbol{\theta}) \left( \tilde{\boldsymbol{\omega}} - \bm{b}_{gt} - \boldsymbol{\eta}_g \right)^{\wedge} R(ω~−bg)∧Exp(δθ)+RExp(δθ)δθ˙∧=RExp(δθ)(ω~−bgt−ηg)∧
公式(5),将 δ θ ˙ \delta \dot{\boldsymbol{\theta}} δθ˙ 移到一侧,约掉两侧左边的 R \bm{R} R,整理类似项,不难得到:
E x p ( δ θ ) δ θ ˙ ∧ = E x p ( δ θ ) ( ω ~ − b g t − η g ) ∧ − ( ω ~ − b g ) ∧ E x p ( δ θ ) \mathrm{Exp}(\delta \boldsymbol{\theta}) \delta \dot{\boldsymbol{\theta}}^{\wedge} = \mathrm{Exp}(\delta \boldsymbol{\theta}) \left( \tilde{\boldsymbol{\omega}} - \bm{b}_{gt} - \boldsymbol{\eta}_g \right)^{\wedge} - (\tilde{\boldsymbol{\omega}} - \bm{b}_g)^{\wedge} \mathrm{Exp}(\delta \boldsymbol{\theta}) Exp(δθ)δθ˙∧=Exp(δθ)(ω~−bgt−ηg)∧−(ω~−bg)∧Exp(δθ)
注意到 E x p ( δ θ ) \mathrm{Exp}(\delta \boldsymbol{\theta}) Exp(δθ) 本身是一个 S O ( 3 ) \mathrm{SO}(3) SO(3) 矩阵,我们利用 S O ( 3 ) \mathrm{SO}(3) SO(3) 上的伴随性质:
ϕ ∧ R = R ( R T ϕ ) ∧ , \boldsymbol{\phi}^{\wedge} \bm{R} = \bm{R} (\bm{R}^{\mathrm{T}} \boldsymbol{\phi})^{\wedge}, ϕ∧R=R(RTϕ)∧,
用来交换上面的 E x p ( δ θ ) \mathrm{Exp}(\delta \boldsymbol{\theta}) Exp(δθ):
E x p ( δ θ ) δ θ ˙ ∧ = E x p ( δ θ ) [ ( ω ~ − b g t − η g ) ∧ − ( E x p ( − δ θ ) ( ω ~ − b g ) ) ∧ ] \mathrm{Exp}(\delta \boldsymbol{\theta}) \delta \dot{\boldsymbol{\theta}}^{\wedge} = \mathrm{Exp}(\delta \boldsymbol{\theta}) \left[ \left( \tilde{\boldsymbol{\omega}} - \bm{b}_{gt} - \boldsymbol{\eta}_g \right)^{\wedge} - \left( \mathrm{Exp}(-\delta \boldsymbol{\theta}) (\tilde{\boldsymbol{\omega}} - \bm{b}_g) \right)^{\wedge} \right] Exp(δθ)δθ˙∧=Exp(δθ)[(ω~−bgt−ηg)∧−(Exp(−δθ)(ω~−bg))∧]
= E x p ( δ θ ) [ ( ω ~ − b g t − η g ) ∧ − ( ( I − δ θ ∧ ) ( ω ~ − b g ) ) ∧ ] = \mathrm{Exp}(\delta \boldsymbol{\theta}) \left[ \left( \tilde{\boldsymbol{\omega}} - \bm{b}_{gt} - \boldsymbol{\eta}_g \right)^{\wedge} - \left( (\bm{I} - \delta \boldsymbol{\theta}^{\wedge})(\tilde{\boldsymbol{\omega}} - \bm{b}_g) \right)^{\wedge} \right] =Exp(δθ)[(ω~−bgt−ηg)∧−((I−δθ∧)(ω~−bg))∧]
= E x p ( δ θ ) [ b g − b g t − η g + δ θ ∧ ω ~ − δ θ ∧ b g ] ∧ = \mathrm{Exp}(\delta \boldsymbol{\theta}) \left[ \bm{b}_g - \bm{b}_{gt} - \boldsymbol{\eta}_g + \delta \boldsymbol{\theta}^{\wedge} \tilde{\boldsymbol{\omega}} - \delta \boldsymbol{\theta}^{\wedge} \bm{b}_g \right]^{\wedge} =Exp(δθ)[bg−bgt−ηg+δθ∧ω~−δθ∧bg]∧
= E x p ( δ θ ) [ ( − ω ~ + b g ) ∧ δ θ − δ b g − η g ] ∧ = \mathrm{Exp}(\delta \boldsymbol{\theta}) \left[ (-\tilde{\boldsymbol{\omega}} + \bm{b}_g)^{\wedge} \delta \boldsymbol{\theta} - \delta \bm{b}_g - \boldsymbol{\eta}_g \right]^{\wedge} =Exp(δθ)[(−ω~+bg)∧δθ−δbg−ηg]∧
约掉等式左侧的系数,可得:
δ θ ˙ ≈ − ( ω ~ − b g ) ∧ δ θ − δ b g − η g \delta \dot{\boldsymbol{\theta}} \approx - (\tilde{\boldsymbol{\omega}} - \bm{b}_g)^{\wedge} \delta \boldsymbol{\theta} - \delta \bm{b}_g - \boldsymbol{\eta}_g δθ˙≈−(ω~−bg)∧δθ−δbg−ηg
(3)、旋转速度项推导
接下来考虑速度方程的误差形式。同样地,对两侧求时间导数,就可以得到 δ v ˙ \delta\dot{v} δv˙ 的表达式。等式左侧为:
v ˙ t = R t ( a ~ − b a t − η a ) + g t = R E x p ( δ θ ) ( a ~ − b a − δ b a − η a ) + g + δ g ≈ R ( I + δ θ ∧ ) ( a ~ − b a − δ b a − η a ) + g + δ g ≈ R a ~ − R b a − R δ b a − R η a + R δ θ ∧ a ~ − R δ θ ∧ b a + g + δ g = R a ~ − R b a − R δ b a − R η a − R a ~ ∧ δ θ + R b a ∧ δ θ + g + δ g \begin{align*} \dot{v}_{t} &= R_{t}(\tilde{a} - b_{at} - \eta_{a}) + g_{t} \\ &= R\mathrm{Exp}(\delta\theta)(\tilde{a} - b_{a} - \delta b_{a} - \eta_{a}) + g + \delta g \\ &\approx R(I + \delta\theta^{\wedge})(\tilde{a} - b_{a} - \delta b_{a} - \eta_{a}) + g + \delta g \\ &\approx R\tilde{a} - R b_{a} - R\delta b_{a} - R\eta_{a} + R\delta\theta^{\wedge}\tilde{a} - R\delta\theta^{\wedge}b_{a} + g + \delta g \\ &= R\tilde{a} - R b_{a} - R\delta b_{a} - R\eta_{a} - R\tilde{a}^{\wedge}\delta\theta + R b_{a}^{\wedge}\delta\theta + g + \delta g \end{align*} v˙t=Rt(a~−bat−ηa)+gt=RExp(δθ)(a~−ba−δba−ηa)+g+δg≈R(I+δθ∧)(a~−ba−δba−ηa)+g+δg≈Ra~−Rba−Rδba−Rηa+Rδθ∧a~−Rδθ∧ba+g+δg=Ra~−Rba−Rδba−Rηa−Ra~∧δθ+Rba∧δθ+g+δg
从第三行推向第四行时,需要忽略 δ θ ∧ \delta\theta^{\wedge} δθ∧ 与 δ b a , η a \delta b_{a}, \eta_{a} δba,ηa 相乘的二阶小量。从第四行推第五行则用到了又乘符号交换顺序之后需加负号的性质。另一方面,等式右侧为:
v ˙ + δ v ˙ = R ( a ~ − b a ) + g + δ v ˙ \dot{v} + \delta\dot{v} = R(\tilde{a} - b_{a}) + g + \delta\dot{v} v˙+δv˙=R(a~−ba)+g+δv˙
因为上面两式相等,可以得到:
δ v ˙ = − R ( a ~ − b a ) ∧ δ θ − R δ b a − R η a + δ g \delta\dot{v} = -R(\tilde{a} - b_{a})^{\wedge}\delta\theta - R\delta b_{a} - R\eta_{a} + \delta g δv˙=−R(a~−ba)∧δθ−Rδba−Rηa+δg
这样我们就得到了 δ v \delta v δv 的运动学模型。需要补充一句,由于上式中 η a \eta_{a} ηa 是一个零均值白噪声,它乘上任意旋转矩阵之后仍然是一个零均值白噪声,而且由于 R T R = I R^{T}R=I RTR=I,其协方差矩阵也不变(留作习题)。所以,也可以把上式简化为:
δ v ˙ = − R ( a ~ − b a ) ∧ δ θ − R δ b a − η a + δ g \delta\dot{v} = -R(\tilde{a} - b_{a})^{\wedge}\delta\theta - R\delta b_{a} - \eta_{a} + \delta g δv˙=−R(a~−ba)∧δθ−Rδba−ηa+δg
把误差变量的运动学方程整理如下:
δ p ˙ = δ v δ v ˙ = − R ( a ~ − b a ) ∧ δ θ − R δ b a − η a + δ g δ θ ˙ = − ( ω ~ − b g ) ∧ δ θ − δ b g − η g δ b g ˙ = η b g δ b a ˙ = η b a δ g ˙ = 0 \begin{align*} \delta\dot{p} &= \delta v \\ \delta\dot{v} &= -R(\tilde{a} - b_a)^{\wedge}\delta\theta - R\delta b_a - \eta_a + \delta g \\ \delta\dot{\theta} &= -(\tilde{\omega} - b_g)^{\wedge}\delta\theta - \delta b_g - \eta_g \\ \delta\dot{b_g} &= \eta_{b g} \\ \delta\dot{b_a} &= \eta_{b a} \\ \delta\dot{g} &= 0 \end{align*} δp˙δv˙δθ˙δbg˙δba˙δg˙=δv=−R(a~−ba)∧δθ−Rδba−ηa+δg=−(ω~−bg)∧δθ−δbg−ηg=ηbg=ηba=0
2. 离散时间的误差状态方程(预测过程)
从连续时间状态方程推出离散时间的状态方程并不困难,不妨直接来列写它们。名义状态变量的离散时间运动学方程可以写为:
p ( t + Δ t ) = p ( t ) + v Δ t + 1 2 ( R ( a ~ − b a ) ) Δ t 2 + 1 2 g Δ t 2 v ( t + Δ t ) = v ( t ) + R ( a ~ − b a ) Δ t + g Δ t R ( t + Δ t ) = R ( t ) Exp ( ( ω ~ − b g ) Δ t ) b g ( t + Δ t ) = b g ( t ) b a ( t + Δ t ) = b a ( t ) g ( t + Δ t ) = g ( t ) \begin{align*} p(t+\Delta t) &= p(t) + v\Delta t + \frac{1}{2}\left(R(\tilde{a} - b_{a})\right)\Delta t^2 + \frac{1}{2} g\Delta t^2 \\ v(t+\Delta t) &= v(t) + R(\tilde{a} - b_{a})\Delta t + g\Delta t \\ R(t+\Delta t) &= R(t)\operatorname{Exp}\left((\tilde{\omega} - b_{g})\Delta t\right) \\ b_{g}(t+\Delta t) &= b_{g}(t) \\ b_{a}(t+\Delta t) &= b_{a}(t) \\ g(t+\Delta t) &= g(t) \end{align*} p(t+Δt)v(t+Δt)R(t+Δt)bg(t+Δt)ba(t+Δt)g(t+Δt)=p(t)+vΔt+21(R(a~−ba))Δt2+21gΔt2=v(t)+R(a~−ba)Δt+gΔt=R(t)Exp((ω~−bg)Δt)=bg(t)=ba(t)=g(t)
该式只需在上面的基础上添加零偏项与重力项即可。而误差状态的离散形式则只需要处理连续形式中的旋转部分。参考角速度的积分公式,可以将误差状态方程写为:
δ p ( t + Δ t ) = δ p + δ v Δ t δ v ( t + Δ t ) = δ v + ( − R ( a ~ − b a ) ∧ δ θ − R δ b a + δ g ) Δ t + η v δ θ ( t + Δ t ) = Exp ( − ( ω ~ − b g ) Δ t ) δ θ − δ b g Δ t − η θ δ b g ( t + Δ t ) = δ b g + η g δ b a ( t + Δ t ) = δ b a + η a δ g ( t + Δ t ) = δ g \begin{align*} \delta p(t+\Delta t) &= \delta p + \delta v\Delta t \\ \delta v(t+\Delta t) &= \delta v + \left(-R(\tilde{a} - b_{a})^{\wedge}\delta\theta - R\delta b_{a} + \delta g\right)\Delta t + \eta_{v} \\ \delta\theta(t+\Delta t) &= \operatorname{Exp}\left(-(\tilde{\omega} - b_{g})\Delta t\right)\delta\theta - \delta b_{g}\Delta t - \eta_{\theta} \\ \delta b_{g}(t+\Delta t) &= \delta b_{g} + \eta_{g} \\ \delta b_{a}(t+\Delta t) &= \delta b_{a} + \eta_{a} \\ \delta g(t+\Delta t) &= \delta g \end{align*} δp(t+Δt)δv(t+Δt)δθ(t+Δt)δbg(t+Δt)δba(t+Δt)δg(t+Δt)=δp+δvΔt=δv+(−R(a~−ba)∧δθ−Rδba+δg)Δt+ηv=Exp(−(ω~−bg)Δt)δθ−δbgΔt−ηθ=δbg+ηg=δba+ηa=δg
注意:
- 右侧部分我们省略了括号里的 (t) 以简化公式;
- 关于旋转部分的积分,我们可以将连续形式看成关于 δ θ \delta\theta δθ 的微分方程然后求解。求解过程类似于对角速度进行积分;
- 噪声项并不参与递推,需要把它们单独归入噪声部分中。连续时间的噪声项可以视为随机过程的能量谱密度,而离散时间下的噪声变量就是我们日常看到的随机变量了。这些噪声随机变量的标准差可以列写如下:
σ ( η v ) = Δ t σ a , σ ( η θ ) = Δ t σ g , σ ( η g ) = Δ t σ b g , σ ( η a ) = Δ t σ b a \sigma(\eta_v) = \Delta t\sigma_a, \quad \sigma(\eta_\theta) = \Delta t\sigma_g, \quad \sigma(\eta_g) = \sqrt{\Delta t}\sigma_{b g}, \quad \sigma(\eta_a) = \sqrt{\Delta t}\sigma_{b a} σ(ηv)=Δtσa,σ(ηθ)=Δtσg,σ(ηg)=Δtσbg,σ(ηa)=Δtσba
其中前两式的 Δ t \Delta t Δt 是由积分关系导致的。整体地记为:
δ x = f ( δ x ) + w , w ∼ N ( 0 , Q ) \delta x = f(\delta x) + w, \quad w \sim \mathcal{N}(0, Q) δx=f(δx)+w,w∼N(0,Q)
其中 w w w 为噪声。按照前面的定义, Q Q Q 应该为:
Q = diag ( 0 3 , Cov ( η v ) , Cov ( η θ ) , Cov ( η g ) , Cov ( η a ) , 0 3 ) Q = \text{diag}(0_{3}, \text{Cov}(\eta_{v}), \text{Cov}(\eta_{\theta}), \text{Cov}(\eta_{g}), \text{Cov}(\eta_{a}), 0_{3}) Q=diag(03,Cov(ηv),Cov(ηθ),Cov(ηg),Cov(ηa),03)
两侧的零是由于第一个和最后一个方程本身没有噪声导致的。
δ x = F δ x + w \delta x = F \delta x + w δx=Fδx+w
其中 F F F 为线性化后的雅可比矩阵。由于我们列写的运动方程已经是线性化的了,只需把它们的线性系统拿出来即可:
F = [ I I Δ t 0 0 0 0 0 I − R ( a ~ − b a ) ∧ Δ t − R Δ t 0 I Δ t 0 0 Exp ( − ( ω ~ − b g ) Δ t ) 0 − I Δ t 0 0 0 0 I 0 0 0 0 0 0 I 0 0 0 0 0 0 I ] F = \begin{bmatrix} I & I \Delta t & 0 & 0 & 0 & 0 \\ 0 & I & -R(\tilde{a} - b_{a})^{\wedge} \Delta t & -R \Delta t & 0 & I \Delta t \\ 0 & 0 & \text{Exp}\left(-(\tilde{\omega} - b_{g}) \Delta t\right) & 0 & -I \Delta t & 0 \\ 0 & 0 & 0 & I & 0 & 0 \\ 0 & 0 & 0 & 0 & I & 0 \\ 0 & 0 & 0 & 0 & 0 & I \end{bmatrix} F= I00000IΔtI00000−R(a~−ba)∧ΔtExp(−(ω~−bg)Δt)0000−RΔt0I0000−IΔt0I00IΔt000I
在此基础上,我们执行ESKF的预测过程。预测过程包括对名义状态的预测(IMU积分)以及对误差状态的预测:
δ x pred = F δ x P pred = F P F T + Q \begin{align*} \delta x_{\text{pred}} &= F \delta x \\ P_{\text{pred}} &= F P F^{T} + Q \end{align*} δxpredPpred=Fδx=FPFT+Q
不过由于ESKF的误差状态在每次更新以后会被重置,因此运动方程的均值部分没有太大意义,而方差部分则可以指导整个误差估计的分布情况。
3. 更新过程
前面介绍的是ESKF的预测过程,来考虑更新过程。假设一个抽象的传感器能够对状态变量产生观测,其观测方程为抽象的 ( h ),那么可以写为:
z = h ( x ) + v , v ∼ N ( 0 , V ) z = h(x) + v, \quad v \sim \mathcal{N}(0, V) z=h(x)+v,v∼N(0,V)
其中 z \ z z 为观测数据, v \ v v为观测噪声, V \ V V 为该噪声的协方差矩阵。由于状态变量里已经有 R \R R了,这里我们换个符号。
在传统EKF中,我们可以直观对观测方程线性化,求出观测方程相对于状态变量的雅可比矩阵,进而更新卡尔曼滤波器。而在ESKF中,我们当前拥有名义状态 x \ x x 的估计以及误差状态 δ x \ \delta x δx 的估计,且希望更新的是误差状态,因此要计算观测方程相比于误差状态的雅可比矩阵:
H = ∂ h ∂ δ x , H = \frac{\partial h}{\partial \delta x}, H=∂δx∂h,
然后再计算卡尔曼增益,进而计算误差状态的更新过程:
K = P pred H T ( H P pred H T + V ) − 1 δ x = K ( z − h ( x t ) ) P = ( I − K H ) P pred \begin{align*} K &= P_{\text{pred}} H^T (H P_{\text{pred}} H^T + V)^{-1} \\ \delta x &= K(z - h(x_{\text{t}})) \\ P &= (I - K H) P_{\text{pred}} \end{align*} KδxP=PpredHT(HPpredHT+V)−1=K(z−h(xt))=(I−KH)Ppred
其中 K \ K K 为卡尔曼增益, P pred \ P_{\text{pred}} Ppred 为预测的协方差矩阵,最后的 P \ P P 为修正后的协方差矩阵。这里的 H \ H H的计算可以通过链式法则来生成:
H = ∂ h ∂ x ∂ x ∂ δ x H = \frac{\partial h}{\partial x} \frac{\partial x}{\partial \delta x} H=∂x∂h∂δx∂x
其中第一项只需对观测方程进行线性化,第二项,根据我们之前对状态变量的定义,可以得到:
∂ x ∂ δ x = diag ( I 3 , I 3 , ∂ Log ( R ( Exp ( δ θ ) ) ) ∂ δ θ , I 3 , I 3 , I 3 ) \frac{\partial x}{\partial \delta x} = \text{diag}(I_{3}, I_{3}, \frac{\partial \text{Log}(R(\text{Exp}(\delta\theta)))}{\partial \delta\theta}, I_{3}, I_{3}, I_{3}) ∂δx∂x=diag(I3,I3,∂δθ∂Log(R(Exp(δθ))),I3,I3,I3)
其他几种都是平只有旋转部分,因为 δ θ \ \delta\theta δθ定义为 R \ R R的右乘,我们用右乘的BCH即可:
∂ Log ( R ( Exp ( δ θ ) ) ) ∂ δ θ = J r − 1 ( R ) \frac{\partial \text{Log}(R(\text{Exp}(\delta\theta)))}{\partial \delta\theta} = J_{r}^{-1}(R) ∂δθ∂Log(R(Exp(δθ)))=Jr−1(R)
最后,我们可以给每个变量加下标 k \ k k,表示在 k \ k k 时刻进行状态估计。
ESKF的误差状态后续处理
在经过预测和更新过程之后,我们修正了误差状态的估计。接下来,只需把误差状态归入名义状态,然后重置ESKF即可。归入部分可以简单地写为:
p k + 1 = p k + δ p k v k + 1 = v k + δ v k R k + 1 = R k Exp ( δ θ k ) b g , k + 1 = b g , k + δ b g , k b a , k + 1 = b a , k + δ b a , k g k + 1 = g k + δ g k \begin{align*} p_{k+1} &= p_k + \delta p_k \\ v_{k+1} &= v_k + \delta v_k \\ R_{k+1} &= R_k \text{Exp}(\delta \theta_k) \\ b_{g,k+1} &= b_{g,k} + \delta b_{g,k} \\ b_{a,k+1} &= b_{a,k} + \delta b_{a,k} \\ g_{k+1} &= g_k + \delta g_k \end{align*} pk+1vk+1Rk+1bg,k+1ba,k+1gk+1=pk+δpk=vk+δvk=RkExp(δθk)=bg,k+δbg,k=ba,k+δba,k=gk+δgk
有些文献里也会定义为广义的状态变量加法:
x k + 1 = x k ⊕ δ x k x_{k+1} = x_k \oplus \delta x_k xk+1=xk⊕δxk
这种写法可以简化整体的表达式。不过,如果公式里出现太多的广义加减法,可能让人不好马上辨认它们的具体含义,所以本书还是倾向于将各状态分别写开,或者直接用加法而非广义加法符号。
ESKF的重置分为均值部分和协方差部分。均值部分可以简单地实现为:
δ x = 0 \delta x = 0 δx=0
由于均值被重置了,之前我们描述的是关于 x k \ x_k xk 切空间中的协方差,而现在描述的是 x k + 1 \ x_{k+1} xk+1 中的协方差。这次重置会带来一些微小的差异,主要影响旋转部分。事实上,在重置前,卡尔曼滤波器刻画了 x pred \ x_{\text{pred}} xpred 切空间处的一个高斯分布 N ( δ x , P ) \ \mathcal{N}(\delta x, P) N(δx,P),而重置之后,应该刻画 x pred ⊞ δ x \ x_{\text{pred}} \boxplus \delta x xpred⊞δx 处的一个 N ( 0 , P reset ) \ \mathcal{N}(0, P_{\text{reset}}) N(0,Preset)。
我们设重置前的名义旋转估计为 R k \ R_k Rk,误差状态为 δ θ \ \delta \theta δθ,卡尔曼滤波器的增量计算结果为 δ θ k \ \delta \theta_k δθk,注意此处 δ θ k \ \delta \theta_k δθk 是已知的,而 δ θ \ \delta \theta δθ 是一个随机变量。重置之后的名义旋转部分为
R k Exp ( δ θ k ) = R + R_k \text{Exp}(\delta \theta_k) = R^+ RkExp(δθk)=R+
误差状态为 δ θ + \ \delta \theta^+ δθ+。由于误差状态被重置了,显然此时 δ θ + = 0 \ \delta \theta^+ = 0 δθ+=0。但我们关心的并不是它们直接的取值,而是 δ θ + \ \delta \theta^+ δθ+ 与 δ θ \ \delta \theta δθ 的线性化关系。把实际的重置过程写出来:
R + Exp ( δ θ + ) = R k Exp ( δ θ k ) Exp ( δ θ + ) = R k Exp ( δ θ ) R^+ \text{Exp}(\delta \theta^+) = R_k \text{Exp}(\delta \theta_k) \text{Exp}(\delta \theta^+) = R_k \text{Exp}(\delta \theta) R+Exp(δθ+)=RkExp(δθk)Exp(δθ+)=RkExp(δθ)
不难得到:
Exp ( δ θ + ) = Exp ( − δ θ k ) Exp ( δ θ ) \text{Exp}(\delta \theta^+) = \text{Exp}(-\delta \theta_k) \text{Exp}(\delta \theta) Exp(δθ+)=Exp(−δθk)Exp(δθ)
注意这里 δ θ \ \delta \theta δθ 为小量,利用线性化后的BCH公式,可以得到:
δ θ + = − δ θ k + δ θ − 1 2 δ θ k ∧ δ θ + o ( ( δ θ ) 2 ) \delta \theta^+ = -\delta \theta_k + \delta \theta - \frac{1}{2} \delta \theta_k^{\wedge} \delta \theta + o((\delta \theta)^2) δθ+=−δθk+δθ−21δθk∧δθ+o((δθ)2)
于是有:
∂ δ θ + ∂ δ θ ≈ I − 1 2 δ θ k ∧ \frac{\partial \delta \theta^+}{\partial \delta \theta} \approx I - \frac{1}{2} \delta \theta_k^{\wedge} ∂δθ∂δθ+≈I−21δθk∧
该式表明重置前后的误差状态相差一个旋转方面的小雅可比矩阵,我们记作 J θ = I − 1 2 δ θ k ∧ \ J_{\theta} = I - \frac{1}{2} \delta \theta_k^{\wedge} Jθ=I−21δθk∧。把这个小雅可比阵放到整个状态变量维度下,并保持其他部分为单位矩阵,可以得到一个完整的雅可比阵:
J k = diag ( I 3 , I 3 , J θ , I 3 , I 3 , I 3 ) , J_k = \text{diag}(I_3, I_3, J_{\theta}, I_3, I_3, I_3), Jk=diag(I3,I3,Jθ,I3,I3,I3),
因此,在把误差状态的均值归零同时,它们的协方差矩阵也应该进行线性变换:
P reset = J k P J k T . P_{\text{reset}} = J_k P J_k^T. Preset=JkPJkT.
不过,由于 δ θ k \delta\theta_k δθk 并不大,这里的 J k J_k Jk 仍然十分接近于单位矩阵,所以大部分材料里并不处理这一项,而是直接把前面估计的 P P P 阵作为下一时刻的起点。但本书仍然要介绍这一点,并且会在后面第9章中继续讨论这个问题。该问题实际意义是做了切空间投影,即把一个切空间中的高斯分布投影到另一个切空间中。在ESKF中,两者没有明显差异,但后文的迭代卡尔曼滤波器还牵扯到多次切空间的变换,我们必须在此加以介绍。
更新中…!