Grüß euch
Mein Beschleunigungssensor driftet stark ab bei der Berechnung der Geschwindigkeit. Weiß einer wie man das Abdriften korrigieren kann?
Grüß euch
Mein Beschleunigungssensor driftet stark ab bei der Berechnung der Geschwindigkeit. Weiß einer wie man das Abdriften korrigieren kann?
Oh toll, wie du uns mit Informationen fütterst.
Weniger Alkohol, dann driftet auch nix.
Gar nicht.
Das Berechnen der Geschwindigkeit aus der Beschleunigung (Geschwindigkeitsänderung) ist ungenau, weil sich der Fehler der Beschleunigungsmessung in der Geschwindigkeitsberechnung aufsummiert. Schon das genaue Erfassen der Beschleunigung in der Zeit ist extrem schwierig.
Du braucht eine andere Strategie um die Geschwindigkeit zu messen.
Grüße Uwe
Okay vielen dank Uwe.
Hast du vllt einen Tipp mit was ich das mal versuchen sollte?
GPS
SparkSience:
Hast du vllt einen Tipp mit was ich das mal versuchen sollte?
Und warum lieferst du nicht mehr Informationen ?
Entschuldigung also mal die Backgroundinfos:
Also ich will Bewegungsvektoren auslesen und mit welcher Geschwindigkeit diese sich bewegen. Der Sensor soll dann an einen Roboterarm angebracht werden und die Daten dann an den Arduino weiter senden, der diese dann verarbeitet.
Also der erste Versuch war mal mit einem Beschleunigungssensor quasi die Beschleunigung in die verschiedenen Richtungen zu messen und die dann in eine Geschwindigkeit umzurechnen.
(Fürs erste mal nur in die X-Richtung um mal was sinnvolles raus zubekommen)
// MPU-6050 Short Example Sketch
// Public Domain
#include<Wire.h>
#define CNT_MAX 100
const int MPU_addr=0x68; // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
float vx_ms=0;
int cnt = 1;
int AcXcorr;
float AcX_ms2;
void setup(){
AcXcorr=0;
AcX_ms2=0;
Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
Serial.begin(9600);
}
void loop(){
unsigned long TIMESTAMP = micros(); // oder für schnelle Sachen auch micros();
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers
AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
unsigned long Differenz = micros() - TIMESTAMP;
if(cnt<=CNT_MAX)
{
AcXcorr=AcXcorr + AcX; // digits
AcX_ms2=(AcX)/1670.18; // Korrektur des Drifts und Umrehnen auf m/s^2
if (cnt==CNT_MAX)
{
AcXcorr=AcXcorr/cnt; // digits
}
cnt++;
}
else
{
AcX_ms2=(AcX-1*AcXcorr)/1670.18; // Korrektur des Drifts und Umrechnen auf m/s^2
vx_ms = vx_ms + ((float)AcX_ms2) * (Differenz/1000) ; // Berechnen von vx [m/s]
}
// Serial.print("Berechnungsdauer = ");Serial.print(Differenz);
Serial.print(" | AcX = "); Serial.print(AcX_ms2);
// Serial.print(" | AcY = "); Serial.print(AcY);
Serial.print(" | AcZ = "); Serial.print(AcZ/1670.18);
Serial.print(" | vx = "); Serial.println(vx_ms);
// Serial.print(" | Tmp = "); Serial.println(Tmp/340.00+36.53); //equation for temperature in degrees C from datasheet
//Serial.print(" | GyX = "); Serial.print(GyX);
//Serial.print(" | GyY = "); Serial.print(GyY);
//Serial.print(" | GyZ = "); Serial.println(GyZ);
if(cnt<=CNT_MAX)delay(1);
else delay(100);
}
Gesch_Sensor_Test_1.ino (3.01 KB)
Wenn Du willst, dass man Deinen Sketch liest, setze ihn bitte in Codetags (</> oben links im Editor).
Gruß Tommy
Sry wusste nicht wie das geht , habs nun hinzugefügt
Da ist es einfacher Encoder an die Gelenke zu montiren oder über die Ansteuerung der Gelenke die Bewegung berechnen.
Grüße Uwe
Danke, dir ich werde mich mal darüber schlau machen