Serie inDetail - komplexe Themen verständlich dargestellt

Nick- u. Rollwinkel mit dem Beschleunigungssensor bestimmen

Formeln für die Berechnung der Lageposition

Nickwinkel und Rollwinkel sind die ersten beiden Eulerwinkel, die wir uns anschauen. Am Besten stellen wir uns ein Flugzeug vor, dass in x-Richtung fliegt. Geht die Nase des Flugzeugs hoch oder runter handelt es sich um eine Veränderung des Nickwinkels. Also einer Drehung um die y-Achse.
Bewegen sich die Flügel hoch und runter (der jeweils gegenüberliegende Flügel in die entgegengesetzte Richtung) handelt es sich um eine Änderung des Rollwinkels. Also einer Drehung um die x-Achse. Die Formeln für die Berechnung der Winkel sind folgende:

accNickWinkel = atan(aX / sqrt(pow(aY, 2) + pow(aZ, 2)));
accRollWinkel = atan(aY / sqrt(pow(aX, 2) + pow(aZ, 2)));

Umrechnen der Ergebnisse von Rad in °

accNickWinkel = degrees(accNickWinkel); //oder ... / 2 PI * 360
accRollWinkel = degrees(accRollWinkel);

Bei Interesse seht ihr hier wie die Formeln über Winkelfunktionen und den Satz des Pythagoras mit Hilfe von rechtwinkligen Dreiecken hergeleitet werden.

Herleitung Nickwinkel und Rollwinkel

Nick- und Rollwinkel mit Hilfe des Beschleunigungssensors berechnen

Im nachfolgenden Bild ist der Rollwinkel (rot) und der Nickwinkel (blau) mit der oben hergeleiteten Formel berechnet und auf dem Plotter ausgegeben worden. Um am Beispiel des Flugzeugs zu bleiben, kann man die untere Kurven folgendermaßen nachvollziehen. Zuerst wurde der rechte Flügel angehoben, dann der Linke und dann wurde das Flugzeug wieder gerade gestellt. Anschließend zeigt die blaue Kurve, der Nickwinkel, dass die Flugzeugspitze zuerst nach unten zeigt und dann zurück über die Mitte nach onen ausgelenkt wurde.
So weit so gut. Das Problem mit der Berechnung der Lage über die Beschleunigungssensoren sieht man im rechten Bildabschnitt. Der Beschleunigungsmesser liegt flach auf dem Tisch in 0-Lage. Die Ausschläge oder das Rauschen entstehen durch kleine Vibrationen. Fälschlicherweise wird dadurch eine Lageänderung erkannt.
Wie man das Rauschen (eng. noise) reduzieren kann wird im nächsten Abschnitt erläutert.

Beschleunigungssensor

Nick- und Rollwinkel mit einem Low Pass Filter versehen

Die Idee eines Low Pass Filters ist, dass 'Low' Frequenzen im Gegensatz zu 'High' Frequenzen (also dem Rauschen) den Filter passieren können. Dies wird erreicht, in dem der neue Messwert und der vorherige Messwert jeweils anteilig zum Anzeigewert zusammengerechnet werden. Dem vorherigen Messwert traut man mehr (im Beispiel zu 90%) während man dem neu errechneten Wert weniger traut (im Beispiel 10%). Schnelle Änderungen wirken sich damit nur zu einem kleinen Teil aus. Das System wird träger.

Hier die Formel für einen Low Pass Filter:

filteredNickWinkel = alterNickWinkel * 0.9 + accNickWinkel * 0.1;
alterNickWinkel = filteredNickWinkel;

filteredRollWinkel = alterRollWinkel * 0.9 + accRollWinkel * 0.1;
alterRollWinkel = filteredRollWinkel;

Beschleunigungssensor mit Low Pass Filter

Im linken Bildteil sehen wir die beiden gefilterten Werte für Nick- und Rollwinkel (rot und blau) neben den beiden ungefilterten (gelb und grün). Deutlich sieht man, dass das System träger wird. Die Lageränderungen wird mit den gefilterten Werten langsamer erreicht. Die Kurven sind aber deutlich ruhiger. Im rechten Bildteil, die ungefilterten Werte sind ausgeblendet, wurde nochmal der gleiche Vibrationsversuch wie im vorherigen Abschnitt durchgeführt. Die Vibration bzw. das Rauschen ist jetzt deutlich weniger ausgeprägt.

Auch mit dem Gyroskop kann die Lage im Raum berechnet werden. Wie das geht seht ihr auf der nächsten Seite.