Calculer la différence entre Pose et Transform avec ROS en Python

Un groupe de fonctions qui calculent les différences dans Geometry_msgs en utilisant Python

** C'était une réinvention de la roue, mais j'ai dû l'écrire moi-même parce que je ne trouvais pas de package facile à utiliser. ** ** Nous prévoyons d'ajouter les fonctions nécessaires dès leur apparition.

S'il y a une demande, gérez-la avec Git.

liste

--Fonctions liées à Geometry_msgs.msg.Transform () --transform2homogeneousM: Transforme le message de transformation en une matrice homogène --homogeneous2transform: Reconvertissez la matrice de transformation homogène en un message de transformation --transform_diff (tf1, tf2) : affiche la différence entre les deux messages de transformation sous forme de message de transformation --Fonctions liées à Geometry_msgs.msg.Pose () --pose2homogeneousM: convertit un message de pose en une matrice homogène --homogeneous2pose: Reconvertissez la matrice de conversion homogène en un message de pose --pose_diff (p1, p2) : affiche la différence entre deux messages de pose sous forme de message de pose

code

import rospy
import geometry_msg
import tf

# Transform to homogeneous matrix
def transform2homogeneousM(tfobj):
    #Il dit Quat à euler sxyz, mais l'ordre de XYZW est bien. N'est-ce pas un peu déroutant?
    tfeul= tf.transformations.euler_from_quaternion([tfobj.rotation.x,tfobj.rotation.y,tfobj.rotation.z,tfobj.rotation.w],axes='sxyz')
    #Description du montant de la traduction
    tftrans = [ tfobj.translation.x,tfobj.translation.y,tfobj.translation.z]
    tfobjM = tf.transformations.compose_matrix(angles=tfeul,translate=tftrans)
    # return
    return  tfobjM

def homogeneous2transform(Mat):
    scale, shear, angles, trans, persp = tf.transformations.decompose_matrix(Mat)
    quat = tf.transformations.quaternion_from_euler(angles[0],angles[1],angles[2])
    tfobj = geometry_msgs.msg.Transform()
    tfobj.rotation.x = quat[0]
    tfobj.rotation.y = quat[1]
    tfobj.rotation.z = quat[2]
    tfobj.rotation.w = quat[3]
    tfobj.translation.x = trans[0]
    tfobj.translation.y = trans[1]
    tfobj.translation.z = trans[2]
    return tfobj
    
# Transform diff tf1 to 2

def transform_diff(tf1,tf2):
    tf1M = transform2homogeneousM(tf1)
    tf2M = transform2homogeneousM(tf2)
    return  homogeneous2transform(tf2M.dot(tf.transformations.inverse_matrix(tf1M)))
    

#Faire également une version Pose
def pose2homogeneousM(poseobj):
    try:
        #Il dit Quat à euler sxyz, mais l'ordre de XYZW est bien. N'est-ce pas un peu déroutant?
        tfeul= tf.transformations.euler_from_quaternion([poseobj.orientation.x,poseobj.orientation.y,poseobj.orientation.z,poseobj.orientation.w],axes='sxyz')
        #Description du montant de la traduction
        tftrans = [ poseobj.position.x,poseobj.position.y,poseobj.position.z]
        poseobjM = tf.transformations.compose_matrix(angles=tfeul,translate=tftrans)
        return poseobjM
    except:
        print("Input must be a pose object!")

        
def homogeneous2pose(Mat):
    scale, shear, angles, trans, persp = tf.transformations.decompose_matrix(Mat)
    quat = tf.transformations.quaternion_from_euler(angles[0],angles[1],angles[2])
    poseobj = geometry_msgs.msg.Pose()
    poseobj.orientation.x = quat[0]
    poseobj.orientation.y = quat[1]
    poseobj.orientation.z = quat[2]
    poseobj.orientation.w = quat[3]
    poseobj.position.x = trans[0]
    poseobj.position.y = trans[1]
    poseobj.position.z = trans[2]
    return poseobj

def pose_diff(p1,p2):
    p1M = pose2homogeneousM(p1)
    p2M = pose2homogeneousM(p2)
    return  homogeneous2pose(p2M.dot(tf.transformations.inverse_matrix(p1M)))

Recommended Posts

Calculer la différence entre Pose et Transform avec ROS en Python
Calculer et afficher le poids standard avec python
Différence d'authenticité entre Python et JavaScript
Différences entre Ruby et Python dans la portée
Différences entre la syntaxe Python et Java
Gérer les "années et mois" en Python
Différences de multithreading entre Python et Jython
Calculer et dessiner des diagrammes Boronoi bornés (fermés) en Python
Précautions lors du traitement du type ROS MultiArray en Python
Démarrer le calcul numérique avec Python (avec Homebrew et pip)
Programmation avec Python et Tkinter
Python et matériel - Utilisation de RS232C avec Python -
Exploitez LibreOffice avec Python
Grattage avec chromedriver en python
Gérer les sons en Python
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Tweet avec image en Python
Combiné avec ordinal en Python
Pile et file d'attente en Python
python avec pyenv et venv
Unittest et CI en Python
Fonctionne avec Python et R
Veriloggen et cocotb sont utilisés pour concevoir et tester Verilog en Python uniquement.
Calculez des millions de chiffres dans la racine carrée de 2 avec python
Jouez avec les archives de Mastodon dans les réponses et les favoris de Python 2 Count
Installez CaboCha dans l'environnement Ubuntu et appelez-le avec Python.
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Communiquez avec FX-5204PS avec Python et PyUSB
Briller la vie avec Python et OpenCV
Traitement du signal en Python (1): transformée de Fourier
Robot fonctionnant avec Arduino et python
Tester avec des nombres aléatoires en Python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Différence entre list () et [] en Python
Réseau neuronal avec OpenCV 3 et Python 3
Différence entre == et est en python
Scraping avec Node, Ruby et Python
GOTO en Python avec Sublime Text 3
Travailler avec LibreOffice en Python: import
Scraping avec Selenium en Python (Basic)
Grattage avec Python, Selenium et Chromedriver
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Grattage avec Python et belle soupe
Manipuler des fichiers et des dossiers en Python
Calculer la perte de propagation de l'espace libre en Python
Numer0n avec des objets fabriqués avec Python
Ouvrez UTF-8 avec BOM en Python
Affectations et modifications des objets Python
Essayez de calculer Trace en Python
Encodage et décodage JSON avec python
Différence entre Python, stftime et strptime
Utiliser rospy avec virtualenv dans Python3
Vérifiez et déplacez le répertoire en Python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Dessinez une illusion d'aquarelle avec détection des contours en Python3 et openCV3
Chiffrement avec Python: IND-CCA2 et RSA-OAEP
Hashing de données en R et Python
Lire et écrire NetCDF avec Python
Utiliser Python mis en pyenv avec NeoVim