def eul(self, unit='rad', flip=False): r""" SO(3) or SE(3) as Euler angles :param unit: angular units: 'rad' [default], or 'deg' :type unit: str :return: 3-vector of Euler angles :rtype: numpy.ndarray, shape=(3,) ``x.eul`` is the Euler angle representation of the rotation. Euler angles are a 3-vector :math:`(\phi, \theta, \psi)` which correspond to consecutive rotations about the Z, Y, Z axes respectively. If ``len(x)`` is: - 1, return an ndarray with shape=(3,) - N>1, return ndarray with shape=(N,3) :seealso: :func:`~spatialmath.pose3d.SE3.Eul`, :func:`~spatialmath.base.transforms3d.tr2eul` :SymPy: not supported """ if len(self) == 1: return base.tr2eul(self.A, unit=unit) else: return np.array([base.tr2eul(x, unit=unit) for x in self.A]).T
def eul(self, unit='deg'): """ Extract Euler angles from SO(3) rotation :param self: rotation or pose :type angles: SO3, SE3 instance :param unit: angular units: 'rad' [default], or 'deg' :type unit: str :return: 3-vector of Euler angles :rtype: numpy.ndarray, shape=(3,) ``R.eul`` is the Euler angle representation of the rotation. Euler angles are a 3-vector :math:`(\phi, \theta, \psi)` which correspond to consecutive rotations about the Z, Y, Z axes respectively. ``R.eul`` returns an: - ndarray with shape=(3,), if len(R) == 1 - ndarray with shape=(N,3), if len(R) = N > 1 :seealso: :func:`~spatialmath.pose3d.SE3.Eul`, ::func:`spatialmath.base.transforms3d.tr2eul` """ if len(self) == 1: return tr.tr2eul(self.A, unit=unit) else: return np.array([tr.tr2eul(x, unit=unit) for x in self.A]).T
def eul(self, unit='rad', order='zyx'): return tr.tr2eul(self.R, unit=unit)