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
doublewinkel=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.