极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12966|回复: 4

mpu6050陀螺仪一直在往小的变化

[复制链接]
发表于 2013-6-27 00:14:28 | 显示全部楼层 |阅读模式
这两天我在做MPU6050的实验,主要是讲陀螺仪和加速器的数据进行卡尔曼滤波,效果还是不错的,但是我的MPU6050放在桌子上没动,可是陀螺仪的数据一直在变小,并且到了0仍在往负数变化,不知道各位有没有遇到这样的情况。。。
附加上卡尔曼的库
https://github.com/TKJElectronics/KalmanFilter
我是参考这个写的(里面还有个PROCESSING的数据采集程序,但是感觉没的Serialchat的好用。。。)
有知道我问题帮忙回答下咯 谢谢哈

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-6-27 14:09:43 | 显示全部楼层
1,首先你要贴源码上来;
2,从你讲的情况看,Kalman的各项参数没有调好(就是说Kalman里面有多项需要定义的数据你定错了,或者是有问题!注:我到现在还没有如何取这些数!!!!)
回复 支持 反对

使用道具 举报

发表于 2013-6-27 14:58:25 | 显示全部楼层
本帖最后由 pww999 于 2013-6-27 15:25 编辑

很正常,不动时Kalman和PID控制一样 数据变化也是只往一边跑,.....



在实际 使用时才能显示正常吧.........

(我所发的平行车运动时 显示数据在+ 0 -之间变化,
如果用手拿住小车,显示的数据也是如你所说的只会向一边增大或变小)


引用楼上 注:我到现在还没有如何取这些数!!!!
回复 支持 反对

使用道具 举报

发表于 2013-6-28 23:04:18 | 显示全部楼层
有源代码吗  学习学习
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-30 14:02:06 | 显示全部楼层
#include "Wire.h"
#include"Kalman.h"
#include "I2Cdev.h"
#include "MPU6050.h"

MPU6050 accelgyro;
Kalman kalmanX; // Create the Kalman instances
Kalman kalmanY;
Kalman kalmanZ;

int16_t ax, ay, az;
int16_t gx, gy, gz;
uint32_t timer;

double accXangle, accYangle,accZangle; // Angle calculate using the accelerometer
double gyroXangle, gyroYangle,gyroZangle; // Angle calculate using the gyro
double kalAngleX, kalAngleY; // Calculate the angle using a Kalman filter

void setup() {
    // join I2C bus (I2Cdev library doesn't do this automatically)
    Wire.begin();

    // initialize serial communication
    // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
    // it's really up to you depending on your project)
    Serial.begin(115200);
    // initialize device
    accelgyro.initialize();
    // verify connection
    accelgyro.testConnection();
    timer=micros();
}

void loop() {
    // read raw accel/gyro measurements from device
    accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
    accXangle = (atan2(ay,az)+PI)*RAD_TO_DEG;
    accYangle = (atan2(ax,az)+PI)*RAD_TO_DEG;
   
    double gyroXrate = (double)gx/131.0;
    double gyroYrate = -((double)gy/131.0);

   
    gyroXangle += gyroXrate*((double)(micros()-timer)/1000000); // Calculate gyro angle without any filter  
    gyroYangle += gyroYrate*((double)(micros()-timer)/1000000);

   
    kalAngleX = kalmanX.getAngle(accXangle, gyroXrate, (double)(micros()-timer)/1000000); // Calculate the angle using a Kalman filter
    kalAngleY = kalmanY.getAngle(accYangle, gyroYrate, (double)(micros()-timer)/1000000);
    timer = micros();
   
  //  Serial.print(accXangle);Serial.print(",");
   // Serial.print(gyroXangle);Serial.print(",");
    //Serial.print(kalAngleX);Serial.print("\r\n");

  //  Serial.print("\t");
  
    //Serial.print(accYangle);Serial.print(",");
    //Serial.print(gyroYangle);Serial.print(",");
    //Serial.print(kalAngleY);Serial.print("\r\n");
    delay(1);
   
}
这个是代码  只测了X,和Y 的。。。库论坛都有,卡尔曼的库已经发出了链接。。。用Serialchat就能看到波形
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-6 21:28 , Processed in 0.035754 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表