Robotics StackExchange | Archived questions

rospy convert matrix to transform

How would I convert a 4x4 numpy matrix to (translation, quaternion) using tf (or some other package package) in python?

On the wiki for python tf, I found the method fromTranslationRotation, which converts (translation, quaternion) to numpy matrix. What's the method that does the inverse operation?

The context (though I'm not sure this is relevant) is to connect two tf trees.

/camera_1
    /ar_marker_1 

/camera_2
    /ar_marker_2

I can't easily measure the transform between camera_1 and camera_2, so I've placed AR markers where I can easily measure the transform between them, and one camera can see each marker. I know the transform between ar_marker_1 and ar_marker_2, but tf trees have to be connected by the root, so I've used matrices to compute the transform from ar_marker_1 to camera_2, but now I can't figure out how to publish that transform because it's a matrix, not a (translation, quaternion).

Asked by dinosaur on 2015-07-06 15:47:25 UTC

Comments

Here's a related question in c++: http://answers.ros.org/question/103411/4x4-transformation-matrix-to-tf-transform/

Asked by dinosaur on 2015-07-06 17:56:45 UTC

Answers

tf.transformations.decompose_matrix is able to get the translation, rotation and more from a matrix. Example usage:

    scale, shear, rpy_angles, translation_vector, perspective = \
        tf.transformations.decompose_matrix(transformation_matrix)

The source code is here.

Asked by dinosaur on 2015-07-06 17:54:30 UTC

Comments