卡尔曼滤波算法matlab 基于matlab的四元数卡尔曼滤波组合导航算法

摘要:随着无人机技术的不断发展,为了更加全面的实现无人机在不同环境中的姿态解算问题,组合导航算法越来越受到重视,成为目前无人机的研究重点之一,传统四旋翼控制采用融合滤波、互补滤波算法,在姿态解算上有着较好的效果,并且计算速度很快,但是,这种算法在实时性上或者在短时间内变化很大的数据处理中表现一般,本文提出一种将卡尔曼滤波应用到姿态解算中的算法,研究了卡尔曼滤波的matlab实现,并利用卡尔曼滤波对采集到的四元数进行最优估计,在采集样本差异较大的情况下实现数据平滑渐变,与一般的算法相比,提高了系统的实时性与稳定性。

  关键词:四元数 卡尔曼滤波 matlab 导航算法
  中图分类号:TN967.2 文献标识码:A 文章编号:1007-9416(2016)11-0136-02
  四轴飞行器是微型飞行器的其中一种,也是一种智能机器人。它利用有四个旋翼作为飞行引擎来进行空中飞行,它的尺寸较小、重量较轻、适合携带和使用的无人驾驶飞行器一样能够携带一定的任务载荷,具备自主导航飞行能力。在复杂、危险的环境下完成特定的飞行任务。飞行器姿态确定问题是飞行器导航中的关键性问题之一,常用的姿态误差模型主要有欧拉角模型、等效旋转矢量、四元数模型。其中四元数模型应用最广,然而由于目前主流的MEMS传感器(如mpu6000、6050、9050)只是将传感器测量到的数据输出,导致了量测噪声无法解决的问题,对此有人提出了融合滤波、互补滤波算法,改善了四元数量测噪声误差,但是这种算法本质上并没有解决噪声误差问题,并且反应速度稍慢,实时性不好。针对此,本文给出了一种卡尔曼滤波与四元数结合的算法,意在通过利用卡尔曼滤波使系统的实时性得到提高。
  1 四元数与欧拉角的转换
  1.1 欧拉角到四元数的转换
  1.2 四元数到欧拉角的转换
  2 卡尔曼滤波
  2.1 卡尔曼滤波5个基本公式
  X(k)=A X(k-1)+B U(k)+W(k) (1)
  Z(k)=H X(k)+V(k) (2)
  式(1-2)中,X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。A和B是系统参数,对于多模型系统,他们为矩阵。Z(k)是k时刻的测量值,H是测量系统的参数,对于多测量系统,H为矩阵。W(k)和V(k)分别表示过程和测量的噪声。他们被假设成高斯白噪声(White Gaussian Noise),他们的covariance 分别是Q,R(这里我们假设他们不随系统状态变化而变化)。
  对于满足上面的条件(线性随机微分系统,过程和测量都是高斯白噪声),卡尔曼滤波器是最优的信息处理器。下面我们来用他们结合他们的covariances 来估算系统的最优化输出。首先我们要利用系统的过程模型,来预测下一状态的系统。假设现在的系统状态是k,根据系统的模型,可以基于系统的上一状态而预测出现在状态:
  X(k|k-1)=A X(k-1|k-1)+B U(k) (3)
  P(k|k-1)=A P(k-1|k-1) A’+Q (4)
  X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) (5)
  Kg(k)= P(k|k-1) H’/(H P(k|k-1) H’+R) (6)
  P(k|k)=(I-Kg(k) H)P(k|k-1) (7)
  式(3)中,X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。式(4)中,P(k|k-1)是X(k|k-1)对应的covariance,P(k-1|k-1)是X(k-1|k-1)对应的covariance,A’表示A的转置矩阵,Q是系统过程的covariance。式(3-4)就是卡尔曼滤波器5个公式当中的前两个,也就是对系统的预测。式(5)其中Kg为卡尔曼增益(Kalman Gain)。式(6)已经得到了k状态下最优的估算值X(k|k)。但是为了要另卡尔曼滤波器不断的运行下去直到系统过程结束,我们还要更新k状态下X(k|k)的covariance。式(7)中I 为1的矩阵,对于单模型单测量,I=1。当系统进入k+1状态时,P(k|k)就是式子(4)的P(k-1|k-1)。这样,算法就可以自回归的运算下去。卡尔曼滤波器的原理基本描述了,式(3-6)和式(7)就是他的5个基本公式。
  2.2 卡尔曼滤波的matlab的实现
  我们假设状态的控制量U(k)为零:
  z1=[0.7854,0.7854,0.7854,0.7854,0.7854,0.7854,0.7854,0.7854,0.7854,0.7854];
  z2=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1];
  z3=[0,0,0,0,0,0,0,0,0,0];
  Pk__=[1,0,0;0,1,0;0,0,1];
  A=eye(3);
  Q=eye(3);
  C=eye(3);
  R=eye(3);
  xk=[0,0,0]';
  for k = 1:10
  Pk_=A*Pk__*A'+Q;
  Hk=Pk_*C'/(C*Pk_*C'+R);
  zk=[z1(k);z2(k);z3(k)];
  xk__=xk;
  xk=A*xk__+Hk*(zk-C*A*xk__);
  x1(k)=xk(1);
  x2(k)=xk(2);
  x3(k)=xk(3);
  Pk=(eye(3)-Hk*C)*Pk_;
  Pk__=Pk;
  end
  以上就是一个三维变量的卡尔曼滤波matlab代码对应的就是我们的传感器传递给我们的欧拉角:
  q0=angle2quat(x1(0),x2(0),x3(0)) (8)
  式(8)就是matlab的欧拉角转换四元数函数。
  3 卡尔曼滤波和其他各种滤波算法的对比
