Ergänzende filter (Gyro + accel) mit Android

Vor kurzem habe ich einige der Forschung, um sowohl den Beschleunigungssensor + Gyroskop, diese zu benutzen, senser zu verfolgen, ein smartphone ohne die Hilfe von GPS (siehe diesen Beitrag)
Indoor-Positioning-System basierend auf Gyroskop und Beschleunigungsmesser

Zu diesem Zweck werde ich meine Ausrichtung (Winkel (pitch, roll etc..)) also, hier was ich bisher getan habe:

public void onSensorChanged(SensorEvent arg0) {
    if (arg0.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
    {
        accel[0] = arg0.values[0];
         accel[1] = arg0.values[1];
   accel[2] = arg0.values[2];
   pitch = Math.toDegrees(Math.atan2(accel[1], Math.sqrt(Math.pow(accel[2], 2) + Math.pow(accel[0], 2))));

  tv2.setText("Pitch: " + pitch + "\n" + "Roll: " + roll);

   } else if (arg0.sensor.getType() == Sensor.TYPE_GYROSCOPE )
{
  if (timestamp != 0) {
  final float dT = (arg0.timestamp - timestamp) * NS2S;         
  angle[0] += arg0.values[0] * dT;
  filtered_angle[0] = (0.98f) * (filtered_angle[0] + arg0.values[0] * dT) + (0.02f)* (pitch);
   }        
   timestamp = arg0.timestamp;
 }
}

Hier bin ich versucht, Winkel (nur zum testen) von meinem Beschleunigungssensor (pitch), die sich aus der integration der gyroscope_X Trog-Zeit-Filter mit einem zusätzlichen filter

filtered_angle[0] = (0.98 f) * (filtered_angle[0] + gyro_x * dT) + (0.02 f)* (pitch)

mit dT beginnen mehr oder weniger 0.009 Sekunden

Aber ich weiß nicht warum, aber meine Winkel sind nicht wirklich präzise...wenn das Gerät auf position flach auf dem Tisch (Bildschirm nach oben).

Pitch (angle fromm accel) = 1.5 (average) 
Integrate gyro = 0 to growing (normal it's drifting) 
filtered gyro angle = 1.2

und wenn ich heben Sie das Telefon von 90° (siehe der Bildschirm ist mit der Wand vor mir)

Pitch (angle fromm accel) = 86 (MAXIMUM) 
Integrate gyro = he is out ok its normal 
filtered gyro angle = 83 (MAXIMUM)

So dass der Winkel nie erreichen 90 ??? Auch wenn ich versuche, heben Sie das Telefon ein wenig mehr...
Warum werden nicht gehen, bis 90° ? Meine Berechnung falsch? oder ist die Qualität des Sensors Mist?

EINE andere Sache, die ich Frage mich, ist es das: bei Android weiß ich nicht "vorlesen" der Wert des Sensors, aber ich bin darüber informiert, wenn Sie sich ändern. Das problem ist, dass, wie Sie im code sehen Sie den Accel und Gyro teilen der gleichen Methode.... also, wenn ich die Berechnung der gefilterten Winkel ich die Tonhöhe des accel-Messen 0.009 Sekunden vor, oder nicht ? Ist das vielleicht die Quelle meines Problems?

Danke !

InformationsquelleAutor Alexis | 2011-09-26

Schreibe einen Kommentar