pypose.euler2SO3¶
- pypose.euler2SO3(euler)[source]¶
Convert batched Euler angles (roll, pitch, and yaw) to SO3Type LieTensor.
- Parameters
euler (Tensor) – the euler angles in radians to convert.
- Returns
the converted SO3Type LieTensor.
- Return type
- Shape:
Input:
(*, 3)
Output:
(*, 4)
\[{\displaystyle \mathbf{y}_i={ \begin{bmatrix}\, \sin(\alpha_i)\cos(\beta_i)\cos(\gamma_i) - \cos(\alpha_i)\sin(\beta_i)\sin(\gamma_i)\\ \cos(\alpha_i)\sin(\beta_i)\cos(\gamma_i) + \sin(\alpha_i)\cos(\beta_i)\sin(\gamma_i)\\ \cos(\alpha_i)\cos(\beta_i)\sin(\gamma_i) - \sin(\alpha_i)\sin(\beta_i)\cos(\gamma_i)\\ \cos(\alpha_i)\cos(\beta_i)\cos(\gamma_i) + \sin(\alpha_i)\sin(\beta_i)\sin(\gamma_i) \end{bmatrix}}}, \]where the \(i\)-th item of input \(\mathbf{x}_i = [\alpha_i, \beta_i, \gamma_i]\) are roll, pitch, and yaw, respectively.
Note
The last dimension of the input tensor has to be 3. The Euler angle takes the rotation sequence of x (roll), y (pitch), then z (yaw) axis (counterclockwise).
Warning
Any given rotation has two possible quaternion representations. If one is known, the other is just the negative of all four terms. This function only returns one of them.
Examples
>>> input = torch.randn(2, 3, requires_grad=True, dtype=torch.float64) >>> pp.euler2SO3(input) SO3Type LieTensor: tensor([[-0.4873, 0.1162, 0.4829, 0.7182], [ 0.3813, 0.4059, -0.2966, 0.7758]], dtype=torch.float64, grad_fn=<AliasBackward0>)
See
euler
for more information.