Hallo MC, ich habe bzgl. Quadcoptern eine Verständnisschwierigkeit und brauche kompetente Hilfe. Ein Quadcopter hat sein eigenes Koordinatensystem, den Body Frame, dazu kommt das feste Koordinatensystem der Erde, der Inertial Frame. Wenn ein fliegender Quadcopter nun ein Accelerometer hat, misst dieser im Body Frame den geneigten Gravitationsvektor. Da der Gravitationsvektor im Inertial Frame aber immer in z-Richtung zeigt, kann daraus Pitch und Roll bzgl. des Inertial Frames berechnet werden. Die Umrechnung braucht den arkus tangengs, ich erhalte roll und pitch. Nun die Frage: Wenn der Quadcopter nun zusätzlich ein Gyroskop hat, liefert dieser Drehraten. 1) Müssen diese Drehraten auch erst in den Inertial Frame umgerechnet werden, um sie DANACH integrieren zu können und so eine zweite Information über roll und pitch bzgl. des Inertial Frames zu erhalten? 2) Wenn ja, dann können die Drehraten nur umgerechnet werden, wenn roll und pitch bereits bekannt sind BEVOR der Quadcopter startet und das Gyroskop erste Drehraten ungleich Null liefert. Dass bedeutet doch aber, dass es ganz elementar ist, dass ein Quadcopter vor dem Start in einer Ruhelage die exakte Lage mit dem Accelerometer ausmisst? Erst danach kann das Gyroskop sinnvoll genutzt werden. Stimmt das? Vielen Dank, Alexander
Alexander412 schrieb: > dann können die Drehraten nur umgerechnet werden, wenn roll > und pitch bereits bekannt sind BEVOR der Quadcopter startet und das > Gyroskop erste Drehraten ungleich Null liefert. Dass bedeutet doch aber, > dass es ganz elementar ist, dass ein Quadcopter vor dem Start in einer > Ruhelage die exakte Lage mit dem Accelerometer ausmisst? Erst danach > kann das Gyroskop sinnvoll genutzt werden. Stimmt das? Nein. Der Quadrocopter kann genauso in Schräglage gestartet werden. Ist "nur" ein Software Offset, man kann ja einfach in der Software Nullen und fertig. Den Rest erledigt die Lageregelung. Außerdem wir beispielsweise der Gyroskopwert bzw. dessen Integralsumme (wegen seiner enormen Drift) bei MEMS Sensoren meist nur in einem Zeitraum von höchstens wenigen Sekunden "betrachtet" und dann virtuell wieder "genullt". Stichwort Komplementärfilter bzw. die "Allzweckwaffe und Blackbox" Kalmanfilter.
Danke für die Antort, aber meine Frage ist noch unbeantwortet. Mit Ruheposition meinte ich auch Schräglage, hauptsache eine Lage, die das Accelerometer exakt ausmessen kann. Nochmal zu Frage 1: Kann ich die Werte, die mein Gyroskop z.B. über I2C liefert einfach aufaddieren (angenommen es gäbe keinen Offset) und ich erhalte die Lage des Quadcopters, Roll, Pitch und Yaw? M.M.n. nicht, weil ich die Raten erste in das Erdsystem umrechnen muss. Erst dort kann dann integriert werden. Stimmt das?
Vielleicht nochmal der Ablauf, wie ich ihn mir vorstelle: 0) Qc absolut horizontal. Accelerometer und Gyroskop ein mal kalibrieren und dann beibehalten. Nun ein Flugablauf: 1) QC in beliebiger Ruhelage stellen -> Accelerometer berechnet pitch, roll und yaw sehr genau. Accel. am besten sogar mehrmals ausgelesen, um Rauschen zu eliminieren. 2) QC starten und fliegen. 3) Gyroskop liefert nun Raten ungleich 0. 4) Diese Raten müssen laufend in den Erdframe umgerechnet werden. Dies macht man zu Beginn mit der Schätzung aus Punkt 1) für R, P und Y. Danach macht man das über die aktuellste Schätzung für R, P und Y, die ja ständig über sensor-fusion erneuert werden. 5) Die sensor fusion nutzt das Accelerometer. Es dient als Langzeitkorrektur, womit die Drift das Gyros herausgerechnet werden kann.
Alexander412 schrieb: > 4) Diese Raten müssen laufend in den Erdframe umgerechnet werden. Dies > macht man zu Beginn mit der Schätzung aus Punkt 1) für R, P und Y. > Danach macht man das über die aktuellste Schätzung für R, P und Y, die > ja ständig über sensor-fusion erneuert werden. Was willst du da umrechnen? Du willst doch nur wissen, ob sich der Quadrocopter um seine Achse dreht oder nicht?
Alexander412 schrieb: > Wenn ein fliegender Quadcopter nun ein Accelerometer hat, misst dieser > im Body Frame den geneigten Gravitationsvektor. Schon diese erste Annahme ist falsch. Er misst alle Beschleunigungen incl. der Erdbeschleunigung. Die allgemeine Relativitätstheorie lehrt uns dass eine Beschleunigungskraft und die Gravitationskraft ununterscheidbar sind. Aus dem Grund kann man nicht anhand eines Accelerometer die Lage des Fluggeräts im Raum ermitteln ohne seine linearen Beschleunigungen in allen 3 Achsen zu kennen. Genau die hat man aber normalerweise nicht. Also muss man alle vorhandenen Sensorwerte möglichst gut auswerten. Und das trotz der Fehler in den Werten. Das macht man meines Wissens über ein Kalman Filter.
Die Filterung ja. Die Geometrietransformationen sind da noch nicht dabei. Waer auch zu schoen. Wenn der senkrechte Beschleunigungsvektor einen Offset hat, driftet die Hoehe, daher nutzt man die Hoehenmessung um den vertikalen Offset rauszumachen. Hat ein horizontaler Beschleunigungsvektor einen Offset, so driftet die horizontale Position. Deshalb gleicht man mit einem GPS ab. Die Drehratensensoren sind etwas komplizierter.
Den Winkel kannst du (theoretisch) nur mit dem Gyrosensor berechnen, indem du die Drehraten aufsummierst. Dem Gyro ist es dabei egal, ob du in Schräglage startest oder nicht, da er nur die Drehrate misst. Die Schräglage musst du aber bei der Initialisierung berücksichtigen (typisch für eine Integration). Den Anfangswinkel rechnest du dir eben mit dem Beschleunigungssensor aus. Dabei sollte sich das System nicht bewegen. Also quasi so:
1 | ...
|
2 | // Initialisierung
|
3 | double winkel = berechneWinkelMitAcc(); |
4 | ...
|
5 | while(1) |
6 | {
|
7 | ...
|
8 | winkel = winkel + gyroRate * dt; |
9 | ...
|
10 | }
|
In der Praxis gibt es leider mehrere Probleme: Der Gyrosensor driftet stark --> nach wenigen Sekunden stimmt der aufsummierte Winkel nicht mehr. Deshalb wird der Acc-Sensor verwendet, um den Gyro-Drift herauszurechnen. Komplementärfilter oder Kalmanfilter vereinen dabei beide Sensorwerte. Ein großes Problem ist dabei aber, dass der Beschleunigungssensor auch dynamische Bewegungen (verursacht durch den Flug) misst. Wie man dieses Problem berücksichtigt, kann ich dir leider nicht sagen. Ein Kalmanfilter hat bei mir zu keiner Besserung geführt, aber ich habe vermutlich auch ein zu einfaches Modell verwendet... Mit einem Komplementärfilter (Gewichtung des Gyrowertes 0.995 und Acc 0.005) habe ich meinen Copter mal zum fliegen gebracht. Da der Acc-Sensor aber nur SEHR gering in die Winkelberechnung eingeht, regelt er sich meistens nicht genau in die 0-Lage und schwebt davon....
Ich merke grade, wie schwer es ist, mein Problem verständlich zu erklären. Das Paper, aus das ich mich beziehe ist folgendes: http://sal.aalto.fi/publications/pdf-files/eluu11_public.pdf Es geht mir um Formel (4). So wie ich das verstehe, kann man die Sensordaten vom Gyroskop nicht einfach summieren, sondern muss erst die Werte umrechnen und zwar mit der oberen Matrix von Formel (4). Wo ist meine Verständnisschwierigkeit?
Oder folgender Link: http://www.chrobotics.com/library/understanding-euler-angles In Punkt Sieben wird beschrrieben, wie man aus den Daten des Gyroskops die eigentlichen Eulerwinkelbeschleunigungen berechnet, also genau die Transformation, die mich so verwirrt.
Die zeitliche Ableitung deiner Eulerwinkel (Konvention beachten! zyx oder xzx etc?) entspricht nunmal nicht der Größe, die die Gyros ausgeben. Phi beispielsweise ist ja der Winkel nach Drehung um die Z und um Y Achse, daher müssen die dazugehörigen Winkel ja "irgendwie" noch mit da rein. Phi ist nicht die alleinige Drehung um die X-Achse von außen gesehen! Ich kann morgen mehr dazu sagen, bin jetzt zu müde sorry ;-)
Um die Eingangsfragen zu beantworten: 1) Ja, aber nicht unbedingt. Wenn die Neigungswinkel (Roll und Pitch) klein sind, werden die Transformationen nicht unbedingt gebraucht und der Quadcopter fliegt auch ohne sie. Wenn die Winkel aber größer werden und sich mehrere Winkel gleichzeitig ändern (z.B. Roll und Yaw), sollten die Transformationen beachtet werden. Andernfalls kommt es zu seltsamem - aber kontrollierbarem - Flugverhalten. 2) Ja, wie pipi schon schrieb. Das Gyroskop integriert ein Integral. Dazu braucht es initial einen Startwert, den das Accelerometer liefern kann. Die Drehraten einfach auf Null regeln bringt nichts, ein Quadcopter kann sich auch in geneigter Position nicht drehen, wenngleich er dann zur Seite beschleunigt.
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.