ls_mlkit.util.manifold.so3 module

SO(3): Special Orthogonal Group

class ls_mlkit.util.manifold.so3.SO3(*args, **kwargs)[source]

Bases: LieGroup

SO(3): Special Orthogonal Group

exp(p: Tensor = None, v: Tensor = None) Tensor[source]

Exponential map $$exp_p(v)$$ map a point in tangent space $$T_p M$$ to a point on the manifold $$M$$ $$exp_p(v) = p cdot exp(p^{-1} v)$$ if p is None, it will be set to the identity matrix

grad(f: Callable, p: Tensor) Tensor[source]

Riemannian gradient of f at point p on SO(3)

$$ p cdot skew(p^{-1} nabla_p f(p)) $$

Parameters:
  • f – Callable[[Tensor], Tensor], scalar function of p

  • p – (…, 3, 3) point on SO(3)

Returns:

(…, 3, 3) gradient in the tangent space T_p SO(3)

identity(macro_shape: Tuple[int, ...] = ())[source]

Identity in Group

inverse(p)[source]

Inverse in Group

left_translation(g, h)[source]

$$L_g(h) = g cdot h$$

log(p: Tensor = None, q: Tensor = None) Tensor[source]

Logarithm map $$log_p(q)$$ map a point on the manifold $$M$$ to a point in tangent space $$T_p M$$ $$log_p(q)=plog(p^{-1} q)$$ if p is None, it will be set to the identity matrix

metric(p: Tensor, v: Tensor, w: Tensor) Tensor[source]

Inner product $$<v, w>_p: mathfrak{so}(3) times mathfrak{so}(3) to mathbb{R}$$ is the inner product at point $$p$$ $$ <v, w>_p = frac{1}{2} text{Tr}(v^T w) $$

multiply(p, q)[source]

Multiply in Group

random_tangent(p: Tensor, random_type: str = 'gaussian', std: float = 1.0) Tensor[source]

Sample noise from $$T_p M$$