quaternions¶
Functions to operate on, or return, quaternions.
Quaternions here consist of 4 values w, x, y, z, where w is the
real (scalar) part, and x, y, z are the complex (vector) part.
Note - rotation matrices here apply to column vectors, that is, they are applied on the left of the vector. For example:
>>> import numpy as np
>>> q = [0, 1, 0, 0] # 180 degree rotation around axis 0
>>> M = quat2mat(q) # from this module
>>> vec = np.array([1, 2, 3]).reshape((3,1)) # column vector
>>> tvec = np.dot(M, vec)
Terms used in function names:
- mat : array shape (3, 3) (3D non-homogenous coordinates) 
- aff : affine array shape (4, 4) (3D homogenous coordinates) 
- quat : quaternion shape (4,) 
- axangle : rotations encoded by axis vector and angle scalar 
| 
 | Quaternion for rotation of angle theta around vector | 
| 
 | Compute unit quaternion from last 3 values | 
| 
 | Calculate quaternion corresponding to given rotation matrix | 
| 
 | Returns True if q1 and q2 give near equivalent transforms | 
| 
 | Conjugate of quaternion | 
| 
 | Return exponential of quaternion | 
| 
 | Return identity quaternion | 
| 
 | Return multiplicative inverse of quaternion q | 
| 
 | Return True is this is very nearly a unit quaternion | 
| 
 | Return natural logarithm of quaternion | 
| 
 | Multiply two quaternions | 
| 
 | Return norm of quaternion | 
| 
 | Return the n th power of quaternion q | 
| 
 | Convert quaternion to rotation of angle around axis | 
| 
 | Calculate rotation matrix corresponding to quaternion | 
| 
 | Apply transformation in quaternion q to vector v | 
axangle2quat¶
- 
transforms3d.quaternions.axangle2quat(vector, theta, is_normalized=False)¶
- Quaternion for rotation of angle theta around vector - Parameters
- vector3 element sequence
- vector specifying axis for rotation. 
- thetascalar
- angle of rotation in radians. 
- is_normalizedbool, optional
- True if vector is already normalized (has norm of 1). Default False. 
 
- Returns
- quat4 element sequence of symbols
- quaternion giving specified rotation 
 
 - Notes - Formula from http://mathworld.wolfram.com/EulerParameters.html - Examples - >>> q = axangle2quat([1, 0, 0], np.pi) >>> np.allclose(q, [0, 1, 0, 0]) True 
fillpositive¶
- 
transforms3d.quaternions.fillpositive(xyz, w2_thresh=None)¶
- Compute unit quaternion from last 3 values - Parameters
- xyziterable
- iterable containing 3 values, corresponding to quaternion x, y, z 
- w2_threshNone or float, optional
- threshold to determine if w squared is really negative. If None (default) then w2_thresh set equal to - -np.finfo(xyz.dtype).eps, if possible, otherwise- -np.finfo(np.float64).eps
 
- Returns
- wxyzarray shape (4,)
- Full 4 values of quaternion 
 
 - Notes - If w, x, y, z are the values in the full quaternion, assumes w is positive. - Gives error if w*w is estimated to be negative - w = 0 corresponds to a 180 degree rotation - The unit quaternion specifies that np.dot(wxyz, wxyz) == 1. - If w is positive (assumed here), w is given by: - w = np.sqrt(1.0-(x*x+y*y+z*z)) - w2 = 1.0-(x*x+y*y+z*z) can be near zero, which will lead to numerical instability in sqrt. Here we use the system maximum float type to reduce numerical instability - Examples - >>> import numpy as np >>> wxyz = fillpositive([0,0,0]) >>> np.all(wxyz == [1, 0, 0, 0]) True >>> wxyz = fillpositive([1,0,0]) # Corner case; w is 0 >>> np.all(wxyz == [0, 1, 0, 0]) True >>> np.dot(wxyz, wxyz) 1.0 
mat2quat¶
- 
transforms3d.quaternions.mat2quat(M)¶
- Calculate quaternion corresponding to given rotation matrix - Method claimed to be robust to numerical errors in M. - Constructs quaternion by calculating maximum eigenvector for matrix - K(constructed from input M). Although this is not tested, a maximum eigenvalue of 1 corresponds to a valid rotation.- A quaternion - q*-1corresponds to the same rotation as- q; thus the sign of the reconstructed quaternion is arbitrary, and we return quaternions with positive w (q[0]).- See notes. - Parameters
- Marray-like
- 3x3 rotation matrix 
 
- Returns
- q(4,) array
- closest quaternion to input matrix, having positive q[0] 
 
 - Notes - http://en.wikipedia.org/wiki/Rotation_matrix#Quaternion - Bar-Itzhack, Itzhack Y. (2000), “New method for extracting the quaternion from a rotation matrix”, AIAA Journal of Guidance, Control and Dynamics 23(6):1085-1087 (Engineering Note), ISSN 0731-5090 - References 
- Bar-Itzhack, Itzhack Y. (2000), “New method for extracting the quaternion from a rotation matrix”, AIAA Journal of Guidance, Control and Dynamics 23(6):1085-1087 (Engineering Note), ISSN 0731-5090 
 - Examples - >>> import numpy as np >>> q = mat2quat(np.eye(3)) # Identity rotation >>> np.allclose(q, [1, 0, 0, 0]) True >>> q = mat2quat(np.diag([1, -1, -1])) >>> np.allclose(q, [0, 1, 0, 0]) # 180 degree rotn around axis 0 True 
