float Angle = 0.0;//卡尔曼滤波器的输出值,最优估计的角度
//float Gyro_x = 0.0;//卡尔曼滤波器的输出值,最优估计的角速度
float Q_angle = 0.001;//陀螺仪噪声的协方差(估计过程的误差协方差)
float Q_gyro = 0.003;//陀螺仪漂移噪声的协方差(估计过程的误差协方差)
float R_angle = 0.5;//加速度计测量噪声的协方差
float dt = 0.005;//积分时间,dt为滤波器采样时间(秒)
char C_0 = 1;//H矩阵的一个数
float Q_bias = 0,Angle_err = 0;//Q_bias为陀螺仪漂移
float PCt_0 = 0,PCt_1 = 0,E = 0;//中间变量
float K_0 = 0,K_1 = 0,t_0 = 0,t_1= 0;//K是卡尔曼增益,t是中间变量
float Pdot[4] = {0,0,0,0};//计算P矩阵的中间变量
float PP[2][2] = {{1,0},{0,1}};//公式中P矩阵,X的协方差 //gx...分别为重力加速度在三个轴向的分力 由加速度计测得
//ax...分别为角速度在三个轴向的角速度 由陀螺仪测得
//最后得到最终滤波完毕的x、y、z方向的角度值(°)
//调用下面的函数应该如下调用,使用atan2更为准确
//Kalman_Filter(gx,atan2(ay,sqrt(ax*ax+az*az))*1800/3.14);//与x轴角度
//Kalman_Filter(gx,atan(ay/sqrt(ax*ax+az*az))*1800/3.14);//与x轴角度
//三个方位具体带入如下
//atan(sqrt(ax*ax+ay*ay)/z)*1800/3.14;
//atan(ay/sqrt(ax*ax+az*az))*1800/3.14;
//atan(ax/sqrt(ay*ay+az*az))*1800/3.14; void Kalman_Filter(float Gyro,float Accel)//Gyro陀螺仪的测量值,Accel加速度计的角度计算值
{
Angle+=(Gyro-Q_bias)*dt;
//角度测量模型方程,角度估计值=上一次的最优角度+(角速度-上一次的最优零漂)*dt为滤波器采样时间(秒)
//就漂移来说认为每次都是相同的Q_bias=Q_bias Pdot[0] = Q_angle - PP[0][1] - PP[1][0];
Pdot[1] = -PP[1][1];
Pdot[2] = -PP[1][1];
Pdot[3] = Q_gyro; PP[0][0] += Pdot[0] * dt;
PP[0][1] += Pdot[1] * dt;
PP[1][0] += Pdot[2] * dt;
PP[1][1] += Pdot[3] * dt; PCt_0 = C_0 * PP[0][0];//矩阵乘法的中间变量
PCt_1 = C_0 * PP[1][0];//C_0 = 1
E = R_angle + C_0 * PCt_0;//分母
K_0 = PCt_0 / E;//卡尔曼增益,两个,一个是Angle的,一个是Q_bias的
K_1 = PCt_1 / E; Angle_err = Accel - Angle;
Angle += K_0 * Angle_err;//计算最优角度
Q_bias += K_1 * Angle_err;//计算最优零漂
//Gyro_x = Gyro - Q_bias;//计算得最优角速度 t_0 = PCt_0;//矩阵计算中间变量,相当于a
t_1 = C_0 * PP[0][1];//矩阵计算中间变量,相当于b PP[0][0]-=K_0 * t_0;
PP[0][1]-=K_0 * t_1;
PP[1][0]-=K_1 * t_0;
PP[1][1]-=K_1 * t_1; }

