Hi,
also den Winkel kannst du durch Integration ermitteln. Etwa so:
Code:
Winkel = Winkel + Gyro
Je nachdem, wie oft du pro Sekunde integrierst, ist der Wert kleiner oder größer. Ein Beispiel:
Der Gyro gibt einen Wert von 32768 bei 2000°/s aus, du integrierst mit 500Hz (2ms)
1°/2000° * 32768 * (1/500) = 8192
D.h. ein Wert von 8192 entspricht einem Winkel von 1°. Wenn du ohne dt (also die Zeitdifferenz zwischen zwei Messungen) rechnest, erhältst du zwar den Winkel nicht im Klartext (sondern ein vielfaches davon), dafür kommst du aber ohne Gleitkommaarithmetik aus und sparst so Rechenzeit.
Dieser Winkel wird allerdings sehr schnell wegdriften (innerhalb 1-2s). Deswegen braucht man einen ACC (Accelerometer / Beschleunigungssensor), mit dem man den richtigen Winkel bestimmen kann. Allerdings misst dieser alle Art von Beschleunigung und ist deshalb stark verrauscht.
Um nun einen korrekten Winkel zu bekommen, bedient man sich der Vorteile beider Sensoren.
Gyro:
+ schnell
+ kaum Rauschen
+ keine Auswirkungen von Vibrationen
- ständiger Drift
- Quantisierungsfehler
ACC:
+ misst absoluten Winkel
+ kein Drift
- starkes Rauschen
- misst alle Beschleunigungen
Man braucht einen Algo, um die beiden Sensorwerte zu fusionieren, da gibts u.a. den Komplementärfilter, Kalmanfilter, usw...
Der Komplementärfilter arbeitet einfach aber sehr gut (wenn er richtig eingestellt ist), ist einfach zu implementieren und braucht kaum Rechenzeit. Der Kalmanfilter dagegen soll besser Ergebnisse liefern, ist aber auch deutlich schwieriger zu verstehen / implementieren und braucht auch mehr Rechenzeit.
Der Filter ist dazu da, den Drift des Gyro und das Rauschen des ACCs zu eliminieren und daraus den richtigen Winkel zu berechnen.
Ein Ansatz eines Komplementärfilters wäre:
Code:
a = 0.98
Winkel = a * (Winkel + Gyro) + (1-a) * ACC_Winkel
A ist sozusagen die Zeitkonstante der Filter (Hoch- und Tiefpass), Gyro ist der Gyro-Wert, ACC_Winkel ist der Winkel berechnet vom ACC-Sensor (z.b. per ATN) und Winkel ist der berechnete Winkel aus beiden Sensoren.
Der Gyro und ACC-Wert muss evtl. noch angepasst werden, sodass die Größenordnung beider Werte gleich ist.
Gruß
Chris
Lesezeichen