Frage:
Ein geeigneter Weg, um die Roll-, Nick- und Gierwerte zu erhalten
muyustan
2019-07-26 22:59:11 UTC
view on stackexchange narkive permalink

TL, DR: Mit welcher Methode (in Bezug auf Sensoren und Algorithmus) können Sie jederzeit die Roll- und Nickwinkel eines Flugzeugs ermitteln.

Ich plane, ein Hobbyflugzeug zu bauen. Ich bin so verwirrt darüber, welche Art von Sensoren ich verwenden soll und wie ich sie verwenden soll, um die Roll-, Nick- und Gierwinkel des Flugzeugs zu ermitteln.

Ich glaube, ich habe auch einige Probleme beim Verständnis des Konzepts . Ich betrachte diese P-, R- und Y-Winkel ähnlich wie die x-, y- und z-Koordinaten, als ob sie die Haltung eines Körpers beschreiben könnten. Wenn etwas in der folgenden Liste "Unsinn" -Argumente enthält, klären Sie mich bitte auch darüber auf.

Ich möchte jederzeit wissen können:

  1. was ist der Neigungswinkel des Flugzeugs, dh wie viel Grad seine Nase von der horizontalen Ebene der Erde weg zeigt.
  2. Was ist der Gierwinkel, dh in welche Richtung (Norden, Osten usw.) ist das Flugzeug Zeigen durch.
  3. Was ist der Rollwinkel, dh was ist der Winkel zwischen der Körperoberfläche des Flugzeugs (Flügel zu Flügel x Heck zu Kopfoberfläche) und der horizontalen Ebene der Erde / Himmel.
  4. ol>

    In einigen Quellen ist etwas los, was die Wichtigkeit der Reihenfolge der Anwendung von Rollen, Neigen und Gieren betrifft. Aber ich kann nicht verstehen, warum dies zusammenhängt.

    Ich habe Beschleunigungsmesserwerte verwendet, indem ich sie in einige Formeln im Internet eingegeben habe (diese arktangenten Formeln, die jeder verwendet, aber niemand gut erklärt), um die Roll- und Nickwerte zu erhalten . Ich konnte jedoch nicht verstehen, wie ich sie manipulieren soll, um meine Anforderungen zu erfüllen (unterschiedliche Achsenausrichtungen des Sensors).

    Ich habe auch grundlegende Kenntnisse darüber, was ein Gyroskop ist.

    Ich habe ein MPU6050 (Beschleunigungsmesser + Gyroskop).

    Vielen Dank im Voraus.

    Ps: Mein Ziel ist es, einen Quadcopter zu bauen, aber ich denke, um diese Konzepte zu verstehen, ein Standardflugzeugmodell mit festem Flügel .

Einer antworten:
tttapa
2019-07-27 07:07:50 UTC
view on stackexchange narkive permalink

In einigen Quellen ist etwas los, was die Wichtigkeit der Reihenfolge der Anwendung von Rollen, Neigen und Gieren betrifft. Aber ich kann nicht verstehen, warum dies so ist.

Nehmen Sie Ihre rechte Hand: Zeigen Sie mit dem Daumen nach oben, dem Zeigefinger von Ihnen weg und dem Mittelfinger nach links. Sie haben jetzt ein rechtshändiges Koordinatensystem: Ihr Daumen ist die x-Achse, Ihr Zeigefinger die y-Achse und Ihr Mittelfinger die z-Achse.

Drehen Sie zuerst + 90 ° um die x-Achse (Daumen). Ihr Zeigefinger zeigt jetzt nach links und Ihr Mittelfinger zu Ihnen. Drehen Sie anschließend + 90 ° um die y-Achse (Zeigefinger). Ihr Daumen zeigt jetzt von Ihnen weg, Ihr Zeigefinger nach links und Ihr Mittelfinger nach oben.

Gehen Sie nun zurück in die Ausgangsposition und wenden Sie die gleichen zwei Umdrehungen in einer anderen Reihenfolge an die y-Achse und dann die x-Achse: + 90 ° um die y-Achse drehen (Zeigefinger). Ihr Daumen zeigt jetzt nach rechts, Ihr Zeigefinger von Ihnen weg und Ihr Mittelfinger nach oben. Drehen Sie anschließend + 90 ° um die x-Achse (Daumen). Ihr Daumen zeigt jetzt nach rechts, Ihr Zeigefinger nach oben und Ihr Mittelfinger zu Ihnen.

Dies unterscheidet sich vom letzten Ergebnis: Die Reihenfolge der Drehung ist wichtig.

Ich habe Beschleunigungsmesserwerte verwendet, indem ich sie in einige Formeln im Internet eingegeben habe (diese arktangenten Formeln, die jeder verwendet, aber niemand gut erklärt).

Wenn sich das Flugzeug mit einer konstanten Geschwindigkeit bewegt, der Beschleunigungsmesser misst nur die Beschleunigung aufgrund der Schwerkraft, die ein Vektor ist, der genau nach unten zeigt (0, 0, -g) im globalen Koordinatensystem. Dies gilt unabhängig von der Ausrichtung des Sensors immer.
Wenn der Sensor perfekt ausgerichtet ist, ist das lokale Koordinatensystem des Sensors auf das globale Koordinatensystem ausgerichtet, sodass der Sensor auch (0, 0, -g) misst.

