久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4647|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

C 陀螺儀和加速度的值卡爾曼濾波融合

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:140343 發(fā)表于 2016-9-25 10:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
arduino的卡爾曼濾波融合算法,非原創(chuàng),我只是封裝了算法。

H文件:
/*
* KalmanFilter.h
* Non-original
* Author: x2d
* Copyright (c) 2012 China
*
*/

#ifndef KalmanFilter_h
#define KalmanFilter_h

#include <WProgram.h>

class KalmanFilter
{
  public:
  KalmanFilter();
  
  /*
    卡爾曼融合計算
    angle_m: 加速度計測量并通過atan2(ax,ay)方法計算得到的角度(弧度值)
    gyro_m:陀螺儀測量的角速度值(弧度值)
    dt:采樣時間(s)
    outAngle:卡爾曼融合計算出的角度(弧度值)
    outAngleDot:卡爾曼融合計算出的角速度(弧度值)
  */
  void getValue(double angle_m, double gyro_m, double dt, double &outAngle, double &outAngleDot);
  
  private:
  double C_0, Q_angle, Q_gyro, R_angle;
  double q_bias, angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1;
  double angle, angle_dot;
  double P[2][2];
  double Pdot[4];
};

CPP文件:
/*
* KalmanFilter.cpp
* Non-original
* Author: x2d
* Copyright (c) 2012 China
*
*/

#include "KalmanFilter.h"

KalmanFilter::KalmanFilter()
{
   C_0 = 1.0f;
   Q_angle = 0.001f;
   Q_gyro = 0.003f;
   R_angle = 0.5f;
   q_bias = angle_err = PCt_0 = PCt_1 = E = K_0 = K_1 = t_0 = t_1 = 0.0f;
   angle = angle_dot = 0.0f;
   P[0][0] = 1.0f;
   P[0][1] = 0.0f;
   P[1][0] = 0.0f;
   P[1][1] = 1.0f;
   Pdot[0] = 0.0f;
   Pdot[1] = 0.0f;
   Pdot[2] = 0.0f;
   Pdot[3] = 0.0f;
}

void  KalmanFilter::getValue(double angle_m, double gyro_m, double dt, double &outAngle, double &outAngleDot)
{
/*
  Serial.print("angle_m = ");
  Serial.print(angle_m);
  Serial.print(";");
  Serial.print("gyro_m = ");
  Serial.print(gyro_m);
  Serial.print(";");
*/

  angle+=(gyro_m-q_bias) * dt;
  angle_err = angle_m - angle;
  Pdot[0] = Q_angle - P[0][1] - P[1][0];
  Pdot[1] = -P[1][1];
  Pdot[2] = -P[1][1];
  Pdot[3] = Q_gyro;
  P[0][0] += Pdot[0] * dt;
  P[0][1] += Pdot[1] * dt;
  P[1][0] += Pdot[2] * dt;
  P[1][1] += Pdot[3] * dt;
  PCt_0 = C_0 * P[0][0];
  PCt_1 = C_0 * P[1][0];
  E = R_angle + C_0 * PCt_0;
  K_0 = PCt_0 / E;
  K_1 = PCt_1 / E;
  t_0 = PCt_0;
  t_1 = C_0 * P[0][1];
  P[0][0] -= K_0 * t_0;
  P[0][1] -= K_0 * t_1;
  P[1][0] -= K_1 * t_0;
  P[1][1] -= K_1 * t_1;
  angle += K_0 * angle_err;
  q_bias += K_1 * angle_err;
  angle_dot = gyro_m-q_bias;
  
  outAngle = angle;
  outAngleDot = angle_dot;
/*
  Serial.print("angle = ");
  Serial.print(angle);
  Serial.print(";");
  Serial.print("angle_dot = ");
  Serial.print(angle_dot);
  Serial.print(";");
*/
}
#endif

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:142965 發(fā)表于 2016-10-17 22:55 | 只看該作者
你好    非常感謝的你的資料
回復(fù)

使用道具 舉報

板凳
ID:274513 發(fā)表于 2018-1-10 20:31 | 只看該作者
gyro_m:陀螺儀測量的角速度值(弧度值)  

gyro_m 的值 是怎么計算出來的?
回復(fù)

使用道具 舉報

地板
ID:284205 發(fā)表于 2018-5-3 00:25 | 只看該作者
請教#include <WProgram.h>這行里   WProgram.h是什么作用的文件?
帖子里沒看到有提到這個WProgram.h


回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产在线aa | 欧美精品一区在线观看 | 一区二区三区国产在线观看 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 在线观看视频91 | 亚洲成人精品一区二区 | 久久久久久久国产 | 国产精品二区三区 | 亚洲欧美日韩精品久久亚洲区 | 黄色av一区 | 免费观看色| 欧美三级免费观看 | 综合五月婷 | 中文字幕亚洲视频 | 成人免费观看男女羞羞视频 | 亚洲精品一区在线观看 | 夜久久 | japanhdxxxx裸体 | 中国一级特黄真人毛片免费观看 | 久久综合久久综合久久 | 日本一区二区电影 | 久热伊人 | 欧美h视频 | 国产中文字幕在线观看 | 91久久| 99久久精品国产一区二区三区 | 成人午夜在线 | 国产一级片在线观看视频 | 国产精品一二三区在线观看 | 亚洲香蕉在线视频 | 久久国产精品一区二区 | 人人鲁人人莫人人爱精品 | 日本不卡免费新一二三区 | 天堂在线中文字幕 | 色婷婷综合久久久中字幕精品久久 | 天天夜夜操 | 国产精品一区二区三区四区 | 国产精品久久久久久一区二区三区 | 日韩精品在线观看一区二区三区 | 成人av电影网 | 精品国产欧美一区二区 |