3D姿态估计-间接卡尔曼滤波

Indirect Kalman Filter for 3D Attitude Estimation

翻译一篇2005的论文。

1 四元数代数中的元素

1.1 四元数定义

四元数通常定义为

q⃗ =q4+q1i+q2j+q3k

其中 i,j,k是纯虚数,满足以下条件
i2=1,j2=1,k2=1ij=ji=k,jk=kj=i,ki=ik=j

数字 q4 是一个实数或者说四元数的标量部分, q1i+q2j+q3k 是虚部或者说是四元数的矢量部分,寺院数量可以被写为4维的列矩阵,
q⃗ =[qq4]=[q1q2q3q4]T

如果数 q q4 满足

q=kxsin(θ/2)kysin(θ/2)kzsin(θ/2)=k⃗ sin(θ/2),q4=cos(θ/2)

那么元素 q1,...,q4 叫做“旋转四元数”或者“欧拉对称参数”,在这个等式中, k⃗  是轴向的单位四元数, θ 是旋转角度,旋转四元数是一个单位四元数,满足
|q⃗ |=q⃗ Tq⃗ =|q|2+q24=1

因此我们用术语四元数来表示旋转四元数。

1.2 四元数乘法

四元数乘法定义为

q̄ p̄ =(q4+q1i+q2j+q3k)(p4+p1i+p2j+p3k)=q4p4q1p1q2p2q3p3+(q4p1+q1p4q2p3+q3p2)i+(q4p2+q2p4q3p1+q1p3)j+(q4p3+q3p4q1p2+q2p1)k=q4p1+q3p2q2p3+q1p4q3p1+q4p2+q1p3+q2p4q2p1q1p2+q4p3+q3p4q1p1q2p2q2p3+q4p4
四元数乘法可以另写成矩阵形式,为此,我们先介绍矩阵叉乘符号,使用反对称运算
q×=0q3q2q30q1q2q10
叉乘可以被写成
q×p=iq1p1jq2p2kq3p3=q2p3q3p2q3p1q1p3q1p2q2p1=0q3q2q30q1q2q10p1p2p3=q×p
四元数的乘法可以被重写成
q̄ p̄ =L(q̄ )p̄ =q4q3q2q1q3q4q1q2q2q1q4q3q1q2q3q4p1p2p3p4=[q4I3×3q×qTqq4][pp4]=[q4p+p4qq×pp4q4qTp]=[p4q+q4p+p×qp4q4pTq]=[p4I3×3+p×pTpp4][qq4]=p4p3p2p1p3p4p1p2p2p1p4p3p1p2p3p4q1q2q3q4=R(p̄ )q̄ 

L R 的属性如下:
L(q̄ 1)=LT(q̄ )R(p̄ 1)=RT(p̄ )L=[Ψ(q̄ )q̄ ]R=[Ξ(p̄ )p̄ ]

其中Ψ和Ξ定义为
Ψ=[q4I3×3q×qT]Ξ=[p4I3×3p×pT]

如果两个旋转, CA and CB 是相关的,例如 CACX=CXCB (手眼标定),那么相关的矩阵 L(q̄ A)R(q̄ B) 是反对称矩阵,秩为2,特别, q̄ A4=q̄ B4 , ||qA||=||qB||
四元数有一个关于乘法中性的元素,定义为
q̄ 0=[0001]Tq̄ q̄ 0=q̄ 0q̄ =q̄ 

旋转的逆描述为逆或者负数共扼四元数,表示为
q̄ 1=[qq4]=[ksin(θ/2)cos(θ/2)]=[ksin(θ/2)cos(θ/2)]

q̄ q̄ 1=q̄ 1q̄ =q̄ 0(q̄ p̄ )1=p̄ 1q̄ 1

1.3 有用的性质

1.3.1 叉乘反对称矩阵 ω× 的属性

反交換律

ω×=ω×T

a×b=b×aaTb×=bTa×

加法分配律
a×+b×=a+b×

标量乘法
cω×=cω×

