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
Tensor
object, or constructing aTensor
object fromlist
, which defines tensor data (see below), or from ‘int
…’, which defines tensor shape.The shape of
Tensor
object must be(*, 6)
, where*
is empty, one, or more batched dimensions (thelshape
of 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_type
input.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
data
is 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_se3
orpypose.identity_se3
instead.See
pypose.Exp
,pypose.Inv
for implementations of relevant operations.