Ich arbeite zurzeit an einem Flightcontroller und habe es zum Interessanten Teil geschaft, der Lageregelung. Aus Beschleunigungssensor und Gyroskop Winkel ermitteln, mittels komplementär Filter vereinigen und den PID-Regler eine Antwort berechnen lassen. Nur kann ich mir nicht erklären wie ich einen korrekten Winkel aus den Daten des Beschleunigungssensors errechne, da die Erdbeschleunigung doch jede Berechnung verfälscht. Ein Nullen der Z-Achse dürfte das Problem nicht lösen, in Schräglage zeigt die Erdanziehung auch auf den anderen Achsen Auswirkungen... Berechnen würde ich den Winkel zunächst mit atan2().
:
Verschoben durch User
Carlo schrieb: > wie ich einen korrekten Winkel aus den > Daten des Beschleunigungssensors errechne, da die Erdbeschleunigung doch > jede Berechnung verfälscht. Minus 9,81m/s^2. Carlo schrieb: > in Schräglage > zeigt die Erdanziehung auch auf den anderen Achsen Auswirkungen... Genau DAS ist der Sinn! Für eine Lage-/Beaschleunigungsregelung musst du natürlich die Daten der Gyroskope mit verrechnen.
Erstmal ... Die Beschleunigungssensoren sind nicht genau genug, um per integration die Geschwindigkeit zuverlaessig zu erhalten, noch weniger taugen sie um durch Doppelintegration die Position zu erhalten. Sie geben einen Hinweis. Wenn man die Hoehe moechte, sollte man einen barometrischem Drucksensor verbauen. Es gibt die tatsaechliche Lage, mit dem tatsaechlichen Bewegungsvektor, und dann gibt es den scheinbaren Bewegungsvektor, der sich vom tatsaechlichen Bewegungsvektor durch die Bewegungsgleichungen unterscheidet. Daraus gibt es dann auch eine scheinbare Position. Falls man in der etwas besseren Lage ist, die Position per GPS zu erhalten, kann man sich mehr Abweichung bei den Bewegungsgleichungen erlauben. Falls man die Position nicht hat, sollte man per barometrischem Druck die Hoehe haben. Per Energieerhaltung und Flugeigenschaften kann man die Bewegungsgleichungen zurueckkalibrieren. Diese Energieerhaltungs Gleichungen sind bei einem Flieger einfacher als bei einer Drohne haette ich mal angenommen. Denn ein Flieger setzt Hoehe sehr effizient in Geschwindigkeit um. Der PID ist uebrigens das Einfachste, und funktioniert eigentlich nur bei einer Drohne im stabilen Zustand.
Ohne die Erdbeschleunigung hättest du gar keine Information über die absolute Lage. Den Winkel bekommst du ja genau deswegen weil sich die 1g auf die 3 Achsen je nach Lage verteilen. Der Betrag des Vektors ist immer 1g (sofern keine zusätzliche Beschleunigung im Spiel ist) und die Lage ergibt sich aus der Aufteilung der 3 Achsen. Das Gyroskop gibt dir die Winkelgeschwindigkeit und liefert dir durch Integration der Winkelgeschwindigkeit ebenfalls den Absoluten winkel, welcher allerdings driftet. Den Drift von Pitch und Roll gleichst du über längere Zeit mit dem Beschleunigungssensor aus, den Yaw Drifst kannst du hingegen nur mit einem Magnetfeldsensor ausgleichen. Den Drift den Gyros sollte man vorher einmal über ein paar hundert Samples auswerten und dann kontinuierlich vom Messwert abziehen (für jede Achse separat natürlich). Das ganze schmeisst man im einfachsten Fall einfach in ein Komplementärfilter Winkel = 0.99*(Winkel+Gyro*dt) + 0.01*WinkelausAcc;
:
Bearbeitet durch User
Thread-Ersteller hier, durch das Verschieben zum Offtopic-Board musste ich mich registrieren. Demzufolge addiere ich die Beschleunigungen von X,Y,Z und prüfe sie auf ~1g, wenn das zu trifft berechne ich die Lage? Aber wenn ich bspw. eine Beschleunigung gegen die Erdanziehung habe und ganz zufällig auf ~1g komme ist die errechnete Lage doch unbrauchbar? > Das ganze schmeisst man im einfachsten Fall einfach in ein > Komplementärfilter > Winkel = 0.99*(Winkel+Gyro*dt) + 0.01*WinkelausAcc; Hier kommt mir die Frage auf was passiert wenn ich keine ~1g hab, also keinen brauchbaren Winkel vom Beschleunigungssensor erhalte? Sollte ich dann für diesen Durchlauf 100% auf das Gyro geben oder den zuletzt gültigen Wert des Beschleunigungssensors benutzen? PS: Danke für die rundum Infos, Magnetometer, Barometer, GPS-Modul, alles liegt bereit doch dazu komme ich erst später. Zunächst ist das Ziel Pitch und Roll von Gyroskop und dem Beschleunigungssensor zu erhalten.
Benny S. schrieb: > Hier kommt mir die Frage auf was passiert wenn ich keine ~1g hab, also > keinen brauchbaren Winkel vom Beschleunigungssensor erhalte? Sollte ich > dann für diesen Durchlauf 100% auf das Gyro geben oder den zuletzt > gültigen Wert des Beschleunigungssensors benutzen? Ja genau. Der Drift vom Gyro ist auch nicht so riesig, sodass man in der Regel auch einige Sekunden ohne Acc leben kann. Ich mache es bei meinem Copter so:
1 | // accMagnitude = Betrag accVektor => prüfen auf max 1.2g, min 0.8g
|
2 | if(accMagnitude < 120 && accMagnitude > 80 ){ |
3 | EstAngle[0] = 0.995*(EstAngle[0]+(float)gx*0.07*0.01) + 0.005*(_atan2(ax_f,sqrt(ay_f*ay_f+ az_f*az_f))); |
4 | EstAngle[1] = 0.995*(EstAngle[1]+(float)gy*0.07*0.01) + 0.005*(_atan2(ay_f,sqrt(ax_f*ax_f+ az_f*az_f))); |
5 | }
|
6 | else{ |
7 | EstAngle[0] = (EstAngle[0]+(float)gx*0.07*0.01); |
8 | EstAngle[1] = (EstAngle[1]+(float)gy*0.07*0.01); |
9 | }
|
:
Bearbeitet durch User
>Hier kommt mir die Frage auf was passiert wenn ich keine ~1g hab, also
keinen brauchbaren Winkel vom Beschleunigungssensor erhalte? Sollte ich
dann für diesen Durchlauf 100% auf das Gyro geben oder den zuletzt
gültigen Wert des Beschleunigungssensors benutzen?
PS: Danke für die rundum Infos, Magnetometer, Barometer, GPS-Modul,
alles liegt bereit doch dazu komme ich erst später. Zunächst ist das
Ziel Pitch und Roll von Gyroskop und dem Beschleunigungssensor zu
erhalten.
....
Wenn der Absolutwert der Beschleunigung nicht 1g ist, gibt es
offensichtlich eine zusaetzliche Beschleunigung. Die kann sich ergeben
durch :
-eine Motorinduzierte Beschleunigung - ersichtlich an der Ansteuerung
-eine Kurvenbeschleunigung in 3D - ersichtlich am Gyro
-ein Luftloch, geht hinunter - ersichtlich am Barometer
-ein Auftriebsschlauch, geht hinauf - ersichtlich am Barometer
Das Fluggeraet befindet sich in einer Differentialgleichung, die
abgespult wird. Und da muss man mitrechnen. In der Mitte beginnen geht
nicht. Ein Sample aus der Mitte des Ablaufes ist wertlos.
Ich empfehl erst mal eine Simulation zu schreiben. Welche Fluglagen
ergeben welche Sensorwerte. Und dann das Ganze passiv, dh ohne Antrieb,
zB an einer Schnur aufgehaengt zu verifizieren.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.