imu姿态估计(MEMS器件的四元数EKF滤波)

MEMS器件的四元数EKF滤波

1,关于Kalman滤波

本文应用的是MEMS器件的IMU,姿态的表示为四元数形式(不是网上的单轴卡尔曼滤波!不过原理都是一样的)
首先是卡尔曼的五条公式

预测部分
X_{k|k-1}=F_kX_{k-1|k-1}+B_ku_k
P_{k|k-1}=F_kP_{k-1|k-1}F_k^T+Q_k
卡尔曼增益
K_k=P_{k|k-1}H_k^T(H_kP_{k|k-1}H_k^T+R_k)^{-1}
更新部分
X_{k|k}=X_{k|k-1}+K_k(Z_k-H_kX_{k|k-1})
P_{k|k}=(I-K_kH_k)P_{k|k-1}
其中
Z=HX+V
式中变量的含义:
X--状态向量
P--状态向量的协方差矩阵,表示状态的不确定度(或精度)
X_{k|k}-- Xk时刻的最优估计(后验)
X_{k|k-1}--k-1时刻估计的状态量(先验)
P_{k|k}--后验协方差矩阵
P_{k|k-1}--预测协方差矩阵
B_k--控制矩阵
u_k--控制向量
Q_k--预测过程的噪声
K_k-- k时刻的卡尔曼增益
H_k-- k时刻状态转移矩阵
Z_k-- k时刻观测向量
R_k--观测噪声

2,关于EKF

卡尔曼滤波是由线性系统推导来的,为了应用于非线性系统,我们可以把非线性系统在平衡点附近线性化,这样就有了EKF(扩展卡尔曼滤波)

在预测部分
X_{k|k-1}=f(X_{k-1|k-1},u_k)
由于f是非线性的函数,我们把它在一点展开求它的Jacobians矩阵
F_k=\frac{\partial f}{\partial x}\bigg{|}_{X_{k-1|k-1},u_k}
有时转移矩阵也需要线性化
\begin{align} Z=h(X)+V \end{align}
H_k=\frac{\partial h}{\partial x}\bigg{|}_{X_{k|k-1}}
这样可以写成:
Z=HX+V

3,实例化

现在我们要以MEMS的6DOF的imu器件为例看看怎么把EKF应用到以四元数为基础的姿态解算上,首先考虑下我们的器件特性,现认为陀螺仪在静差校正后的输出数学模型为:
\begin{bmatrix} g_x\\ g_y \\ g_z\\ \end{bmatrix} = \begin{bmatrix} \omega_x+\delta_x \\ \omega_y+\delta_y \\\omega_z+ \delta_z \end{bmatrix}
即认为陀螺仪的输出值符合正态分布(当然真实模型会复杂的多,不止包含白噪声)
g = N(\omega,\delta)
先把上面这个式子放一下,现在我们选取四元数作为机体的姿态状态量

