symforce.geo.pose2 module

class Pose2(R=None, t=None)[source]

Bases: LieGroup

Group of two-dimensional rigid body transformations - R2 x SO(2).

The storage space is a complex (real, imag) for rotation followed by a position (x, y).

The tangent space is one angle for rotation followed by two elements for translation in the non-rotated frame.

For Lie group enthusiasts: This class is on the PRODUCT manifold. On this class, the group operations (e.g. compose and between) operate as you’d expect for a Pose or SE(2), but the manifold operations (e.g. retract and local_coordinates) operate on the product manifold SO(2) x R2. This means that:

  • retract(a, vec) != compose(a, from_tangent(vec))

  • local_coordinates(a, b) != to_tangent(between(a, b))

  • There is no hat operator, because from_tangent/to_tangent is not the matrix exp/log

If you need a type that has these properties in symbolic expressions, you should use Pose2_SE2. There is no runtime equivalent of Pose2_SE2, see the docstring on that class for more information.

Parameters:
Pose2T

alias of TypeVar(‘Pose2T’, bound=Pose2)

__init__(R=None, t=None)[source]

Construct from elements in SO2 and R2.

Parameters:
rotation()[source]

Accessor for the rotation component

Does not make a copy. Also accessible as self.R

Return type:

Rot2

position()[source]

Accessor for the position component

Does not make a copy. Also accessible as self.t

Return type:

Matrix21

classmethod storage_dim()[source]

Dimension of underlying storage

Return type:

int

to_storage()[source]

Flat list representation of the underlying storage, length of STORAGE_DIM. This is used purely for plumbing, it is NOT like a tangent space.

Return type:

List[float]

classmethod from_storage(vec)[source]

Construct from a flat list representation. Opposite of .to_storage().

Parameters:

vec (Sequence[float]) –

Return type:

Pose2

classmethod identity()[source]

Identity element such that compose(a, identity) = a.

Return type:

Pose2

compose(other)[source]

Apply the group operation with other.

Parameters:

other (Pose2) –

Return type:

Pose2

inverse()[source]

Group inverse, such that compose(a, inverse(a)) = identity.

Return type:

Pose2

classmethod tangent_dim()[source]

Dimension of the embedded manifold

Return type:

int

classmethod from_tangent(v, epsilon=0.0)[source]

Mapping from the tangent space vector about identity into a group element.

Parameters:
  • v (Sequence[float]) –

  • epsilon (float) –

Return type:

Pose2

to_tangent(epsilon=0.0)[source]

Mapping from this element to the tangent space vector about identity.

Parameters:

epsilon (float) –

Return type:

List[float]

storage_D_tangent()[source]

Note: generated from symforce/notebooks/storage_D_tangent.ipynb

Return type:

Matrix

tangent_D_storage()[source]

Note: generated from symforce/notebooks/tangent_D_storage.ipynb

Return type:

Matrix

retract(vec, epsilon=0.0)[source]

Apply a tangent space perturbation vec to self. Often used in optimization to update nonlinear values from an update step in the tangent space.

Implementation is simply compose(self, from_tangent(vec)). Conceptually represents “self + vec” if self is a vector.

Parameters:
  • self (Pose2) –

  • vec (Sequence[float]) –

  • epsilon (float) –

Return type:

Pose2

local_coordinates(b, epsilon=0.0)[source]

Computes a tangent space perturbation around self to produce b. Often used in optimization to minimize the distance between two group elements.

Implementation is simply to_tangent(between(self, b)). Tangent space perturbation that conceptually represents “b - self” if self is a vector.

Parameters:
  • self (Pose2T) –

  • b (Pose2T) –

  • epsilon (T.Scalar) –

Return type:

T.List[T.Scalar]

__mul__(right)[source]

Left-multiply with a compatible quantity.

Parameters:

right (Union[Pose2, Matrix21]) – (Pose2 | R2)

Return type:

Union[Pose2, Matrix21]

Returns:

(Pose2 | R2)

to_homogenous_matrix()[source]

A matrix representation of this element in the Euclidean space that contains it.

Return type:

Matrix

Returns:

3x3 Matrix