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 个分量编码平移。
- 返回:
- transform
RigidTransform
实例 单个变换或变换堆栈。
- transform
示例
>>> 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])