Forum: Mikrocontroller und Digitale Elektronik Quadcopter, Gyroskop Transformation


von Alexander412 (Gast)


Lesenswert?

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

von Junge (Gast)


Lesenswert?

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.

von Alexander412 (Gast)


Lesenswert?

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?

von Alexander412 (Gast)


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

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?

von Der Andere (Gast)


Lesenswert?

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.

von Pandur S. (jetztnicht)


Lesenswert?

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.

von pipi (Gast)


Lesenswert?

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

von Alexander412 (Gast)


Lesenswert?

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?

von Alexander412 (Gast)


Lesenswert?

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.

von Jan K. (jan_k)


Lesenswert?

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

von Alexander412 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.