TN07 – 卡尔曼滤波在姿态解算和位置估计中的应用
1. 卡尔曼滤波
参考:ttp://zh.wikipedia.org/wiki/卡尔曼滤波
对象模型
xkAkxk1Bkukwk (1)
ykCkxkvk (2)
yk为观测量,wk和vk分别为过程噪声和输出噪声,其中xk为状态量,假定其为均值为0,
协方差矩阵为Qk和Rk的正态分布噪声。
wkN0,Qk
vkN0,Rk
滤波算法
预测
ˆkAkxˆk1Bkukx (状态预估)(3)
TPkAkPk1AkQk (状态协方差预估)(4)
误差
ˆkekykCkx (测量误差)(5)
TSkCkPkCkRk (测量误差协方差)(6)
T1LkPkCkSk (最优卡尔曼增益)(7)
更新
ˆkxˆkLkekx (状态更新)(8)
PkILkCkPk (状态协方差更新)(9)
其中协方差准确的反映了估计的协方差
ˆkPkcovxkx
Skcovek
2. 扩展卡尔曼滤波
扩展卡尔曼滤波应用卡尔曼滤波的算法于非线性对象,对象模型为
xkfxk1,uk,wk (10)
ykhxk,vk (11)
其中变量的意义与卡尔曼滤波对象模型相同。在卡尔曼滤波算法中,分别用非线性函数估计对象的状态和观测量,用非线性函数的Joccob矩阵进行状态和协方差的更新运算,如下
预测
xˆkfxˆk1,uk,0 PATkkPk1AkQk 其中
Afkxxˆk1,uk,0误差
ekykhxˆk,0 SCTkkPkCkRk LPCT1kkkSk 其中
(状态预估)(12)
(状态协方差预估)(13)
(状态转换矩阵)(14)
(测量误差)(15)
(16)
(17)
(测量误差协方差)(最优卡尔曼增益)
Ckhˆk,0xx
(输出矩阵)(18)
更新
ˆkxˆkLkekx (状态更新)(19)
PkILkCkPk (状态协方差更新)(20)
3. 姿态解算
姿态更新模型
1qMq2
(21)
其中
0xMyzx0yz0zyzyxx0
(22)
qq0,q1,q2,q3T,为姿态的四元素表示。
实际应用中,角速度为可测量,另外加速度和指南针为可观测量。建立离散形式为
qkAkqk1wk (23)
akTqkag (24)
mkTqmg (25)
其中
1111dtdtdtxyz222111dt1zdtydtx22Ak211dt1dt1xdtyz222111zdtydtxdt1222
(26)
如果采用精细微分法,则有
qkqk1e1Mdt21122133qk1IMdtMdtMdt2848
(27)
ag和
mg为地面坐标系下的加速度和磁场矢量,Tq为地面坐标系到机体坐标系的转换
矩阵
222q0q12q2q3Tq2(q1q2q0q3)2(q1q3q0q2)2(q1q2q0q3)222q0q12q2q32(q2q3q0q1)2(q1q3q0q2)2(q2q3q0q1)222q0q12q2q3 (28)
计算偏导
2q0T2q3q02q22q32q02q12q22q12q0
2q1T2q2q12q32q22q12q02q32q02q1
2q2T2q1q22q02q12q22q32q02q32q2
2q3T2q0q32q12q02q32q22q12q22q3
求取输出Jaccob矩阵
akakakakak,,,qq0q1q2q3TTTTag,ag,ag,agq1q2q3q0(29)
mkTTTTmg,mg,mg,mgqq0q1q2q3(30)
4. 位置估计
对象模型
xk1dtv01kak00dt22xk1wdtvk1k1ak1 (31)
xkvykvkkak
(32)
其中wk和vk分别为过程噪声和观测噪声