Hallo, ich hoffe, das ist der richtige Bereich. Nach den ersten kleinen Projekten versuche ich derzeit einen Quadrocopter möglichst in Eigenregie zu bauen. Nachdem sowohl die Funkübertragung und die Motorsteuerung funktioniert, hänge ich aber an einem kleinen Problem. Ich bekomme durch meine Sensoren bereits vernünftige Quaternionen; soweit so gut. Wie übertrage ich das nun auf die Steuerung, sodass der Copter sich selbst stabilisiert? Ich weiß, dass jeder Imaginärteil ja eine Drehung um eine bestimmte Achse darstellt. Steuere ich die Motoren so an, bis meine Quaternionen x+0i+0j+0k darstellen? Also wenn der Controller merkt "Drehung um x-Achse" Motor 2 stärker und Motor 3 etwas schwächer, bis keine Drehung um die Achse mehr vorhanden ist? Oder habe ich bei den Quaternionen jetzt etwas falsch verstanden? Grüße Dominik :)
Dominik Gebhardt schrieb: > Ich bekomme durch meine Sensoren bereits vernünftige Quaternionen; > soweit so gut. Wie übertrage ich das nun auf die Steuerung, sodass der > Copter sich selbst stabilisiert? > Ich weiß, dass jeder Imaginärteil ja eine Drehung um eine bestimmte > Achse darstellt. > Steuere ich die Motoren so an, bis meine Quaternionen x+0i+0j+0k > darstellen? Das wäre kontraproduktiv. Das Quaternion sagt dir ja um welche Achse sich der Copter wie weit aus seiner Ruhelage gedreht hat, um in der jetzt festgestellten Orientierung zu liegen. D.h. deine Steuerung muss genau diese Drehung rückgängig machen um wieder in die Ruhelage zu kommen. D.h. du musst einen Weg finden, wie du diese Drehung um irgendeine Achse und um irgendeinen Winkel auf deine Motoren zurückführst, wobei du ja die Einschränkung hast, dass jedes Motorpärchen nur um eine bestimmte Achse drehen kann. Was du brauchst ist also eine 'Decomposition' (sorry, ich weiß das deutsche Wort dafür nicht), deines allgemeinen Quaternions in 2(3) Quaternionen, deren Achsen du vorgibst (und die die Drehachsen darstellen, die deine Motoren realisieren können). Das Ergebnis sind also ganz spezielle 'Quaternionen'. Ihre Achsen sind festgenagelt aber die WInkel nicht. Und diese Winkel haben einen speziellen Namen. Man nennt sie die Euler Winkel. Was du also suchst ist eine Decomposition eines Quaternions in Euler Winkel. http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles Mit diesen Winkeln hast du dann die Information um wieviel sich der Copter um die fixen Hauptachsen drehen muss und das 'übersetzt' du dann wiederrum in die Ansteuerung der Motoren.
Karl Heinz Buchegger schrieb: > 'Decomposition' (sorry, ich weiß das > deutsche Wort dafür nicht) Was könnte es wohl sein? Zerlegung :-)
P. M. schrieb: > Karl Heinz Buchegger schrieb: >> 'Decomposition' (sorry, ich weiß das >> deutsche Wort dafür nicht) > > Was könnte es wohl sein? Zerlegung :-) :-) Danke. Das ist halt die Krux, wenn man immer nur englischsprachige Literatur zu diesen Themenkreisen liest. Irgendwann fallen einem die deutschen Worte nicht mehr ein.
Vielen Dank schonmal für deine ausführliche Antowrt! :) Aber jetzt habe ich noch ein paar mehr Fragen als vorher? 1) Meine Sensoren sind ja auf einer eigenen Platine. Ich dachte, dass das Quaternion mir nun angibt, wie sich das Koordinatensystem der Platinen (mit seinen festen Achsen) nun im Ausgangskoordinatensystem liegt. Oder ist das falsch? 2) Haben Eulerwinkel nicht wieder das Problem des Gimbal Lock? 3) Du sagst, dass ich die Drehung rückgängig machen muss. Muss ich da wieder die Reihenfolge beachten, in der die Drehungen aufgetreten sind? 4) Wenn ich den Copter dann steuern möchte, soll z.B. die Drehung im die y-Achse ja nicht rückgängig gemacht werden. Wenn so eine manuelle Eingabe erfolgt, soll die automatische Stabilisierung dann ignoriert werden? 5) Zur Decomposition und Drehachsen: Meine Achsen, die die Motoren realisieren können, wären dann doch: a) y-Achse: Copter steht auf der Stelle und dreht sich nach links und rechts. b) x-Achse: Wenn der Copter "nach vorne schaut" kippt er sich nach vorne und hinten. c) z-Achse: Wenn der Copter "nach vorne schaut" kippt er nach links und rechts. 5) Ich sollte am Ende einen Winkel für jede Achse rausbekommen. Dieser sagt mir dann also, um wieviel ich den Copter zurückkippen muss. Grüße und viele Dank nochmal!
Dominik Gebhardt schrieb: > Vielen Dank schonmal für deine ausführliche Antowrt! :) > > Aber jetzt habe ich noch ein paar mehr Fragen als vorher? > > 1) > Meine Sensoren sind ja auf einer eigenen Platine. Ich dachte, dass das > Quaternion mir nun angibt, wie sich das Koordinatensystem der Platinen > (mit seinen festen Achsen) nun im Ausgangskoordinatensystem liegt. Oder > ist das falsch? Ich kenn jetzt natürlich dein System nicht. Aber ein Quaternion gibt an, um welchen Winkel um welche Achse man drehen muss, damit man von einer Ausgangslange in eine Endlage kommt. Ob von deiner Sensorplattform der Winkel jetzt die 'Hinrichtung' oder die 'Rückrichtung' angibt weiß ich nicht (ändert aber nur das Vorzeichen des Winkels). > 2) Haben Eulerwinkel nicht wieder das Problem des Gimbal Lock? Du führst sie ja nicht mit, sondern rechnest sie aus dem Quaternion laufend neu aus. D.h. du hast keinen Gimabal-Lock aber es gibt Orientierungen, in denen es mehrere verschiedene Lösungen gibt. > 3) Du sagst, dass ich die Drehung rückgängig machen muss. Muss ich da > wieder die Reihenfolge beachten, in der die Drehungen aufgetreten sind? Ist alles schon im Quaternion berücksichtigt, bzw. in welcher Reihenfolge die 'zerlegten' Quaternionen in Summe wieder das Gesamtquaternion ergeben. > 4) Wenn ich den Copter dann steuern möchte, soll z.B. die Drehung im die > y-Achse ja nicht rückgängig gemacht werden. Wenn so eine manuelle > Eingabe erfolgt, soll die automatische Stabilisierung dann ignoriert > werden? Im Prinzip verdrehst du dann mit deiner Fernsteuerung die 'Euler-Winkel', die als 0 gelten. D.h. du drehst dann nicht solange zurück, bis du Euler Winkel 0/0/0 erreichst, sondern eben die Werte, die du über die Fernsteuerung einstellst. > 5) Ich sollte am Ende einen Winkel für jede Achse rausbekommen. Dieser > sagt mir dann also, um wieviel ich den Copter zurückkippen muss. Das ist die Idee. Da ich allerdings auch noch nie einen Copter gebaut habe, sondern das alles nur aus äquivalenten Fragestellungen aus der CAD Programmierung kenne, klinke ich mich hier aus. (denn ich hätte das für mich überhaupt nicht über Quaternionen gelöst, sondern meine bewährten Matrizen angewendet. Mit denen kenn ich mich besser aus, auch wenn sie etwas mehr Rechenaufwand bedeuten und mathematisch nicht so elegant sind :-) Allerdings muss ich mich schon fragen, was das für eine Inertial-Plattform ist, von der du einen Quaternion bekommst? Und warum kannst du nicht damit umgehen, wenn du einen Quadrocopter bauen willst.
Wow, vielen vielen Dank! Alles, was ich mache, sind nur Hobbyprojekte. Habe mit ein paar LEDs angefangen, dann versucht die Wordclock in Selbstarbeit nachzubauen dann eine Wetterstation und dann habe ich mich mit immer mehr Sachen beschäftigt. Auch wenn ich quasi mit jedem Projekt das Rad neu erfinde (es gibt ja schließlich z.B. für die Uhr oder auch Quadrocopter Anleitung), möchte ich es selbst schaffen. M.M.n. lerne ich so am meißten und mir macht es auch mehr Spaß. Meißtens komme ich mit dem Internet oder Büchern aus, wenn ich auf Probleme stoße aber manchmal muss ich dann auch nachfragen. Daher kenne ich mich auch noch nicht so gut mit Quaternionen aus. ;) Due Quaternionen stammen übrigens von dem MPU6050. Der hat einen DMP eingebaut, der die Werte vom ACC und Gyro bereits fusioniert und das tilten und shiften bereits rausrechnet. Als Ausgabe kann man sich dann Quaternionen anzeigen lassen. Das ermöglicht mir den Quadrocopter auf einer relativ kleinen Hardware aufzubauen. Mit deinen letzten Anmerkungen hast du mir auf jeden Fall sehr geholfen. Konnte mir jetzt zu den einzelnen Themen die du angesprochen hast wieder genug Lesestoff zusammensuchen und ich weiß nun, wo ich weitermachen muss. :) Viele Grüße Dominik
Karl Heinz Buchegger schrieb: >> Steuere ich die Motoren so an, bis meine Quaternionen x+0i+0j+0k >> darstellen? > > Das wäre kontraproduktiv. Nur teilweise, dann schwebt er nämlich einfach in der Ausgangslage, hat aber keinen Folgeregler :) Man kann die Quaternionen übrigens direkt zurückführen ohne in Eulerwinkel umzurechnen. Das wird wohl gerne bei Satelliten gemacht, geht aber auch bei anderen Vehikeln (Achtung, 1. englisch 2. mathematisch, Formel 20 ist das eigentliche Regelgesetz): http://flash.lakeheadu.ca/~tayebi/ieee_tcst_2006.pdf Im Prinzip verwendest du den Vektorteil des Quaternions als Solldrehraten. Wenn du nicht nur eine reine Stabilisierung in die Nulllage (wird auf Dauer etwas langweilig), sondern einen Folgeregler haben willst, musst du noch das Fehlerquaternion (im Prinzip "nur" ne Quaternionenmultiplikation) zwischen Soll- und Istlage berechnen. D.h. du muss die Sollwinkel von der Fernbedienung in ein Sollquaternion umrechnen und dann das Fehlerquaternion bilden. Das Fehlerquaternion (also effektiv der Unterschied zwischen Soll- und Istlage) muss dann auf (1,0,0,0) geregelt werden. Die eigentlichen Berechnungen sind relativ einfach, aber die Theorie & Mathematik dahinter kann etwas kompliziert werden. Wenn man Eulerwinkel nutzt, ist es meist etwas anschaulicher als mit Quaternionen. Wobei man sich auch die Quaternionen noch halbwegs vorstellen kann: Der Vektorteil (Imaginärteile) beschreibt die Achse, um die gedreht werden soll und der Realteil den Drehwinkel um eben diese Achse. Noch ein Hinweis: Beim Umwandeln zwischen Quaternion und Eulerwinkeln braucht man diverse Trigonometrie-Funktionen (sin/cos), je nach verwendetem Prozessor kann das etwas eng werden. Das hier ist übrigens das im Flugzeugbau normalweise verwendete körperfeste Koordinatensysteme: x: positiv nach vorne y: positiv nach rechts z: positiv nach unten Noch was zur MPU6050: Wo kommt da denn ein Quaternion raus? Im Datenblatt steht jedenfalls nichts dazu drin. Es wird zwar ein "Digital Motion Processor" angepriesen, aber was das genau ist und wie man ihn anspricht steht nirgendwo.
P. M. schrieb: > Karl Heinz Buchegger schrieb: >> 'Decomposition' (sorry, ich weiß das >> deutsche Wort dafür nicht) > > Was könnte es wohl sein? Zerlegung :-) ...oder Entwicklung.
Hier ein Artikel zu Quadrocopter und Quaternion: www.rt.mw.tum.de/fileadmin/w00bhf/www/publikationen/2011_Buhl_at.pdf Gibt es einfachere Artikel zur Einführung in das Thema?
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.