from_exp_coords#
- classmethod RigidTransform.from_exp_coords(cls, exp_coords)#
Initialisierung aus exponentiellen Koordinaten der Transformation.
Dies implementiert die Exponentialabbildung, die 6-dimensionale reelle Vektoren auf SE(3) abbildet.
Ein Vektor exponentieller Koordinaten besteht aus 6 Elementen
[rx, ry, rz, vx, vy, vz]. Die ersten 3 kodieren die Rotation (und bilden einen Rotationsvektor, der inRotation.from_rotvecverwendet wird) und die letzten 3 kodieren die Translation (und bilden einen Translationsvektor für reine Translationen). Die Exponentialabbildung kann als MatrixexponentialT = exp(tau)ausgedrückt werden, wobeiTeine 4x4-Matrix ist, die eine starre Transformation darstellt, undtaueine 4x4-Matrix ist, die aus den Elementen eines Vektors exponentieller Koordinaten gebildet wird.tau = [ 0 -rz ry vx] [ rz 0 -rx vy] [-ry rx 0 vz] [ 0 0 0 1]
- Parameter:
- exp_coordsarray_like, Form (N, 6) oder (6,)
Ein einzelner Vektor exponentieller Koordinaten oder ein Stapel von Vektoren exponentieller Koordinaten. Die erwartete Reihenfolge der Komponenten ist
[rx, ry, rz, vx, vy, vz]. Die ersten 3 Komponenten kodieren die Rotation und die letzten 3 die Translation.
- Rückgabe:
- transform
RigidTransformInstanz Eine einzelne Transformation oder ein Stapel von Transformationen.
- transform
Beispiele
>>> from scipy.spatial.transform import RigidTransform as Tf >>> import numpy as np
Erstellung aus einem einzelnen 6D-Vektor exponentieller Koordinaten
>>> tf = Tf.from_exp_coords([ ... -2.01041204, -0.52983629, 0.65773501, ... 0.10386614, 0.05855009, 0.54959179]) >>> tf.as_matrix() array([[0.76406621, 0.10504613, -0.63652819, -0.10209961], [0.59956454, -0.47987325, 0.64050295, 0.40158789], [-0.2381705, -0.87102639, -0.42963687, 0.19637636], [0., 0., 0., 1.]]) >>> tf.single True
Ein Vektor von Nullen repräsentiert die Identitätstransformation
>>> tf = Tf.from_exp_coords(np.zeros(6)) >>> tf.as_matrix() array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]])
Die letzten drei Zahlen kodieren die Translation. Wenn die ersten drei Zahlen Null sind, können die letzten drei Komponenten als Translation interpretiert werden
>>> tf_trans = Tf.from_exp_coords([0, 0, 0, 4.3, -2, 3.4]) >>> tf_trans.translation array([4.3, -2., 3.4])
Die ersten drei Zahlen kodieren die Rotation als Rotationsvektor
>>> tf_rot = Tf.from_exp_coords([0.5, 0.3, 0.1, 0, 0, 0]) >>> tf_rot.rotation.as_rotvec() array([0.5, 0.3, 0.1])
Die Kombination von Translation und Rotation bewahrt den Rotationsvektor, ändert aber die letzten drei Komponenten, da diese Translation und Rotation kodieren
>>> (tf_trans * tf_rot).as_exp_coords() array([0.5, 0.3, 0.1, 3.64305882, -1.25879559, 4.46109265])