Skip to content

An overview of different quaternion implementations and their chosen order: x-y-z-w or w-x-y-z?

License

Notifications You must be signed in to change notification settings

clemense/quaternion-conventions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 

Repository files navigation

Quaternion Order Conventions

Quaternions are expressions of the form w + x i + y j + z k, with x i + y j + z k being the vector/imaginary part and w the scalar/real part. Math libraries differ in the way they order the vector and real part of a quaternion. This can lead to bothersome debugging sessions.

The following table shows quaternion implementations and their chosen order:
X-Y-Z-W #ffa500 (scalar-last format)   vs.   W-X-Y-Z #89cff0

Library / Framework Quaternion Format
autolab_core W-X-Y-Z #89cff0
Blender.mathutils W-X-Y-Z #89cff0
Boost W-X-Y-Z #89cff0
Bullet / PyBullet X-Y-Z-W #ffa500
DART (uses Eigen::Quaternion) W-X-Y-Z #89cff0
Drake (uses Eigen::Quaternion) W-X-Y-Z #89cff0
differentiable-robot-model X-Y-Z-W #ffa500
dm_robotics.transformations W-X-Y-Z #89cff0
Eigen - API W-X-Y-Z #89cff0
Eigen - Internal memory ordering X-Y-Z-W #ffa500
FleX X-Y-Z-W #ffa500
iDynTree W-X-Y-Z #89cff0
Isaac Gym X-Y-Z-W #ffa500
lietorch X-Y-Z-W #ffa500
jaxlie W-X-Y-Z #89cff0
Klampt W-X-Y-Z #89cff0
MATLAB W-X-Y-Z #89cff0
MuJoCo W-X-Y-Z #89cff0
Nuklei W-X-Y-Z #89cff0
numpy-quaternions W-X-Y-Z #89cff0
OpenRAVE 0.9.0 X-Y-Z-W #ffa500
Orocos KDL X-Y-Z-W #ffa500
PhysX X-Y-Z-W #ffa500
PyMesh W-X-Y-Z #89cff0
pyquaternion W-X-Y-Z #89cff0
pyrr X-Y-Z-W #ffa500
pytorch3d W-X-Y-Z #89cff0
pytransform3d W-X-Y-Z #89cff0
quaternions W-X-Y-Z #89cff0
RoMa X-Y-Z-W #ffa500
ROS X-Y-Z-W #ffa500
ROS2 (tf2) X-Y-Z-W #ffa500
scipy.spatial.transforms X-Y-Z-W #ffa500
spatialmath-python W-X-Y-Z #89cff0
squaternion W-X-Y-Z #89cff0
The Library for Uniform Deterministic Sequences and Sets of Samples over 2-sphere and SO(3) X-Y-Z-W #ffa500
Theseus W-X-Y-Z #89cff0
transformations.py (<=2009.04.18) X-Y-Z-W #ffa500
transformations.py (>=2010.05.10, includes trimesh.transformations) W-X-Y-Z #89cff0
Transforms3d W-X-Y-Z #89cff0
tinyquaternion W-X-Y-Z #89cff0
USD (Pixar) - API W-X-Y-Z #89cff0
USD (Pixar) - Internal memory ordering X-Y-Z-W #ffa500
ViSII - A VIrtual Scene Imaging Interface W-X-Y-Z #89cff0
NVIDIA Warp X-Y-Z-W #ffa500
YARP - API X-Y-Z-W #ffa500
YARP - Internal memory ordering W-X-Y-Z #89cff0

About

An overview of different quaternion implementations and their chosen order: x-y-z-w or w-x-y-z?

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published