Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln

Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln

Ich musste den z-y-x-Ölerwinkel aus dem Quaternion berechnen.

Da es sich um eine Angelegenheit handelt, die in Python 2.7 geschrieben werden muss, können Sie außerdem keine praktische wie "scipy.spatial.transform.Rotation" verwenden.

Als ich die Formel nachgeschlagen habe, habe ich auf Wikipedia C ++ - Beispielcode gefunden.

Wikipedia / Quaternion to Euler Angles Conversion

Ich habe es in Python geschrieben

Ich habe den Python 2.7-Code unter Bezugnahme auf den Beispielcode von Wikipedia geschrieben.

import math
import numpy as np
from pyquaternion import Quaternion

def quaternion_to_euler_zyx(q):
    """
Quarternion z-y-In X-Typ-Ölerwinkel umrechnen.

    Parameters
    ----------
    q : Quaternion
Quarternion(Pyquaternion-Format)

    Returns
    -------
    np.array
        z-y-x-basierter Ölerwinkel
    """

    # roll :Drehung der x-Achse
    sinr_cosp = 2 * (q[0] * q[1] + q[2] * q[3])
    cosr_cosp = 1 - 2 * (q[1] * q[1] + q[2] * q[2])
    roll = math.atan2(sinr_cosp, cosr_cosp)

    # pitch :Drehung der y-Achse
    sinp = 2 * (q[0] * q[2] - q[3] * q[1])
    if math.fabs(sinp) >= 1:
        pitch = math.copysign(math.pi / 2, sinp)
    else:
        pitch = math.asin(sinp)

    # yaw :Drehung der Z-Achse
    siny_cosp = 2 * (q[0] * q[3] + q[1] * q[2])
    cosy_cosp = 1 - 2 * (q[2] * q[2] + q[3] * q[3])
    yaw = math.atan2(siny_cosp, cosy_cosp)
    
    #Ölerwinkel
    retrun np.array([
        math.degrees(roll), 
        math.degrees(pitch), 
        math.degrees(yaw)
    ])

Abhängige Bibliotheken

numpy 1.16.6

Dies ist diejenige, die für die Vektorberechnung verwendet wird. 1.16.6 scheint die neueste Version der Python 2.7-Unterstützung zu sein.

pyquaternion 0.9.5

Ich benutze "Pyquaternion", um Quaternion zu berechnen.

numpy-quaternion scheint besser mit numpy kompatibel zu sein, aber ich konnte es nicht in der Python 2.7-Umgebung installieren.

Scipy.spatial.transform.Rotation ist für Python 3 oder höher einfach

Wenn Sie "scipy.spatial.transform.Rotation" verwenden, können Sie es einfacher schreiben.

import numpy as np
from pyquaternion import Quaternion
from scipy.spatial.transform import Rotation as R

def quaternion_to_euler_zyx(q):
	r = R.from_quat([q[0], q[1], q[2], q[3]])
	return r.as_euler('zyx', degrees=True)

Scipy.spatial.transform.Rotation scheint Python 2.7 jedoch nicht zu unterstützen. Es tut uns leid.

schließlich

Normalerweise berühre ich nur den Z-x-y-Ölerwinkel von Unity, daher war das z-y-x-System ziemlich verwirrt.

Bei der Erstellung dieses Artikels habe ich auf die folgenden Artikel verwiesen. Vielen Dank!

Recommended Posts

Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts in Python geschrieben
Ich habe ein Skript geschrieben, um Webseiten-Links in Python zu extrahieren
Ein Memo, das ich schnell in Python geschrieben habe
Ich möchte mit Python ein Fenster erstellen
Ich habe eine Klasse in Python3 und Java geschrieben
Geschrieben "Einführung in die Effektüberprüfung" in Python
Ich möchte eine in Python in PDF konvertierte Tabelle wieder in CSV konvertieren
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
Konvertieren Sie kubischen Netzcode in Python in WKT
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe einen Code erstellt, um illustration2vec in ein Keras-Modell zu konvertieren
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde
Ich habe Python auf Japanisch geschrieben
Konvertieren Sie Python 3.x-Code in Python 2.x.
Ich habe Python-Code geschrieben, um ein Tabellen- (Ansichts-) Abhängigkeitsdiagramm (PlantUML) aus SQL zu erstellen
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Ich habe ein Skript geschrieben, um eine beliebte Seite in Japan zu bekommen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich möchte Python mit VS-Code ausführen können
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
Ich habe ein Skript in Python erstellt, um eine Textdatei für JSON zu konvertieren (für das vscode-Benutzer-Snippet).
Konvertieren Sie Markdown in Python in PDF
Ich habe Fizz Buzz in Python geschrieben
Ich habe die Warteschlange in Python geschrieben
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe den Stack in Python geschrieben
Ich habe versucht, eine Python-Datei in eine EXE-Datei zu verwandeln (Rekursionsfehler unterstützt)
Ich habe versucht, ein missverstandenes Gefangenendilemma in Python zu implementieren
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Führen Sie eine nicht rekursive Euler-Tour in Python durch
Ich möchte in der Einschlussnotation drucken
Ich habe ein Pay-Management-Programm in Python erstellt!
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
Konvertieren Sie die psd-Datei in Python in png
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich möchte eine Python-Umgebung erstellen
Wie bekomme ich Stacktrace in Python?
Ich habe versucht, ADALINE in Python zu implementieren
Ich wollte ABC159 mit Python lösen
Ich habe versucht, PPO in Python zu implementieren
In Python von Markdown in HTML konvertieren
Ich habe Project Euler 1 in einem Liner geschrieben.
Ich habe ein Passwort-Tool in Python erstellt.
Konvertieren Sie die absolute URL in eine relative URL in Python
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Hinweis: [Python3] Konvertiert datetime in eine Zeichenfolge in einem beliebigen Format
Ich war süchtig danach, eine Python-Venv-Umgebung mit VS Code zu erstellen
Mayungos Python Learning Episode 6: Ich habe versucht, eine Zeichenkette in eine Zahl umzuwandeln
[Python] Ich habe einen einfachen Code geschrieben, der automatisch AA generiert (Ascii Art).
Ich habe ein CLI-Tool erstellt, um Bilder in jedem Verzeichnis in PDF zu konvertieren