平行矢量叉乘
ω×(cω)=cω×ω=c(ωTω×)T=03×1

拉格朗日公式
a×b×=baT(aTb)I3×3a×(b×c)=b(aTc)c(aTb)

a×b×+abT=b×a×+baT(a×b)×=baTabT

雅可比恒等式
a×b×c+b×c×a+c×a×b=0

旋转
Ca×=Ca×CTC(a×b)=(Ca)×(Cb)

四元数表示的向量叉乘,如果我们定义四元数

ā=[a0],b̄ =[b0],c̄ =[c0]=[a×b0]

我们可以得到:
c̄ =12(b̄ ā+āb̄ 1)=12((L(b)+RT(b))ā=12([2b×000][a0])

ω× 的次方

ω×2=ωωT|ω|2I3×3ω×3=|ω|2ω×ω×4=|ω|2ω×2ω×5=|ω|4ω×

以此类推。

1.3.2 Ω矩阵的性质

矩阵Ω在一个向量和四元数相乘时出现,他用于例如四元数微分,具有如下属性:

Ω(ω)=0ωzωyωxωz0ωxωyωyωx0ωzωxωyωz0=[ω×ωTω0]

Ω(ω)2=[ω×2ωωTωTω×ω×ωωTω]=[|ω|2I3×301×303×1|ω|2]=|ω|2I4×4

Ω(ω)3=|ω|2Ω(ω)

Ω(ω)4=|ω|4I4×4

Ω(ω)5=|ω|4Ω(ω)

Ω(ω)6=|ω|6I4×4

以此类推。

1.3.3 Ξ矩阵的性质

Ξ(q̄)矩阵在一个向量与四元数相乘时出现。Ξ(q̄) 和 Ω(a)的关系,与乘法矩阵 L(q̄ ) R(p̄ ) 的关系相同。

Ξ(q̄ )=q4q3q2q1q3q4q1q2q2q1q4q3=[q4I3×3+q×qT]

ΞT(q̄ )=q4q3q2q3q4q1q2q1q4q1q2q3

可以看出
ΞT(q̄ )Ξ(q̄ )=I3×3Ξ(q̄ )ΞT(q̄ )=I4×4q̄ q̄ TΞT(q̄ )q̄ =03×1

Ξ 和 Ω的关系
Ω(a)q̄ =Ξ(q̄ )a

1.4 四元数和旋转矩阵之间的关系

给定一个向量P,我们定义对应的四元数为

p̄ =[p0]
我们将利用在不同坐标系中表示的向量之间的两个关系
Lp=LGC(q̄ )Gp

q̄ =LḠ q LGC(q̄ ) 是3×3的旋转矩阵,是(全局)坐标系{G}相对于(局部)坐标系{L}。
也可以将一个向量从一个坐标系转移到另一个坐标系通过将四元数分别左乘和右乘旋转四元数和它的逆。
Lp=LGq̄ Gp̄ LGq1̄ =[(2q241)I3×32q4q×+2qqT0][GP0]

由此我们得到四元数和他对应的旋转矩阵之间的关系。
LGC(q̄ )=(2q41)I3×32q4q×+2qqT

也可以写成
LGC(q̄ )=ΞT(q̄ )Ψ(q̄ )

我们可以通过三个四元数相乘得到相似的形式,尽管这没有什么物理意义
q̄ p̄ q̄ 1=L(q̄ )RT(q̄ )p̄ =[C(q̄ )001][pp4]=[C(q̄ )pp4]

如果只有一个很小的旋转 δq̄  ,我们可以用小的角度近似值来简化上面的表达式。我们可以描述一个小角度四元数
δq̄ =[δqδq4]=[ksin(δθ/2)cos(δθ/2)][δθ/21]

我们得到对应的旋转矩阵表达式
LGC(δq̄ )I3×3δθ×

旋转矩阵也可以用轴角表示

LGC=cos(θ)I3×3sin(θ)k×+(1cos(θ))kkT=(2cos2(θ/2)1)I3×32cos(θ/2)sin(θ/2)k×+2sin2(θ/2)kkT

我们用四元数表示旋转矩阵
LGC(q̄ )=q21q22q23+q242(q1q2q3q4)2(q1q3+q2q4)2(q1q2+q3q4)q21+q22q23+q242(q2q3q1q4)2(q1q3q2q4)2(q2q3+q1q4)q21q22+q23+q24=2q21+2q2412(q1q2q3q4)2(q1q3+q2q4)2(q1q2+q3q4)2q22+2q2412(q2q3q1q4)2(q1q3q2q4)2(q2q3+q1q4)2q23+2q241=12q222q2312(q1q2q3q4)2(q1q3+q2q4)2(q1q2+q3q4)12q212q232(q2q3q1q4)2(q1q3q2q4)2(q2q3+q1q4)12q212q22

旋转矩阵还有另一种表现形式
LGC(q̄ )=I3×32q4q×+2q×2

注意,由于四元组乘法的约定,两个旋转矩阵的乘积将对应于相同顺序的两个四元的乘积,因此
L1L2C(L1L2q̄ )L2GC(L2Gq̄ )=L1GC(L1L2q̄ L2Gq̄ )

最终,我们可以解释 L2L1q̄ =[ksin(θ/2)cos(θ/2)] 表示L2坐标系到L1坐标系的旋转,旋转轴K在L1中表示,这也可以表示为指数形式
L1L2C(q̄ )=exp(k×θ)

1.5 四元数时间微分

当本地坐标系L相对全局坐标系G移动,我们可以计算改变率或者对应的四元数微分来描述他们的关系,我们通过计算差分式的极限

L(t)Gq̄ (t)=limt01t(L(t+t)Gq̄ L(t)Gq̄ )

四元数 L(t+t)Gq̄  可以表示为两个寺院书叉乘
L(t+t)Gq̄ =L(t+t)tq̄ L(t)Gq̄ 

其中
L(t+t)L(t)q̄ =[ksin(θ/2)cos(θ/2)]

注意,四元数 L(t+t)L(t)q̄  表示L(t)坐标系到L(t+∆t)坐标系的旋转,旋转角度为θ,旋转轴K是L(t+∆t)坐标系下的表示。这里写图片描述

在极限条件下,∆t → 0,旋转角度将会非常小,我们可以近似sin和cos函数用他们一阶泰勒展开式。

L(t+t)L(t)q̄ =[ksin(θ/2)cos(θ/2)]=[kθ/21]=12δθ1

向量δθ与旋转轴同向,大小为旋转角度,将这个矢量除以∆t,极限时,得到旋转速度
ω=limt0δθt

现在我们准备推出四元数的导数

L(t)Gq̄ (t)=limt01t(L(t+t)Gq̄ L(t)Gq̄ )limt01t(12δθ1[01])L(t)Gq̄ =12[ω1])L(t)Gq̄ =12[ω×ωTω0]L(t)Gq̄ =12Ω(ω)L(t)Gq̄ =12Ξ(L(t)Gq̄ )ω

