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.
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.
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;
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.