Berechnen Sie Pose- und Transformationsunterschiede in Python mit ROS

Eine Gruppe von Funktionen, die die Differenz von Geometry_msgs mit Python berechnen

** Es war eine Neuerfindung des Rades, aber ich musste es selbst schreiben, weil ich kein einfach zu bedienendes Paket finden konnte. ** ** ** Wir planen, die erforderlichen Funktionen hinzuzufügen, sobald sie verfügbar sind.

Wenn Bedarf besteht, verwalten Sie es mit Git.

Aufführen

--Funktionen im Zusammenhang mit Geometry_msgs.msg.Transform () --transform2homogeneM: Transformiert die Transformationsnachricht in eine homogene Matrix --homogene2transform: Konvertiert die homogene Transformationsmatrix in eine Transformationsnachricht --transform_diff (tf1, tf2) : Gibt die Differenz zwischen den beiden Transformationsnachrichten als Transformationsnachricht aus --Funktionen im Zusammenhang mit Geometry_msgs.msg.Pose () --pose2homogeneM: Konvertiert eine Pose-Nachricht in eine homogene Matrix --homogene2pose: Konvertiert die homogene Konvertierungsmatrix in eine Pose-Nachricht --pose_diff (p1, p2) : Gibt die Differenz zwischen zwei Pose-Nachrichten als Pose-Nachricht aus

Code

import rospy
import geometry_msg
import tf

# Transform to homogeneous matrix
def transform2homogeneousM(tfobj):
    #Es sagt Quat zu euler sxyz, aber die Reihenfolge von XYZW ist in Ordnung. Ist es nicht ein bisschen verwirrend?
    tfeul= tf.transformations.euler_from_quaternion([tfobj.rotation.x,tfobj.rotation.y,tfobj.rotation.z,tfobj.rotation.w],axes='sxyz')
    #Beschreibung des Übersetzungsbetrags
    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)))
    

#Machen Sie auch eine Pose-Version
def pose2homogeneousM(poseobj):
    try:
        #Es sagt Quat zu euler sxyz, aber die Reihenfolge von XYZW ist in Ordnung. Ist es nicht ein bisschen verwirrend?
        tfeul= tf.transformations.euler_from_quaternion([poseobj.orientation.x,poseobj.orientation.y,poseobj.orientation.z,poseobj.orientation.w],axes='sxyz')
        #Beschreibung des Übersetzungsbetrags
        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

Berechnen Sie Pose- und Transformationsunterschiede in Python mit ROS
Berechnen Sie das Standardgewicht und zeigen Sie es mit Python an
Unterschied in der Authentizität zwischen Python und JavaScript
Unterschiede zwischen Ruby und Python im Umfang
Unterschiede zwischen Python- und Java-Syntax
Umgang mit "Jahren und Monaten" in Python
Unterschiede in der Multithread-Verarbeitung zwischen Python und Jython
Berechnen und zeichnen Sie begrenzte (geschlossene) Boronoi-Diagramme in Python
Vorsichtsmaßnahmen beim Umgang mit ROS MultiArray in Python
Starten Sie die numerische Berechnung mit Python (mit Homebrew und Pip).
Programmieren mit Python und Tkinter
Python und Hardware-Verwenden von RS232C mit Python-
Betreiben Sie LibreOffice mit Python
Schaben mit Chromedriver in Python
Umgang mit Sounds in Python
Scraping mit Selen in Python
Scraping mit Tor in Python
Tweet mit Bild in Python
Kombiniert mit Ordnungszahl in Python
Stapel und Warteschlange in Python
Python mit Pyenv und Venv
Unittest und CI in Python
Funktioniert mit Python und R.
Veriloggen und Cocotb werden nur zum Entwerfen und Testen von Verilog in Python verwendet.
Berechnen Sie mit Python Millionen von Stellen in der Quadratwurzel von 2
Spielen Sie mit Mastodons Archiv in Python 2 Count Antworten und Favoriten
Installieren Sie CaboCha in der Ubuntu-Umgebung und rufen Sie es mit Python auf.
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Leuchtendes Leben mit Python und OpenCV
Signalverarbeitung in Python (1): Fourier-Transformation
Roboter läuft mit Arduino und Python
Testen mit Zufallszahlen in Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Unterschied zwischen list () und [] in Python
Neuronales Netzwerk mit OpenCV 3 und Python 3
Unterschied zwischen == und ist in Python
Scraping mit Node, Ruby und Python
GOTO in Python mit erhabenem Text 3
Arbeiten mit LibreOffice in Python: Importieren
Scraping mit Selen in Python (Basic)
Scraping mit Python, Selen und Chromedriver
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
Kratzen mit Python und schöner Suppe
Bearbeiten Sie Dateien und Ordner in Python
Berechnen Sie den Verlust der freien Speicherplatzausbreitung in Python
Numer0n mit Elementen, die mit Python erstellt wurden
Öffnen Sie UTF-8 mit Stückliste in Python
Zuweisungen und Änderungen in Python-Objekten
Versuchen Sie, Trace in Python zu berechnen
JSON-Codierung und -Decodierung mit Python
Unterschied zwischen Python, Stftime und Strptime
Verwenden Sie rospy mit virtualenv in Python3
Überprüfen und verschieben Sie das Verzeichnis in Python
Hadoop-Einführung und MapReduce mit Python
[GUI in Python] PyQt5-Drag & Drop-
Zeichnen Sie eine Aquarellillusion mit Kantenerkennung in Python3 und openCV3
Verschlüsselung mit Python: IND-CCA2 und RSA-OAEP
Hashing von Daten in R und Python
Lesen und Schreiben von NetCDF mit Python
Verwenden Sie Python in pyenv mit NeoVim