pypose.se3¶
- pypose.se3 = functools.partial(<class 'pypose.lietensor.lietensor.LieTensor'>, ltype=<pypose.lietensor.lietensor.se3Type object>)¶
Alias of se3 type
LieTensor.- Parameters:
data (
Tensor, orlist, or ‘int…’) –A
Tensorobject, or constructing aTensorobject fromlist, which defines tensor data (see below), or from ‘int…’, which defines tensor shape.The shape of
Tensorobject must be(*, 6), where*is empty, one, or more batched dimensions (thelshapeof this LieTensor), otherwise error will be raised.
Internally, se3 LieTensors are stored by concatenating the “velocity” vector with the axis-angle representation of the rotation:
\[\mathrm{data}[*, :] = [\tau_x, \tau_y, \tau_z, \delta_x, \delta_y, \delta_z], \]where \(\begin{pmatrix} \tau_x & \tau_y & \tau_z \end{pmatrix}^T = \mathbf{J}^{-1} \begin{pmatrix} t_x & t_y & t_z \end{pmatrix}^T\) is the product between the left Jacobian inverse (of SO3’s logarithm map) and the translation vector, and \(\begin{pmatrix} \delta_x & \delta_y & \delta_z \end{pmatrix}^T\) is the axis-angle vector as in
pypose.so3. More details go topypose.Log()withSE3_typeinput.Examples
>>> pp.se3(torch.randn(2, 6)) se3Type LieTensor: tensor([[-0.8710, -1.4994, -0.2843, 1.0185, -0.3932, -0.4839], [-0.4750, -0.4804, -0.7083, -1.8141, -1.4409, -0.3125]]) >>> pp.se3([0, 0, 0, 0, 0, 1]) se3Type LieTensor: tensor([0., 0., 0., 0., 0., 1.])
If
datais tensor-like, the last dimension should correspond to the 6 elements of the above embedding.Note
It is not advised to construct se3 Tensors by specifying storage sizes with ‘
int…’, which does not initialize data.Consider using
pypose.randn_se3orpypose.identity_se3instead.See
pypose.Exp,pypose.Invfor implementations of relevant operations.