nearly_equivalent¶
- 
transforms3d.quaternions.nearly_equivalent(q1, q2, rtol=1e-05, atol=1e-08)¶
- Returns True if q1 and q2 give near equivalent transforms - q1 may be nearly numerically equal to q2, or nearly equal to q2 * -1 (because a quaternion multiplied by -1 gives the same transform). - Parameters
- q14 element sequence
- w, x, y, z of first quaternion 
- q24 element sequence
- w, x, y, z of second quaternion 
 
- Returns
- equivbool
- True if q1 and q2 are nearly equivalent, False otherwise 
 
 - Examples - >>> q1 = [1, 0, 0, 0] >>> nearly_equivalent(q1, [0, 1, 0, 0]) False >>> nearly_equivalent(q1, [1, 0, 0, 0]) True >>> nearly_equivalent(q1, [-1, 0, 0, 0]) True 
qconjugate¶
- 
transforms3d.quaternions.qconjugate(q)¶
- Conjugate of quaternion - Parameters
- q4 element sequence
- w, i, j, k of quaternion 
 
- Returns
- conjqarray shape (4,)
- w, i, j, k of conjugate of q 
 
 
qexp¶
- 
transforms3d.quaternions.qexp(q)¶
- Return exponential of quaternion - Parameters
- q4 element sequence
- w, i, j, k of quaternion 
 
- Returns
- q_exparray shape (4,)
- The quaternion exponential 
 
 - Notes - See: 
qinverse¶
- 
transforms3d.quaternions.qinverse(q)¶
- Return multiplicative inverse of quaternion q - Parameters
- q4 element sequence
- w, i, j, k of quaternion 
 
- Returns
- invqarray shape (4,)
- w, i, j, k of quaternion inverse 
 
 
qlog¶
- 
transforms3d.quaternions.qlog(q)¶
- Return natural logarithm of quaternion - Parameters
- q4 element sequence
- w, i, j, k of quaternion 
 
- Returns
- q_logarray shape (4,)
- Natual logarithm of quaternion 
 
 - Notes - See: https://en.wikipedia.org/wiki/Quaternion#Exponential,_logarithm,_and_power 
qmult¶
- 
transforms3d.quaternions.qmult(q1, q2)¶
- Multiply two quaternions - Parameters
- q14 element sequence
- q24 element sequence
 
- Returns
- q12shape (4,) array
 
 - Notes - See : http://en.wikipedia.org/wiki/Quaternions#Hamilton_product 
qnorm¶
- 
transforms3d.quaternions.qnorm(q)¶
- Return norm of quaternion - Parameters
- q4 element sequence
- w, i, j, k of quaternion 
 
- Returns
- nscalar
- quaternion norm 
 
 - Notes 
qpow¶
- 
transforms3d.quaternions.qpow(q, n)¶
- Return the n th power of quaternion q - Parameters
- q4 element sequence
- w, i, j, k of quaternion 
- nint or float
- A real number 
 
- Returns
- q_powarray shape (4,)
- The quaternion q to n th power. 
 
 - Notes - See: https://en.wikipedia.org/wiki/Quaternion#Exponential,_logarithm,_and_power 
quat2axangle¶
- 
transforms3d.quaternions.quat2axangle(quat, identity_thresh=None)¶
- Convert quaternion to rotation of angle around axis - Parameters
- quat4 element sequence
- w, x, y, z forming quaternion. 
- identity_threshNone or scalar, optional
- Threshold below which the norm of the vector part of the quaternion (x, y, z) is deemed to be 0, leading to the identity rotation. None (the default) leads to a threshold estimated based on the precision of the input. 
 
- Returns
- thetascalar
- angle of rotation. 
- vectorarray shape (3,)
- axis around which rotation occurs. 
 
 - Notes - A quaternion for which x, y, z are all equal to 0, is an identity rotation. In this case we return a 0 angle and an arbitrary vector, here [1, 0, 0]. - The algorithm allows for quaternions that have not been normalized. - Examples - >>> vec, theta = quat2axangle([0, 1, 0, 0]) >>> vec array([1., 0., 0.]) >>> np.allclose(theta, np.pi) True - If this is an identity rotation, we return a zero angle and an arbitrary vector: - >>> quat2axangle([1, 0, 0, 0]) (array([1., 0., 0.]), 0.0) - If any of the quaternion values are not finite, we return a NaN in the angle, and an arbitrary vector: - >>> quat2axangle([1, np.inf, 0, 0]) (array([1., 0., 0.]), nan) 
quat2mat¶
- 
transforms3d.quaternions.quat2mat(q)¶
- Calculate rotation matrix corresponding to quaternion - Parameters
- q4 element array-like
 
- Returns
- M(3,3) array
- Rotation matrix corresponding to input quaternion q 
 
 - Notes - Rotation matrix applies to column vectors, and is applied to the left of coordinate vectors. The algorithm here allows quaternions that have not been normalized. - References - Algorithm from http://en.wikipedia.org/wiki/Rotation_matrix#Quaternion - Examples - >>> import numpy as np >>> M = quat2mat([1, 0, 0, 0]) # Identity quaternion >>> np.allclose(M, np.eye(3)) True >>> M = quat2mat([0, 1, 0, 0]) # 180 degree rotn around axis 0 >>> np.allclose(M, np.diag([1, -1, -1])) True 
rotate_vector¶
- 
transforms3d.quaternions.rotate_vector(v, q, is_normalized=True)¶
- Apply transformation in quaternion q to vector v - Parameters
- v3 element sequence
- 3 dimensional vector 
- q4 element sequence
- w, i, j, k of quaternion 
- is_normalized{True, False}, optional
- If True, assume q is normalized. If False, normalize q before applying. 
 
- Returns
- vdasharray shape (3,)
- v rotated by quaternion q 
 
 - Notes - See: http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Describing_rotations_with_quaternions