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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich nur mich wiederhole.
Erhalten Sie position durch Integration die lineare Beschleunigung zweimal, aber der Fehler ist schrecklich. Es ist nutzlos in der Praxis. In anderen Worten, Sie versuchen zu lösen, die unmöglich ist.
Was Sie tatsächlich tun können, ist zu verfolgen, nur der Orientierung.
Roll, pitch und yaw böse sind, verwenden Sie Sie nicht. Check-in das video, das ich bereits empfohlen, in 38:25.
Hier ist ein Super tutorial wie zu verfolgen, Orientierung mit gyros und Beschleunigungssensoren.
Ähnliche Fragen, die Sie hilfreich finden könnte:
verfolgen kleine Bewegungen des iphone ohne GPS
Was ist die wirkliche Welt, die Genauigkeit der Handy-Beschleunigungsmesser, wenn Sie für die Positionierung?
wie berechne Telefon die Bewegung in der vertikalen Richtung von dem rest?
iOS: Bewegung, Präzision im 3D-Raum
Wie zu verwenden Beschleunigungsmesser, um den Abstand Messen für Android-Anwendung Entwicklung
Distanz verschoben, die durch Accelerometer
Wie finde ich den Abstand reiste mit einem Gyroskop und Beschleunigungssensor?
Kein problem und viel Glück! Ja, ich habe eine C++ Implementierung, die aber nicht allzu schwer, eigene zu schreiben, in Java für Android. Vielleicht gibt es bestehende Anwendungen habe ich leider nicht allen bekannt. Ist nur die Orientierung genug für Ihre Anwendung?
Als es nur ein Projekt für meine Schule, ich war nur daran interessiert zu wissen, ob es möglich war.. nach Menge Lesungen fand ich heraus, dass es ist nicht 🙂 oder wenn es ist, den Weg vor meine Mathe-Verständnis... Also ich bin nur gonna ein bisschen ändern und versuchen das Spiel mit gyro + accel nur get Orientierung 🙂
Ich habe gerade festgestellt, dass: diydrones.com/profiles/blogs/a-simple-deadreckoning es ist verwenden Sie den DCM + deadreckoning zu verfolgen, ein Flugzeug (er ist intergrating zweimal, um die position, aber ich hatte nicht understant, wie er korrigiert wird, das Ergebnis)
Ich habe nicht überprüfen Sie die details, aber es scheint mir, seinen Algorithmus basiert auf der GPS-und IMU wird verwendet, um "in die Lücken zu füllen." Ja, Sie können tun, dass mit dem Kalman-filter, aber die in Ihrer Frage sagen Sie, Sie haben keine/GPS.
InformationsquelleAutor Ali
Schrieb ich ein tutorial über die Verwendung der Komplementären Filter für oriëntation tracking mit Gyroskop und Beschleunigungssensor: http://www.pieter-jan.com/node/11 vielleicht kann es dir helfen.
InformationsquelleAutor Pieter-Jan
Ich den code testen und festgestellt, dass wohl der scale-Faktor ist nicht konstant.
Konvertieren Sie die Tonhöhe auf 0-pi gibt das bessere Ergebnis.
In meinem test, das gefilterte Ergebnis ist ~90 Grad.
InformationsquelleAutor yee.hoo.dev
ich habe versucht, und dies wird Ihnen Winkel 90...
InformationsquelleAutor Arfan Mirza