klampt.math.se3 module
Operations for rigid transformations in Klamp’t. All rigid
transformations are specified in the form T=(R,t)
,
where R is a 9-list specifying the entries of the rotation matrix in column
major form, and t is a 3-list specifying the translation vector.
Primarily, this form was chosen for interfacing with C++ code. C++ methods
on objects of the form T = X.getTransform()
will return se3 element proper.
Conversely, X.setTransform(*T)
will set the rotation and translation of
some transform.
Extracting the so3 portion of the transform is simply T[0]. Extracting the translation vector is simply T[1].
Applying an se3 element to a point p is apply(T,p)
. Applying it to a
directional quantity d
is either apply_rotation(T,d)
or
so3.apply(T[0],d)
.
To flatten into a single array, use klampt.model.getConfig(T)
, which is
equivalent to T[0] + T[1]
. To read and write to disk in a way that is
compatible with other Klamp’t IO routines, use klampt.io.loader.write_se3()
and klampt.io.loader.read_se3()
.
- klampt.math.se3.identity()[source]
Returns the identity transformation.
- Return type:
Tuple
[Sequence
[float
],Sequence
[float
]]
- klampt.math.se3.inv(T)[source]
Returns the inverse of the transformation.
- Return type:
Tuple
[Sequence
[float
],Sequence
[float
]]
- klampt.math.se3.apply(T, point)[source]
Applies the transform T to the given point
- Return type:
Sequence
[float
]
- klampt.math.se3.apply_rotation(T, point)[source]
Applies only the rotation part of T
- Return type:
Sequence
[float
]
- klampt.math.se3.rotation(T)[source]
Returns the 3x3 rotation matrix corresponding to T’s rotation
- Return type:
Sequence
[float
]
- klampt.math.se3.from_rotation(mat)[source]
Returns a transformation T corresponding to the 3x3 rotation matrix mat
- Return type:
Tuple
[Sequence
[float
],Sequence
[float
]]
- klampt.math.se3.translation(T)[source]
Returns the translation vector corresponding to T’s translation
- Return type:
Sequence
[float
]
- klampt.math.se3.from_translation(t)[source]
Returns a transformation T that translates points by t
- Return type:
Tuple
[Sequence
[float
],Sequence
[float
]]
- klampt.math.se3.homogeneous(T)[source]
Returns the 4x4 homogeneous transform corresponding to T.
- Return type:
List
[List
[float
]]
- klampt.math.se3.from_homogeneous(mat)[source]
Returns an se3 transform corresponding to the 4x4 homogeneous transform matrix mat.
- Return type:
Tuple
[Sequence
[float
],Sequence
[float
]]
- klampt.math.se3.ndarray(T)[source]
Returns the 4x4 homogeneous transform corresponding to T.
- Return type:
- klampt.math.se3.from_ndarray(mat)[source]
Returns an se3 transform from a 4x4 Numpy array representing the homogeneous transform.
- Return type:
Tuple
[Sequence
[float
],Sequence
[float
]]
- klampt.math.se3.mul(T1, T2)[source]
Composes two transformations.
- Return type:
Tuple
[Sequence
[float
],Sequence
[float
]]
- klampt.math.se3.distance(T1, T2, Rweight=1.0, tweight=1.0)[source]
Returns a distance metric between the two transformations. The rotation distance is weighted by Rweight and the translation distance is weighted by tweight
- Return type:
float
- klampt.math.se3.error(T1, T2)[source]
Returns a 6D “difference vector” that describes how far T1 is from T2. More precisely, this is the (stacked) Lie derivative (w,v).
Fun fact: the error is related to the derivative of interpolate(T2,T1,u) at u=0 by d/du interpolate(T2,T1,0) = (mul(cross_product(w),R2),v).
You can also recover T1 from (w,v) via T1 = (mul(from_moment(w),T2[0]), vectorops.add(v,T2[1])).
- Return type:
List
[float
]