Wenn der Sensor gekippt wird, hat der gemessene Vektor auch eine x- und eine y-Komponente.
Stellen Sie sich zur Vereinfachung den Fall vor, in dem der Sensor um die positive y-Achse geneigt ist.
Der Sensor misst jetzt eine x-Komponente sowie eine az-Komponente: (x, 0, -z).

Wie Sie dem folgenden Bild entnehmen können, ist der Drehwinkel θ = atan2 (x, z) .

gravity acceleration vector Der schwarze Pfeil ist die Erdbeschleunigung. und die roten und blauen Pfeile sind die x- und z-Achse des Koordinatensystems des (gekippten) Sensors.


Beschleunigungsmessermessungen sind jedoch nicht nützlich, um die Ausrichtung zu bestimmen, wenn der Sensor beschleunigt. weil dann der gemessene Vektor nicht mehr genau nach unten zeigt (im globalen Koordinatensystem).

Gyroskope messen die Winkelgeschwindigkeit. Durch die Integration der Winkelgeschwindigkeit erhalten Sie den Winkel.
Es gibt eine Einschränkung: Es ist unmöglich, genau zu integrieren, da wir nur Messungen zu diskreten Zeitpunkten durchführen. Dies bedeutet, dass wir so etwas wie die Euler-Methode verwenden müssen, die bekanntermaßen zu einer Drift der Orientierungsschätzung führt. Erschwerend kommt hinzu, dass die Messung verrauscht ist und dieses Rauschen ebenfalls integriert ist, was zu einem noch größeren Fehler führt.

Glücklicherweise können Sie beide unvollständigen Messungen mithilfe eines Sensors zu einer einzigen, besseren Orientierungsschätzung kombinieren Fusionsalgorithmus. Ich habe erfolgreich Sebastian Madgwicks Algorithmus für meinen Quadcopter verwendet.
Er verwendet die Messungen des Beschleunigungsmessers, um die Kreiseldrift zu minimieren.

Beachten Sie, dass dieser Algorithmus Quaternionen anstelle von Euler verwendet Winkel (Rollen, Neigen, Gieren), weil letztere unter kardanischer Verriegelung leiden und weil Quaternionen genealerweise weniger Rechenleistung erfordern.

Beachten Sie auch, dass Sie den Gierwinkel nicht mit dem Beschleunigungsmesser bestimmen können Machen Sie sich mit dieser Messung vertraut.

Es ist eine gute Idee, alle Ihre Berechnungen mit Quaternionen durchzuführen. Sie benötigen wahrscheinlich keine Euler-Winkel für Ihren Quadcopter, außer vielleicht zu Debugging-Zwecken.

Wenn Sie möchten, können Sie die Quaternion auch direkt aus dem Beschleunigungsvektor abrufen:

  Quaternion quaternionFromDirection (Vec3f v) {/ * * Formel: * q = cos (ϑ / 2) + sin (ϑ / 2) · (x · i + y · j + z · k) * wobei (xyz) ein Einheitsvektor ist, der die Achse darstellt, um die * der Körper ist gedreht; ϑ ist der Winkel, um den es gedreht wird. * * Quelle: * https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Using_quaternion_as_rotations * * Die Rotationsachse (x y z) kann berechnet werden, indem das normalisierte * Kreuzprodukt von (0 0 1) und der angegebene Vektor genommen werden. Der Drehwinkel * ϑ kann mit | A × B | ermittelt werden = | A || B | · sin (ϑ). * / // Überprüfen Sie zuerst den Randfall, in dem v == (0 0 z), d. H. Vertikal, wenn (v.x == 0 && v.y == 0) {1, 0, 0, 0} zurückgibt; // Berechne das Kreuzprodukt und seine Norm. Vec3f cross = {v.y, -v.x, 0}; float crossNorm = cross.norm (); cross / = crossNorm; // Berechne den Winkel ϑ. Gleitwinkel = std :: asin (crossNorm / v.norm ()); // Berechne die resultierende Quaternion. return {std :: cos (Winkel / 2), // std :: sin (Winkel / 2) * cross.x, // std :: sin (Winkel / 2) * cross.y, // std :: sin (Winkel / 2) * cross.z, //}; }  
Nun, was soll ich sagen, eine sehr gut erklärte Antwort. Danke vielmals.
Ein weiteres Rätsel für mich bezog sich auch auf etwas in Ihrer Antwort: Während die z-Achse nach oben zeigt und die xy-Ebene eben ist, gibt der Beschleunigungsmesser + g in der z-Komponente aus. Aber du hast es als -g erwähnt. Wie soll ich die Ausgabe eines Beschleunigungsmessers interpretieren? Wie wirkt die Gravitationsbeschleunigung oder die imaginäre Beschleunigung durch Normalkraft auf den Körper?
@muyustan Normalerweise füge ich beim Ablesen des Beschleunigungsmessers den entsprechenden Koordinaten nur Minuszeichen hinzu, sodass ich ein rechtshändiges Koordinatensystem habe, bei dem die z-Achse nach oben zeigt (die Schwerkraft nach unten zeigt).


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...