symforce.geo.rot3 module#

class Rot3(q=None)[source]#

Bases: LieGroup

Group of three-dimensional orthogonal matrices with determinant +1, representing rotations in 3D space. Backed by a quaternion with (x, y, z, w) storage.

Parameters:

q (T.Optional[Quaternion]) –

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:

Rot3

classmethod symbolic(name, **kwargs)[source]#

Construct a symbolic element with the given name prefix. Kwargs are forwarded to sf.Symbol (for example, sympy assumptions).

Parameters:
  • name (str) –

  • kwargs (Any) –

Return type:

Rot3

classmethod identity()[source]#

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

Return type:

Rot3

compose(other)[source]#

Apply the group operation with other.

Parameters:

other (Rot3) –

Return type:

Rot3

inverse()[source]#

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

Return type:

Rot3

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:
Return type:

Rot3

to_tangent(epsilon=0.0)[source]#

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

Parameters:

epsilon (float) –

Return type:

List[float]

classmethod hat(vec)[source]#
Parameters:

vec (Sequence[float]) –

Return type:

Matrix33

storage_D_tangent()[source]#

Note: generated from symforce/notebooks/storage_D_tangent.ipynb

Return type:

Matrix43

tangent_D_storage()[source]#

Note: generated from symforce/notebooks/tangent_D_storage.ipynb

Return type:

Matrix34

__mul__(right)[source]#

Left-multiplication. Either rotation concatenation or point transform.

Parameters:

right (Matrix31 | Rot3) –

Return type:

Matrix31 | Rot3

to_tangent_norm(epsilon=0.0)[source]#

Returns the norm of the tangent vector corresponding to this rotation

This is equal to the angle that should be rotated through to get this Rot3, in radians. Using this function directly is usually more efficient than computing the norm of the tangent vector, both in symbolic and generated code; by default, symbolic APIs will not automatically simplify to this

Parameters:

epsilon (float) –

Return type:

float

to_rotation_matrix()[source]#

Converts to a rotation matrix

Return type:

Matrix33

classmethod from_rotation_matrix(R, epsilon=0.0)[source]#

Construct from a rotation matrix.

Parameters:
Return type:

Rot3

to_yaw_pitch_roll(epsilon=0.0)[source]#

Compute the yaw, pitch, and roll Euler angles in radians of this rotation

Euler angles are subject to gimbal lock: https://en.wikipedia.org/wiki/Gimbal_lock

This means that when the pitch is close to +/- pi/2, the yaw and roll angles are not uniquely defined, so the returned values are not unique in this case.

Returns:
  • Scalar – Yaw angle [radians]

  • Scalar – Pitch angle [radians]

  • Scalar – Roll angle [radians]

Parameters:

epsilon (float) –

Return type:

Tuple[float, float, float]

classmethod from_yaw_pitch_roll(yaw=0, pitch=0, roll=0)[source]#

Construct from yaw, pitch, and roll Euler angles in radians

Parameters:
Return type:

Rot3

classmethod from_angle_axis(angle, axis)[source]#

Construct from an angle in radians and a (normalized) axis as a 3-vector.

Parameters:
Return type:

Rot3

classmethod from_two_unit_vectors(a, b, epsilon=0.0)[source]#

Return a rotation that transforms a to b. Both inputs are three-vectors that are expected to be normalized.

Reference:

http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors

Parameters:
Return type:

Rot3

angle_between(other, epsilon=0.0)[source]#

Return the angle between this rotation and the other in radians.

Parameters:
Return type:

float

classmethod random()[source]#

Generate a random element of SO3.

Return type:

Rot3

classmethod random_from_uniform_samples(u1, u2, u3, pi=pi)[source]#

Generate a random element of SO3 from three variables uniformly sampled in [0, 1].

Parameters:
Return type:

Rot3