Q=\begin{bmatrix} q0 \\ q1 \\ q2 \\q3\end{bmatrix}
然后我们要知道四元数的微分方程,以便更新四元数
\dot{Q} = \begin{bmatrix} \dot{q0} \\ \dot{q1} \\ \dot{q2} \\ \dot{q3} \end{bmatrix} = \frac{1}{2} \begin{bmatrix} 0&-\omega_x&-\omega_y&-\omega_z\\ -\omega_x&0&-\omega_z&-\omega_y\\ \omega_y&-\omega_z&0&\omega_x\\ -\omega_z&\omega_y&-\omega_z&0 \end{bmatrix} \begin{bmatrix} q0\\q1\\q2\\q3 \end{bmatrix} \tag{1-1}
我们可以用一阶龙格-库卡法来做数值积分,当然可以用更高阶的如二阶,四阶龙格-库卡法,这里用最简单的一阶(也就是矩形积分的形式)
Q(T+t)=Q(t)+T\dot{Q}(t)
现在我们得到了状态转移矩阵
F_K = \frac{T}{2} \begin{bmatrix} 2&-\omega_x&-\omega_y&-\omega_z\\ -\omega_x&2&-\omega_z&-\omega_y\\ \omega_y&-\omega_z&2&\omega_x\\ -\omega_z&\omega_y&-\omega_x&2 \end{bmatrix} \tag{1-2}
但注意到(1-2)中\omega的真值是不知道的,而我们把陀螺仪的数据带进去是有误差的,下面我们需要定义协方差矩阵P来描述状态向量的误差。
P= E \left[ (X-E[X])(X-E[X])^T \right]
P_{i,j}=cov(x_i,x_j) \tag{2-1}
很明显协方差矩阵P是一个4x4的方阵,Q的四个元素一定不是相互独立的,在也是为什么用协方差矩阵来表示状态向量的分布情况。我们先把(2)式初始化为零,回到(1-2)讨论一下预测过程的噪声Q_k该如何表示
由前面的讨论可以知道:
\begin{bmatrix}q0_{k|k-1} \\ q1_{k|k-1} \\q2_{k|k-1} \\q3_{k|k-1}\end{bmatrix}=\frac{T}{2}\begin{bmatrix} 2&-\omega_{x|k}&-\omega_{y|k}&-\omega_{z|k}\\ -\omega_{x|k}&2&-\omega_{z|k}&-\omega_{y|k}\\ \omega_{y|k}&-\omega_{z|k}&2&\omega_{x|k}\\ -\omega_{z|k}&\omega_{y|k}&-\omega_{x|k} &2 \end{bmatrix} \begin{bmatrix} q0_{k-1|k-1} \\ q1_{k-1|k-1} \\q2_{k-1|k-1} \\q3_{k-1|k-1} \end{bmatrix}
现在我们把这个矩阵乘出来,以第一行为例:
q0_{k|k-1}=\frac{T}{2}(2q0_{k-1|k-1}-q1_{k-1|k-1}\omega_{x|k}-q2_{k-1|k-1}\omega_{y|k}-q3_{k-1|k-1}\omega_{z|k}) \tag{2-2}
现在我们考虑现实情况把陀螺仪的输出值g代替\omega
前面说明了g=N(\omega,\delta),于是上式即为正太分布概率密度函数的四则运算问题,我们认为gyro_x,gyro_y,gyro_z是互相独立的,这一点是非常重要的。
假设X_{1},X_{2}是符合正态分布的概率密度函数X_{1}=N(\mu_1,\sigma_1^2) ,X_{2}=N(\mu_2,\sigma_2^2) t是一个常数。那么:
tX_{1}=N(t\mu_1,t^2\sigma_1^2)
X_{1}X_{2}相互独立时:
X_{1}+X_{2}=N(\mu_1+\mu_2,\sigma_1^2+\sigma_2^2)
回到式(2-2)我们可以把它变成:
\begin{cases} q0_{k|k-1} = N(\frac{T}{2}(2q0_{k-1|k-1}-q1_{k-1|k-1}g_{x|k}-q2_{k-1|k-1}g_{y|k}-q3_{k-1|k-1}g_{z|k}),\sigma_0^2) \\ \sigma_0^2 = (\frac{T}{2})^2(q1_{k-1|k-1}^2\sigma_x^2 + q2_{k-1|k-1}^2\sigma_y^2 + q3_{k-1|k-1}^2\sigma_z^2 ) \end{cases}
式中gyro_x=N(g_x,\sigma_x^2)\\gyro_y=N(g_y,\sigma_y^2)\\gyro_z=N(g_z,\sigma_z^2)
综上我们可以写出预测过程的噪声
Q_k=\begin{bmatrix} Q_1&0&0&0 \\0&Q_2&0&0 \\0&0&Q_3&0 \\0&0&0&Q_4 \end{bmatrix} \tag{2-3}
其中
\begin{cases}Q_1=\sigma_0^2 = (\frac{T}{2})^2(q1_{k-1|k-1}^2\sigma_x^2 + q2_{k-1|k-1}^2\sigma_y^2 + q3_{k-1|k-1}^2\sigma_z^2 ) \\Q_2=\sigma_1^2 = (\frac{T}{2})^2(q0_{k-1|k-1}^2\sigma_x^2 + q2_{k-1|k-1}^2\sigma_z^2 + q3_{k-1|k-1}^2\sigma_y^2 ) \\Q_3=\sigma_2^2 = (\frac{T}{2})^2(q0_{k-1|k-1}^2\sigma_y^2 + q1_{k-1|k-1}^2\sigma_z^2 + q3_{k-1|k-1}^2\sigma_x^2 ) \\Q_4=\sigma_3^2 = (\frac{T}{2})^2(q0_{k-1|k-1}^2\sigma_z^2 + q1_{k-1|k-1}^2\sigma_y^2 + q2_{k-1|k-1}^2\sigma_x^2 ) \end{cases}
ok现在我们的预测过程结束了!下面我们要用传感器的观测来修正预测,在此之前我们先来讨论下转换矩阵H_k
我们的观测量往往与我们选择的状态量不是同一个单位甚至不是同一个维度,因此需要引入转换矩阵
Z=HX+V
Z是我们的观测向量
Z=\begin{bmatrix} a_x^b \\ a_y^b \\a_z^b\end{bmatrix}
表示机体坐标系下重力加速度的分量
V是观测噪声,我们同样认为是白噪声(事实上忽略了机体运动的加速度)
根据惯性导航的知识(参考秦永元《惯性导航》)
Z=\begin{bmatrix} a_x^b \\ a_y^b \\a_z^b\end{bmatrix} = \begin{bmatrix} 2g(q1q3 - q0q2)\\2g(q0q1 + q2q3)\\g(q0^2 + q3^2 - q1^2 - q2^2) \end{bmatrix}+V=h(X)+V
我们在X = 0点处将h(X)线性化
H_k = \frac{\partial h}{\partial x}\bigg{|}_{X_{k|k-1}=0}=2\begin{bmatrix} -q2_{k|k-1}&q3_{k|k-1} & -q0_{k|k-1} & q1_{k|k-1}\\q1_{k|k-1}&q0_{k|k-1}&q3_{k|k-1}&q2_{k|k-1}\\q0_{k|k-1}& -q1_{k|k-1}& -q2_{k|k-1}&q3_{k|k-1}\\ \end{bmatrix}\tag{3-1}
现在我们看下整个状态转换的过程:

