scipy.spatial.transform.RigidTransform.

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 in Rotation.from_rotvec verwendet wird) und die letzten 3 kodieren die Translation (und bilden einen Translationsvektor für reine Translationen). Die Exponentialabbildung kann als Matrixexponential T = exp(tau) ausgedrückt werden, wobei T eine 4x4-Matrix ist, die eine starre Transformation darstellt, und tau eine 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:
transformRigidTransform Instanz

Eine einzelne Transformation oder ein Stapel von Transformationen.

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])