Quaternions

Class-based Quaternion representation and mathematics for 3-D rotations.

class pybosl2.quaternions.Quaternion(w=1.0, x=0.0, y=0.0, z=0.0)[source]

Bases: object

Class to represent a 4-dimensional complex number or quaternion.

Quaternion objects can be used generically as 4D numbers, or as unit quaternions to represent rotations in 3D space.

Parameters:
w : float

x : float

y : float

z : float

q

Quaternion 4-vector represented as a Numpy array

classmethod from_array(array)[source]

Create a Quaternion from a 4-element numeric sequence.

Parameters:
array : Sequence[float] | np.ndarray

Return type:

Quaternion

classmethod from_scalar_vector(scalar, vector)[source]

Create a Quaternion from a scalar and a 3-element vector.

Parameters:
scalar : float

vector : Sequence[float] | np.ndarray

Return type:

Quaternion

classmethod from_real_imaginary(real, imaginary)[source]

Create a Quaternion from real and 3-element imaginary parts.

Parameters:
real : float

imaginary : Sequence[float] | np.ndarray

Return type:

Quaternion

classmethod from_matrix(matrix, rtol=1e-05, atol=1e-08)[source]

Initialise from 3x3 or 4x4 matrix representation.

Parameters:
matrix : Any

rtol : float

atol : float

Return type:

Quaternion

classmethod from_axis_angle(axis, angle)[source]

Create a Quaternion from rotation axis and angle (in radians).

Parameters:
axis : Sequence[float] | np.ndarray

angle : float

Return type:

Quaternion

classmethod random()[source]

Generate a random unit quaternion.

Uniformly distributed across the rotation space.

Return type:

Quaternion

property conjugate : Quaternion

Quaternion conjugate clone.

property inverse : Quaternion

Inverse of the quaternion object.

property norm : float

L2 norm of the quaternion 4-vector.

property magnitude : float

Alias for norm.

property normalised : Quaternion

Return a unit normalised copy.

property polar_unit_vector : ndarray

Vector part normalised to unit length.

property polar_angle : float

Return polar angle of the quaternion.

property polar_decomposition : tuple[ndarray, float]

Polar decomposition of the quaternion.

property unit : Quaternion

Alias for normalised.

is_unit(tolerance=1e-14)[source]

Check if quaternion is of unit length.

Parameters:
tolerance : float

Return type:

bool

rotate(vector)[source]

Rotate a 3D vector by the quaternion.

Parameters:
vector : Any

Return type:

Any

classmethod exp(q)[source]

Quaternion Exponential.

Parameters:
q : Quaternion

Return type:

Quaternion

classmethod log(q)[source]

Quaternion Logarithm.

Parameters:
q : Quaternion

Return type:

Quaternion

classmethod exp_map(q, eta)[source]

Quaternion exponential map.

Parameters:
q : Quaternion

eta : Quaternion

Return type:

Quaternion

classmethod sym_exp_map(q, eta)[source]

Symmetrized exponential map.

Parameters:
q : Quaternion

eta : Quaternion

Return type:

Quaternion

classmethod log_map(q, p)[source]

Quaternion logarithm map.

Parameters:
q : Quaternion

p : Quaternion

Return type:

Quaternion

classmethod sym_log_map(q, p)[source]

Symmetrized logarithm map.

Parameters:
q : Quaternion

p : Quaternion

Return type:

Quaternion

classmethod absolute_distance(q0, q1)[source]

Quaternion absolute distance.

Parameters:
q0 : Quaternion

q1 : Quaternion

Return type:

float

classmethod distance(q0, q1)[source]

Quaternion intrinsic distance.

Parameters:
q0 : Quaternion

q1 : Quaternion

Return type:

float

classmethod sym_distance(q0, q1)[source]

Symmetrized geodesic distance.

Parameters:
q0 : Quaternion

q1 : Quaternion

Return type:

float

classmethod slerp(q0, q1, amount=0.5)[source]

Spherical Linear Interpolation between unit quaternions.

The endpoints are normalised (and one may be negated, to take the short way round) on copies: interpolating between two rotations does not change either of them.

Parameters:
q0 : Quaternion

q1 : Quaternion

amount : float

Return type:

Quaternion

classmethod intermediates(q0, q1, n, include_endpoints=False)[source]

Generate iterable sequence of intermediates.

Parameters:
q0 : Quaternion

q1 : Quaternion

n : int

include_endpoints : bool

Return type:

Iterator[Quaternion]

derivative(rate)[source]

Instantaneous quaternion derivative.

Parameters:
rate : Any

Return type:

Quaternion

integrate(rate, timestep)[source]

Advance time varying quaternion in-place.

Parameters:
rate : Any

timestep : float

Return type:

None

property rotation_matrix : ndarray

Get 3x3 rotation matrix representation.

property transformation_matrix : ndarray

Get 4x4 homogeneous transformation matrix.

property yaw_pitch_roll : tuple[float, float, float]

Get Yaw, Pitch, Roll angles (in radians).

get_axis(undefined=None)[source]

Get the rotation axis.

Parameters:
undefined : ndarray | None

Return type:

ndarray

property axis : ndarray

Get axis of rotation.

property angle : float

Get angle of rotation in radians.

property degrees : float

Get angle of rotation in degrees.

property radians : float

Get angle of rotation in radians.

property scalar : float

Get scalar component.

property vector : ndarray

Get vector component.

property real : float

Get real component.

property imaginary : ndarray

Get imaginary component.

property w : float

Get w element.

property x : float

Get x element.

property y : float

Get y element.

property z : float

Get z element.

property elements : ndarray

Get all elements array.

static to_degrees(angle_rad)[source]

Convert radians to degrees.

Parameters:
angle_rad : float | None

Return type:

float | None

static to_radians(angle_deg)[source]

Convert degrees to radians.

Parameters:
angle_deg : float | None

Return type:

float | None

pybosl2.quaternions.quaternion(angle=None, axis=None, rpy=None, matrix=None)[source]

Construct a 4-element quaternion [x, y, z, w].

If no arguments are provided, returns the identity quaternion [0, 0, 0, 1]. All angles are specified in degrees.

Parameters:
angle : float | None

axis : Sequence[float] | None

rpy : Sequence[float] | None

matrix : Sequence[Sequence[float]] | None

Return type:

list[float]

pybosl2.quaternions.quaternion_to_matrix(q)[source]

Convert a quaternion to a 3x3 rotation matrix.

Parameters:
q : Sequence[float]

Return type:

list[list[float]]

pybosl2.quaternions.quaternion_to_axis(q)[source]

Convert a quaternion to its angle and rotation axis representation.

Parameters:
q : Sequence[float]

Return type:

tuple[float, list[float]]

pybosl2.quaternions.quaternion_mult(q1, q2)[source]

Multiplies two quaternions (q1 * q2).

Parameters:
q1 : Sequence[float]

q2 : Sequence[float]

Return type:

list[float]

pybosl2.quaternions.quaternion_slerp(q1, q2, t)[source]

Perform spherical linear interpolation (SLERP) between two quaternions.

Parameters:
q1 : Sequence[float]

q2 : Sequence[float]

t : float

Return type:

list[float]

pybosl2.quaternions.quaternion_rot(q, v)[source]

Rotates a 3-D vector v by a quaternion q.

Parameters:
q : Sequence[float]

v : Sequence[float]

Return type:

list[float]