\begin{bmatrix} a_x^b \\ a_y^b \\a_z^b \end{bmatrix}= 2 \begin{bmatrix} -q2_{k|k-1}&q3_{k|k-1} & -q0_{k|k-1} & q1_{k|k-1}\\q1_{k|k-1}&q0_{k|k-1}&q3_{k|k-1}&q2_{k|k-1}\\q0_{k|k-1}& -q1_{k|k-1}& -q2_{k|k-1}&q3_{k|k-1}\\ \end{bmatrix} \begin{bmatrix} q0_{k|k-1}\\q1_{k|k-1} \\q2_{k|k-1}\\q3_{k|k-1} \end{bmatrix}
Q_k相同我们可以写出观测噪声矩阵也就是加速度计噪声R_k
R_k=\begin{bmatrix}\sigma_{ax}^2 & 0 & 0\\ 0 & \sigma_{ay}^2 & 0\\0 & 0 & \sigma_{az}^2\end{bmatrix}
好了,到此所有卡尔曼需要的变量都推出来了,接下来只要按照卡尔曼的后三条公式依次计算卡尔曼增益,然后更新状态向量,再更新协方差矩阵就完成了一次迭代。

4,一些tips

1.由于机体振动的影响,加速度计的R_k可取变量,在加速度变化剧烈时R_k取大些
2.对于资源有限的MCU来说,矩阵运算非常耗时,可以把矩阵乘开,含零的项就可以不写到代码中了(不过这样牺牲了可读性)

5,结语

后续的笔记再慢慢补充吧!
如有错误欢迎指出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 经过看各种博客和文章,让我最清楚明白的,是xiahouzuoxin 的博客,之后又看了一些国外的文献进行自己的理解...
    marine0131阅读 7,384评论 4 12
  • 姓名:周小蓬 16019110037 转载自:http://blog.csdn.net/MangZuo/artic...
    aeytifiw阅读 3,156评论 1 13
  • 一前言 特征值 奇异值 二奇异值计算 三PCA 1)数据的向量表示及降维问题 2)向量的表示及基变换 3)基向量 ...
    Arya鑫阅读 10,494评论 2 43
  • 卡尔曼滤波系列1_基础 1 基础知识 [1] 卡尔曼增益最后会变成定值吗?[2] 如何通俗并尽可能详细解释卡尔曼滤...
    叶秋花夏阅读 1,499评论 0 3
  • 周日是可以自由活动的日子,年初的适合就跟大熊小熊约定好了,天气舒适的日子一定选择接近大自然,只有当热的受不了或者下...
    沫沫666阅读 375评论 0 0