其中
Ω(ω)=0ωzωyωxωz0ωxωyωyωx0ωzωxωyωz0

Ξ(L(t)Gq̄ )=q4q3q2q1q3q4q1q2q2q1q4q3

注意 ω=L(t)ω ,换句话说旋转速度是本地的而不是惯性坐标系。

1.6 四元数积分

对四元数进行积分就相当于解一阶微分方程

LGq̄ (t)=12Ω(ω)LGq̄ (t)

我们把时间从上标中去掉了,而表示时间变化四元数通过写q=q(t)来提高符号的清晰度。值得一提上标L表示时间t时的本地坐标系。
这个微分方程的通解
LGq̄ (t)=Θ(t,tk)LGq̄ (tk)

微分和重新排序项得到了了 Θ(t,tk) 的控制方程
Θ̇ (t,tk)=LGq̄ (t)LGq̄ 1(tk)=12Ω(ω(t))LGq̄ (t)LGq̄ 1(tk)=12Ω(ω(t))Θ(t,tk)

其中初始条件
Θ(tk,tk)=I4×4

在确定的假设下我们可以获得这个等式的闭解形式,最简单的假设是ω在时间周期 t=tk+1tk 内是常数,使微分方程线性时不变,这个假设导致了零阶四元数积分。另一个更精确的近似是ω在∆t内是线性的,我们将把这个结果式的公式作为一阶四元数的积分。

