J'ai écrit un code pour convertir quaternion en angle de graissage de type z-y-x avec Python

J'ai écrit un code pour convertir quaternion en angle de graissage de type z-y-x avec Python

J'ai dû calculer l'angle du graisseur z-y-x à partir du quaternion.

De plus, comme c'est une question qui doit être écrite en Python 2.7, vous ne pouvez pas en utiliser une pratique comme scipy.spatial.transform.Rotation.

Quand j'ai recherché la formule, j'ai trouvé un exemple de code C ++ sur Wikipedia.

Wikipedia / Quaternion to Euler Angles Conversion

Je l'ai écrit en Python

J'ai écrit le code Python 2.7 en me référant à l'exemple de code de Wikipedia.

import math
import numpy as np
from pyquaternion import Quaternion

def quaternion_to_euler_zyx(q):
    """
Quarternion z-y-Convertir en angle de graisseur de type X.

    Parameters
    ----------
    q : Quaternion
Quarternion(format pyquaternion)

    Returns
    -------
    np.array
        z-y-angle de graisseur basé sur x
    """

    # roll :rotation de l'axe x
    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 :rotation de l'axe y
    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 :rotation de l'axe z
    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)
    
    #Angle du graisseur
    retrun np.array([
        math.degrees(roll), 
        math.degrees(pitch), 
        math.degrees(yaw)
    ])

Bibliothèques dépendantes

numpy 1.16.6

C'est celui utilisé pour le calcul vectoriel. 1.16.6 semble être la dernière prise en charge de Python 2.7.

pyquaternion 0.9.5

J'utilise «pyquaternion» pour calculer Quaternion.

numpy-quaternion semble être plus compatible avec numpy, mais je n'ai pas pu l'installer dans l'environnement Python 2.7.

Scipy.spatial.transform.Rotation est facile pour Python 3 ou version ultérieure

Si vous utilisez scipy.spatial.transform.Rotation, vous pouvez l'écrire plus simplement.

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)

Cependant, scipy.spatial.transform.Rotation ne semble pas prendre en charge Python 2.7. Pardon.

à la fin

Je ne touche généralement que l'angle de graissage z-x-y d'Unity, donc le système z-y-x était assez confus.

En créant cet article, j'ai fait référence aux articles suivants. Merci beaucoup!

Recommended Posts

J'ai écrit un code pour convertir quaternion en angle de graissage de type z-y-x avec Python
J'ai écrit le code pour écrire le code Brainf * ck en python
J'ai écrit une fonction pour charger le script d'extension Git en Python
J'ai écrit un script pour extraire les liens de pages Web en Python
Un mémo que j'ai écrit un tri rapide en Python
Je veux créer une fenêtre avec Python
J'ai écrit une classe en Python3 et Java
J'ai écrit "Introduction à la vérification des effets" en Python
Je souhaite convertir une table convertie en PDF en Python en CSV
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
Convertir le code de maillage cubique en WKT en Python
Comment convertir / restaurer une chaîne avec [] en python
Je souhaite intégrer une variable dans une chaîne Python
Je veux écrire en Python! (2) Écrivons un test
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai créé un code pour convertir illustration2vec en modèle Keras
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
[Python] Création d'une méthode pour convertir la base en 1 seconde
J'ai écrit python en japonais
Convertir le code python 3.x en python 2.x
J'ai écrit du code Python pour créer un diagramme de dépendance de table (vue) (PlantUML) à partir de SQL
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
J'ai écrit rapidement un programme pour étudier la DI avec Python ①
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai écrit un script pour obtenir un site populaire au Japon
J'ai fait un chronomètre en utilisant tkinter avec python
Je veux pouvoir exécuter Python avec VS Code
Je veux ajouter un joli complément à input () en python
J'ai créé un script en Python pour convertir un fichier texte pour JSON (pour l'extrait d'utilisateur vscode)
Convertir Markdown en PDF en Python
J'ai écrit Fizz Buzz en Python
J'ai écrit la file d'attente en Python
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
J'ai écrit la pile en Python
J'ai essayé de transformer un fichier Python en un EXE (erreur de récursivité prise en charge)
J'ai essayé de mettre en œuvre un jeu de dilemme de prisonnier mal compris en Python
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
Faites une visite Euler non récursive en Python
Je veux imprimer dans la notation d'inclusion
J'ai fait un programme de gestion de la paie en Python!
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Convertir un fichier psd en png en Python
J'ai essayé d'implémenter PLSA dans Python 2
Je veux créer un environnement Python
Comment obtenir stacktrace en python
J'ai essayé d'implémenter ADALINE en Python
Je voulais résoudre ABC159 avec Python
J'ai essayé d'implémenter PPO en Python
Convertir de Markdown en HTML en Python
J'ai écrit Project Euler 1 en une seule ligne.
J'ai créé un outil de mot de passe en Python.
Convertir une URL absolue en URL relative en Python
J'ai créé une application Web en Python qui convertit Markdown en HTML
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
Remarque: [Python3] Convertissez datetime en chaîne dans le format de votre choix
J'étais accro à la création d'un environnement Python venv avec VS Code
Mayungo's Python Learning Episode 6: J'ai essayé de convertir une chaîne de caractères en nombre
[Python] J'ai écrit un code simple qui génère automatiquement AA (Ascii Art)
J'ai créé un outil CLI pour convertir les images de chaque répertoire en PDF