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