1.6.1 零阶四元数积分

如果ω(t) = ω在积分周期 t=tk+1tk 内是常数,矩阵Ω不依赖于时间, Θ(tk+1,tk) 可以写成

Θ(tk+1,tk)=Θ(t)=exp(12Ω(ω)t)

我们可以用泰勒级数展开成写矩阵的指数形式
Θ(t)=I4×4+12Ω(ω)t+12!(12Ω(ω)t)2+13!(12Ω(ω)t)3+...

利用Ω矩阵的性质得到
Θ(t)=I4×4+12Ω(ω)t12!(12t)2|ω|2I4×413!(12t)3|ω|2Ω(ω)+14!(12t)4|ω|4I4×4+15!(12t)5|ω|4Ω(ω)...

重新排列和展开|ω|得到
Θ(t)=(112!(12t)2|ω|2+14!(12t)4|ω|4...)I4×4+1|ω|(12|ω|t13!(12|ω|t)3+15!(12|ω|t)5)...)Ω(ω)

经过仔细检查,我们发现了泰勒级数展开式的sin和cos函数
Θ(t)=cos(|ω|2t)I4×4+1|ω|sin(|ω|2t)Ω(ω)

最终我们可以写零阶四元数积分
LGq̄ (tk+1)=Θ(tk+1,tk)LGq̄ (tk)=(cos(|ω|2t)I4×4+1|ω|sin(|ω|2t)Ω(ω))LGq̄ (tk)

仔细观察就会发现 Θ(tk+1,tk) 不过是一个与特定四元数相关的乘法矩阵,
这样我们就可以把零阶四元数的积分改写成四元数的乘积
LGq̄ (tk+1)=ω|ω|sin(|ω|2t)cos(|ω|2t)LGq̄ (tk)

这个四元数的乘积对应于将原始坐标系沿旋转轴ω旋转|ω|∆t角度,它对应于ω是常数的假设。
上面的表达式对于极小的ω可会造成数字不稳定,因为|ω|出现在分母当中,我们将计算上式的极限|ω|趋近于0,利用L’Hôpital定理计算乘
lim|ω|0Θ(t)=lim|ω|0(cos(|ω|2t)I4×4+1|ω|sin(|ω|2t)Ω(ω))=I4×4+lim|ω|0(1|ω|sin(|ω|2t)Ω(ω))=I4×4+t2Ω(ω)

1.6.2 一阶四元数积分

一阶四元数积分假设ω在积分区间∆t内是线性变化的,在这种情况下我们必须改变上面的 Θ(tk+1,tk) ,为了这个目的,我们将引入平均旋转率ω̄,定义为

ω̄ =ω(tk+1)+ω(tk)2

我们也定义了旋转率的微分ω’和相关的Ω( ω’)矩阵,在现行条件下是常数。
Ω(ω)=Ω(ω(tk+1)ω(tk)t)

注意高阶的Ω( ω) 微分是零。
为了计算 tk+1 时的四元数,我们写下她在时间 tk 时的泰勒展开
LGq̄ (tk+1)=LGq̄ (tk)+LGq̄ (tk)t+12LGq̄ ′′(tk)t2+...

重复的利用四元数时间微分的定义得到

LGq̄ (tk+1)=(I4×4+12Ω(ω(tk))t+12!(Ω(ω(tk))t))2+13!(Ω(ω(tk))t))3+...)LGq̄ (tk)+14t2Ω(ω(tk))LGq̄ (tk)+(112Ω(ω(tk))Ω(ω(tk))+(124Ω(ω(tk))Ω(ω(tk)))t3LGq̄ (tk)+...

如果我们将Ω( ω̄)均值写成
Ω(ω̄ )=1ttk+1tkΩ(ω(τ))dτ=Ω(ω(tk))+12Ω(ω(tk))t

我们可以重新排列项
LGq̄ (tk+1)=(I4×4+12Ω(ω̄ )t+12!(Ω(ω̄ )t))2+13!(Ω(ω̄ )t))3+...+148(Ω(ω(tk))Ω(ω(tk))Ω(ω(tk))Ω(ω(tk)))t3)LGq̄ (tk)

