scipy.spatial.transform.RigidTransform.

from_exp_coords#

classmethod RigidTransform.from_exp_coords(cls, exp_coords)#

从变换的指数坐标初始化。

这实现了将 6 维实向量转换为 SE(3) 的指数映射。

指数坐标向量由 6 个元素 [rx, ry, rz, vx, vy, vz] 组成。前 3 个编码旋转(并形成 Rotation.from_rotvec 中使用的旋转向量),后 3 个编码平移(并形成纯平移的平移向量)。指数映射可以表示为矩阵指数 T = exp(tau),其中 T 是表示刚性变换的 4x4 矩阵, tau 是由指数坐标向量的元素组成的 4x4 矩阵

tau = [  0 -rz  ry vx]
      [ rz   0 -rx vy]
      [-ry  rx   0 vz]
      [  0   0   0  1]
参数:
exp_coordsarray_like, shape (N, 6) or (6,)

单个指数坐标向量或指数坐标向量的堆栈。组件的预期顺序为 [rx, ry, rz, vx, vy, vz]。前 3 个分量编码旋转,后 3 个分量编码平移。

返回:
transformRigidTransform 实例

单个变换或变换堆栈。

示例

>>> from scipy.spatial.transform import RigidTransform as Tf
>>> import numpy as np

从单个 6d 指数坐标向量创建

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

零向量表示单位变换

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

后三个数字编码平移。如果前三个数字为零,则后三个分量可以解释为平移

>>> tf_trans = Tf.from_exp_coords([0, 0, 0, 4.3, -2, 3.4])
>>> tf_trans.translation
array([4.3, -2., 3.4])

前三个数字将旋转编码为旋转向量

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

组合平移和旋转会保留旋转向量,但会更改后三个分量,因为它们编码平移和旋转

>>> (tf_trans * tf_rot).as_exp_coords()
array([0.5, 0.3, 0.1, 3.64305882, -1.25879559, 4.46109265])