scipy.spatial.transform.RigidTransform.

from_exp_coords#

метод класса 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, форма (N, 6) или (6,)

Одиночный вектор экспоненциальных координат или набор векторов экспоненциальных координат. Ожидаемый порядок компонентов: [rx, ry, rz, vx, vy, vz]. Первые 3 компонента кодируют вращение, а последние 3 — перемещение.

Возвращает:
преобразоватьRigidTransform экземпляр

Одиночное преобразование или стек преобразований.

Примеры

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