我们发现第一项是指数的泰勒级数展开,带入Ω( ω’),我们或的最终公式

LGq̄ (tk+1)=(exp(12Ω(ω̄ )t)+148(Ω(ω(tk+1))Ω(ω(tk))Ω(ω(tk))Ω(ω(tk+1)))t2)LGq̄ (tk)

2 姿态传播

卡尔曼滤波器估计当前姿态包含两步。在第一步,传播,滤波器预测当前的姿态基于上一次估计和一些本体感受的测量,这个估计在后面的更新步中被修正,当的到一个新的绝对方位测量。
预测系统状态的一种方法是将系统中给定的控制命令输入到系统模型中,从而预测系统的行为。另一种估计位置和方向的方法是使用惯性测量单元(IMU)的数据作为动态模型替换。IMU提供了对系统上的平移加速度和旋转速度的测量。本文将探讨后一种方法。在讨论状态方程和误差传播之前,我们将描述陀螺仪的模型,它将提供旋转速度的测量值。

2.1 陀螺仪噪声模型

作为IMU的一部分,一个三轴陀螺仪提供了旋转速度的测量。众所周知,陀螺会受到不同的误差项影响,例如速率噪声误差和偏差。我们使用一个简单的模型将测量的旋转速率ω_m ωm 和实际的角速度ω ω 联系起来
ω_m = ω + b + n_r

ωm=ω+b+nr

