极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 26932|回复: 9

arduino MPU6050 加速度積分推算速度

[复制链接]
发表于 2015-4-14 01:57:41 | 显示全部楼层 |阅读模式
#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);

}

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

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

使用道具 举报

发表于 2015-4-14 08:30:21 | 显示全部楼层
理论上可以,但实际上因为漂移等等原因直接用是不行的

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

使用道具 举报

发表于 2015-4-14 08:57:45 | 显示全部楼层
     卡尔迈滤波
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-14 19:28:15 | 显示全部楼层
本帖最后由 ezpstmb2002 于 2015-4-16 00:57 编辑
zoologist 发表于 2015-4-14 08:30
理论上可以,但实际上因为漂移等等原因直接用是不行的

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



飄移極大
http://www.geek-workshop.com/hom ... =album&picid=27
透過陀螺儀積分推出的 x軸的角度 很飄
加速度目前還未成功推出速度  還在努力...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-14 19:31:58 | 显示全部楼层
suoma 发表于 2015-4-14 08:57
卡尔迈滤波

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

使用道具 举报

发表于 2015-4-14 22:34:56 | 显示全部楼层
ezpstmb2002 发表于 2015-4-14 19:31
所以覺得  透過加速度推出速度  是可行的嗎?
在板上看到的資訊  幾乎沒有
不過有看到有人做來測球速

blogspot.tw 我们上不去的

从加速度推速度理论是可行的
回复 支持 反对

使用道具 举报

发表于 2015-4-15 08:35:20 | 显示全部楼层
ezpstmb2002 发表于 2015-4-14 19:31
所以覺得  透過加速度推出速度  是可行的嗎?
在板上看到的資訊  幾乎沒有
不過有看到有人做來測球速

理论上可以,速度是加速度在时间上的积分
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-16 01:05:31 | 显示全部楼层
zoologist 发表于 2015-4-14 22:34
blogspot.tw 我们上不去的

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

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

使用道具 举报

 楼主| 发表于 2015-4-16 01:07:21 | 显示全部楼层
suoma 发表于 2015-4-15 08:35
理论上可以,速度是加速度在时间上的积分

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

使用道具 举报

发表于 2015-4-16 08:30:35 | 显示全部楼层
ezpstmb2002 发表于 2015-4-16 01:05
好吧
那我有研究個成果後
在分享上來跟各位討論一下

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

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

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

我没用过,不过看起来还可以
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-19 05:42 , Processed in 0.037037 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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