卡尔曼滤波算法matlab 基于matlab的四元数卡尔曼滤波组合导航算法
  对比传统的算法,卡尔曼滤波有着更好的实时性,如图1所示是卡尔曼滤波和巴特沃斯低通滤波器等滤波算法的比较。这里均采用信号为Signal_Original_1=sin(2*pi*10*t)+sin(2*pi*20*t)+sin(2*pi*30*t);噪声为Noise_White_1= [0.3*randn(1,500),rand(1,500)]的信号叠加;则Mix_Signal_1= Signal_Original_1 + Noise_White_1。
  4 结语
  为了解决MEMS传感器传送数据实时性差的问题,本文提出了一种四元数和卡尔曼滤波组合的姿态结算方法,通过对MEMS传感器传送的数据进行卡尔曼滤波,降低数据误差,提高了四元数的实时性,针对四元数的卡尔曼滤波,本文给出了他的matlab实现,最后利用matlab软件进行仿真,实验结果表明:与传统数据算法相比,卡尔曼滤波算法在精度上有较大提高,算法的实时性有一定改善。
百度搜索“爱华网”,专业资料、生活学习,尽在爱华网!  

爱华网本文地址 » http://www.aihuau.com/a/410851/593043746302.html

更多阅读

sql中笛卡尔乘积 集合的笛卡尔乘积

一、SQL中大概有这么几种JOIN:  cross join  inner join  left outer join  right outer join  full outer join  他们都是基于cross join(笛卡尔乘积)二、笛卡尔乘积就是说 把所有的组合都出现一次。举例:A_test表 

转载 卡尔曼滤波理解转 转载工人

kankan原文地址:卡尔曼滤波理解【转】作者:chia卡尔曼滤波 – Kalman Filter1. 什么是卡尔曼滤波(What is the Kalman Filter?)在学习卡尔曼滤波之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼

卡尔曼滤波算法及MATLAB实现 km算法 matlab实现

这一段时间对现代滤波进行了学习,对自适应滤波器和卡尔曼滤波器有了一定认识,并对它们用MATLAB对语音信号进行了滤波,发现卡尔曼滤波器还是比较有用,能够在较大的噪声中还原原来的信号。新的学期马上就开始了,由于TI的开发板一直在维修,所

声明:《卡尔曼滤波算法matlab 基于matlab的四元数卡尔曼滤波组合导航算法》为网友十八里街禁分享!如侵犯到您的合法权益请联系我们删除