ezpstmb2002 发表于 2015-4-14 01:57:41

arduino MPU6050 加速度積分推算速度

#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;
float Gyrox = 0,Gyroy = 0,Gyroz = 0,lasttimeX=0,lasttimeY=0,lasttimeZ=0;
float Accx = 0.00,Accy = 0.00,Accz = 0.00;
float Ax = 0.00,Ay = 0.00,Az = 0.00;
float lastAx = 0.00,lastAy = 0.00,lastAz = 0.00;
long timer = 0;// 采样时间
void setup() {
    Wire.begin();
    Serial.begin(9600);
    accelgyro.initialize();
}
void loop() {
    accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
    long o_timer = timer;                   // 上一次采样时间(ms)
    Accx = (ax/8192.00 - 0.025)*9.8;
    Accy = (ay/8192.00 + 0.025)*9.8;
    Accz = (az/8192.00 + 0.1)*9.8;
    gx = gx/131.00;
    gy = gy/131.00;
    gz = gz/131.00;
    timer = millis();                     // 当前时间(ms)
    float dt = (timer - o_timer) / 1000.0;// 微分时间(s)
    Gyrox = Gyrox + (lasttimeX+gx)*dt/2;
    Gyroy = Gyroy + (lasttimeY+gy)*dt/2;
    Gyroz = Gyroz + (lasttimeZ+gz)*dt/2;
    Ax = Ax +(lastAx+ Accx)*dt/2;
    Ay = Ay +(lastAy+ Accy)*dt/2;
    Az = Az +(lastAz+ Accz)*dt/2;
    lasttimeX = gx;
    lasttimeY = gy;
    lasttimeZ = gz;
    lastAx = Accx;
    lastAy = Accy;
    lastAz = Accz;
    Serial.print("GX: ");
    Serial.print(Gyrox); Serial.print(" GY: ");
    Serial.print(Gyroy); Serial.print(" GZ: ");
    Serial.print(Gyroz); Serial.print(" AX: ");
    Serial.print(Ax); Serial.print(" AY: ");
    Serial.print(Ay); Serial.print(" AZ: ");
    Serial.println(Az);

}

小弟想推算出速度,藉由對加速度積分所得
但是我所積分出的數值卻很奇怪,
所推的速度幾乎不會隨著移動變動...
想請問我積分是錯誤的嗎?
梯形公式來推積分的

不知道 板上是否有人成功將速度計算出來過呢?
有的話,有請大大指示一下了

zoologist 发表于 2015-4-14 08:30:21

理论上可以,但实际上因为漂移等等原因直接用是不行的

解决方法是用算法进行滤波之类的,非常复杂了

suoma 发表于 2015-4-14 08:57:45

   卡尔迈滤波

ezpstmb2002 发表于 2015-4-14 19:28:15

本帖最后由 ezpstmb2002 于 2015-4-16 00:57 编辑

zoologist 发表于 2015-4-14 08:30 static/image/common/back.gif
理论上可以,但实际上因为漂移等等原因直接用是不行的

解决方法是用算法进行滤波之类的,非常复杂了


飄移極大
http://www.geek-workshop.com/home.php?mod=space&uid=5340&do=album&picid=27
透過陀螺儀積分推出的 x軸的角度 很飄
加速度目前還未成功推出速度還在努力...

ezpstmb2002 发表于 2015-4-14 19:31:58

suoma 发表于 2015-4-14 08:57 static/image/common/back.gif
卡尔迈滤波

所以覺得透過加速度推出速度是可行的嗎?
在板上看到的資訊幾乎沒有
不過有看到有人做來測球速
http://gogoprivateryan.blogspot.tw/2014/10/3-arduino-nanowii-microsd-mpu6050.html
還在努力瞭解他如何應用測速的

zoologist 发表于 2015-4-14 22:34:56

ezpstmb2002 发表于 2015-4-14 19:31 static/image/common/back.gif
所以覺得透過加速度推出速度是可行的嗎?
在板上看到的資訊幾乎沒有
不過有看到有人做來測球速


blogspot.tw 我们上不去的

从加速度推速度理论是可行的

suoma 发表于 2015-4-15 08:35:20

ezpstmb2002 发表于 2015-4-14 19:31 static/image/common/back.gif
所以覺得透過加速度推出速度是可行的嗎?
在板上看到的資訊幾乎沒有
不過有看到有人做來測球速


理论上可以,速度是加速度在时间上的积分

ezpstmb2002 发表于 2015-4-16 01:05:31

zoologist 发表于 2015-4-14 22:34 static/image/common/back.gif
blogspot.tw 我们上不去的

从加速度推速度理论是可行的

好吧
那我有研究個成果後
在分享上來跟各位討論一下
那份網址主要內容是有人製作
一個類似壘球的機構 將MPU6050及控制器 置入該機構
進行壘球拋接動作的測速

ezpstmb2002 发表于 2015-4-16 01:07:21

suoma 发表于 2015-4-15 08:35 static/image/common/back.gif
理论上可以,速度是加速度在时间上的积分

好的,我接下來會開始對自己所接收的DATA做分析
並了解 為何目前積分有誤等問題
有進展在上來分享

zoologist 发表于 2015-4-16 08:30:35

ezpstmb2002 发表于 2015-4-16 01:05 static/image/common/back.gif
好吧
那我有研究個成果後
在分享上來跟各位討論一下


哦 这样的话,算法是很困难的事情,就是滤波算法

取值容易,但是解姿态非常复杂

如果资金充裕可以直接去淘宝买别人做好的,内部带mcu,他们已经内嵌算法,串口输出的的这种模块

我没用过,不过看起来还可以
页: [1]
查看完整版本: arduino MPU6050 加速度積分推算速度