在这个等式中, b b 表示陀螺仪偏置, n_r nr 表示噪声系数,假设是高斯白噪声,具有如下特性
E [n_r ] = 0_{3×1}\\ E [n_r (t + τ )n_r^T (t) = N_r δ(τ )
E[nr]=03×1E[nr(t+τ)nTr(t)=Nrδ(τ)

陀螺偏差是非静态的,并模拟为随机游走过程
b=nw

具有如下属性
E[nw]=03×1E[nr(t+τ)nTr(t)]=Nrδ(τ)

因此,偏差是随机的,需要和四元数一起估计。
为了简化我们假设噪声在三个方向是相等的
Nr=σ2rcI3×3Nr=σ2wcI3×3

下标c表示,这些是连续时间系统的噪声协方差,将它们与后面离散系统中的噪声协方差进行了区分。
为了确定协方差的单位,我们考虑了标量的例子,它直接扩展到向量的情况。为了兼容性, nr 与ω有相同的单位,因此
[E[nr(t+τ)nr(t)]]=[σ2rcδ(τ)]=rad2sec2
但是 δ(τ) 的单位定义为
[δ(τ)]=1sec
因此
[σ2rc]=rad2sec2sec=radsec211sec=radsec21Hz

并且
[σrc]=(radsec)1Hz=radsec

分析得到
[σ2wc]=(radsec/sec)2sec=rad2sec3=(radsec)2Hz

并且
[σwc]=(radsec)Hz=radsec3

在离散情况下, nrd nwd 必须有与旋转速率相同的单位,也就是rad/sec。为了保持噪声强度的等效性,我们必须在离散化的情况下加入采样频率,得到
σrd=σrctσwd=σwct

其中∆t是采样频率的倒数,离散方差将用于模拟真实世界的数据。关于连续和离散噪声变化之间的转换的进一步解释是由Simon提供的。为了与书中推导进行类比,偏差噪声, nw ,对应于过程噪声,而速率噪声, nr ,对应于测量噪声。

2.2 状态方程

在之前的分析的结果中,我们定义了一个七个元素的状态向量,由四元数和陀螺偏差组成的

x(t)=[q̄ (t)b(t)]

由四元数微分的定义和误差模型,我们找到以下微分方程组控制的状态
LGq̄ (t)=12Ω(ωmbnr)LGq̄ (t)b=nw
以上述的期望为目标,在ekf框架内为状态提供预测方程(cf 3,422)。
LGqc(t)=12Ω(ωc)LGqc(t)bc=03×3

其中
ωc=ωmb
由于在积分区间上的偏差是恒定的,我们可以使用零阶或第一阶积分来积分四元数,用 ωc 代替 ω

2.3 误差和协方差表示

通常,误差向量及其协方差是由状态向量和它的估计之间的算术差来表示的。然而,在手边的问题中,由于系统中存在约束,这种表示是有问题的。由于四元数被强制成单位长度使得对应的协方差矩阵是奇异的,很难维持它的数值性,为了稳定的原因,我们将用一个不同的六维的误差向量表示方法。
不使用四元数与四元数估计之间的算数差来定义误差,我们引入一个四元数误差 δqc ;一个很小的旋转在估计和真正的本地参考坐标系之间,我们定义一个乘积来表示误差代替差分

LGq̄ =LLcδq̄ LGqcLLcδq̄ =LGq̄ LGq1c

由于与误差四元数相关的旋转可以被认为是非常小的,我们可以用一个小的角度近似,并且定义姿态误差角向量 δθ 如下
δq̄ =[δqδq4]=[ksin(δθ/2)cos(δθ/2)]12δθ1

误差角向量δθ 是 3×1 维度的,将和偏置误差一起在误差状态向量中使用,偏置误差定义为
b=bbc
我们可以定义误差向量
x=[δθb]

在下一节我们将研究误差向量的连续时间状态方程。

2.4 连续时间状态方程

为了推导出误差向量的连续时间线性状态方程,我们将从误差四元的定义开始

q̄ =δq̄ qcqc=δq̄ q̄ +δq̄ qc

q 定义和 qc 定义代替可以得到
12[ω0]q̄ =δq̄ q̄ +δq̄ 12[ωc0]qc)δq̄ qc=12([ω0]q̄ δq̄ [ωc0]qc)δq̄ =12([ω0]δq̄ δq̄ [ωc0])

联系陀螺仪模型 ω ωc 的定义,得到
ω=ωcbnr

在上面的替换中

δq̄ =12([ωc0]δq̄ δq̄ [ωc0])12[b+nr0]δq̄ =12([ωc×ωTcωc0](δq̄ )[ωc×ωTcωc0]δq̄ ))12[b+nr0]δq̄ =12[2ωc×01×303×10](δq̄ )12[b+nr0]δq̄ =12[2ωc×01×303×10](δq̄ )12[b+nr0]O(|b||δq|,|nr||δq|)

忽略二阶项,我们可以写成
δq̄ =[δqδq4]=12δθ1=ωc×δq12(b+nr)0

最终
δθ=ωc×δθbnr

偏置误差的控制方程很容易计算出来
b=bbc=nw

联系这些结果我们可以重写误差状态方程
=[δθb]=[ωc×03×3I3×303×3][δθb]+[I3×303×303×303×3][nrnw]

或者
x=Fcx+Gcn

其中
Fc=[ωc×03×3I3×303×3]Gc=[I3×303×303×303×3]

是系统矩阵和噪声矩阵
x=[δθb],n=[nrnw]

分别表示误差状态和噪声向量。
就像我们在2.1节中讨论的,假设 nr nw 是白噪声且独立的,连续系统噪声协方差矩阵就是
Qc=E[n(t+τ)nT(t)]=[Nr03×303×3Nw]=[σ2rcI3×303×303×3σ2wc]

2.5 离散时间误差状态方程

为了实现离散时间卡尔曼滤波方程,我们需要对上述误差传播模型进行离散化处理。特别是,我们需要找到状态转换矩阵Φ和系统噪声协方差 Qd

2.5.1 状态转换矩阵

猜你喜欢

转载自blog.csdn.net/huajun998/article/details/76599378