卡尔曼滤波法C编程的更多相关文章

  1. 概率编程:《贝叶斯方法概率编程与贝叶斯推断》中文PDF+英文PDF+代码

    贝叶斯推理的方法非常自然和极其强大.然而,大多数图书讨论贝叶斯推理,依赖于非常复杂的数学分析和人工的例子,使没有强大数学背景的人无法接触.<贝叶斯方法概率编程与贝叶斯推断>从编程.计算的角 ...

  2. 8皇后-----回溯法C++编程练习

    /* * 八皇后问题回溯法编程练习 * 在8×8的棋盘上,放置8个皇后,两个皇后之间不能两两攻击 * 也即,直线,垂直45度.135度方向不能出现两个皇后 * * copyright Michael ...

  3. 匈牙利命名法,骆驼命名法(camel),帕斯卡(Pascal)命名法(转)

    一.匈牙利命名法      Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一位能干的 Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi) ...

  4. NLP点滴——文本相似度

    [TOC] 前言 在自然语言处理过程中,经常会涉及到如何度量两个文本之间的相似性,我们都知道文本是一种高维的语义空间,如何对其进行抽象分解,从而能够站在数学角度去量化其相似性.而有了文本之间相似性的度 ...

  5. python编码规范

    python编码规范 文件及目录规范 文件保存为 utf-8 格式. 程序首行必须为编码声明:# -*- coding:utf-8 -*- 文件名全部小写. 代码风格 空格 设置用空格符替换TAB符. ...

  6. 从零开始山寨Caffe·壹:仰望星空与脚踏实地

    请以“仰望星空与脚踏实地”作为题目,写一篇不少于800字的文章.除诗歌外,文体不限. ——2010·北京卷 仰望星空 规范性 Caffe诞生于12年末,如果偏要形容一下这个框架,可以用"须敬 ...

  7. Unity3.0基于约定的自动注册机制

    前文<Unity2.0容器自动注册机制>中,介绍了如何在 Unity 2.0 版本中使用 Auto Registration 自动注册机制.在 Unity 3.0 版本中(2013年),新 ...

  8. Eviews 9.0新功能——估计方法(ARDL、面板自回归、门限回归)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 9.2 估计功能 eviews9.0下载链接: ...

  9. [转]EM算法(Expectation Maximization Algorithm)详解

    https://blog.csdn.net/zhihua_oba/article/details/73776553 EM算法(Expectation Maximization Algorithm)详解 ...

随机推荐

  1. SOA和微服务架构

    微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用.这些小应用之间通过服务完成交互和集成.每个小应用从前端web ui ...

  2. zk个人入门学习总结(1)

    ZooKeeper是一种分布式协调服务,用于管理大型主机.在分布式环境中协调和管理服务是一个复杂的过程.ZooKeeper通过其简单的架构和API解决了这个问题.ZooKeeper允许开发人员专注于核 ...

  3. 【BZOJ1975】【SDOI2010】魔法猪学院(搜索,A*,贪心)

    我已经沉迷于粘贴题目地址了... 题解 很显然的贪心呀, 就是一定是最短的若干条路径的长度 所以,不断拓展k短路就可以了 至于怎么用A* 评估函数f(x)=dis[x]+g[x] 其中,dis是到N号 ...

  4. THUWC2018咸鱼记

    Day -inf 好不容易联赛水进来了 好虚啊...(萌新)什么都不会...只会大水题 估计要\(GG\)了,瑟瑟发抖 准备辣.. 自我介绍根本没面试,就没脸贴了 周围的大佬们(尤其\(Zsy\))还 ...

  5. [Shoi2007]Vote 善意的投票

    题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来 ...

  6. Oracle数据文件丢失,数据库如何打开或恢复

    (一)如果没有备份只能是删除这个数据文件了,会导致相应的数据丢失.SQL>startup mount--ARCHIVELOG模式命令SQL>Alter database datafile ...

  7. MySQL单表百万数据记录分页性能优化,转载

    背景: 自己的一个网站,由于单表的数据记录高达了一百万条,造成数据访问很慢,Google分析的后台经常报告超时,尤其是页码大的页面更是慢的不行. 测试环境: 先让我们熟悉下基本的sql语句,来查看下我 ...

  8. 数据结构之队列c代码实现

    一学期的数据结构,总不能毫无收获吧,因为书上的很多代码并不能实现,我一个编程小白可怎么过呢,难得假期有时间,于是我寻求度娘,从四面八方找了些可以编译通过的源码,这一次是队列,后面我还会逐渐补充,如果有 ...

  9. 简单总结下 cookie、session

      Cookies:     定义:cookie 中文意思是"小甜饼",但是,在互联网中它跟食品没有半毛钱关系,它主要是由web服务器应用程序创建,在客户端计算机中保存,问题来了, ...

  10. python 批量删除mysql前缀相同的表

    1,一般游戏log数据库会存储大量的玩家行为日志,一种行为一张表,每天生成一张新表,一天会有30+张不同行为的表,通常会保留玩家日志1年左右,对于超过1年的日志需要删除 2,log数据库一年会保存1W ...