Quaternion Formulas

By | February 21, 2016

Here’s a collection of quaternion formulas. Quaternions are very useful for orientation sensing, game programming and augmented reality applications.

Magnitude

quaternion_magnitude

Normal

quaternion_normal

Quaternion Conjugate

quaternion_conjugate

Axis Angle To Quaternion

Where the axis is v and the angle is theta

axis_angle_to_quaternion

Quaternion To Axis Angle

Where theta is the angle and v is the axis vector

quaternion_to_axis_angle

Quaternion From Angular Velocity

The first step is to convert angular velocity into an axis angle. w is angular velocity and t is the time period (sample rate of gyroscopes)

angular_velocity_to_axis_angle

Using theta as the angle and v as the axis vector, it’s possible to translate this axis angle representation into a quaternion using the above formula.

Quaternion To Angular Velocity

To do this, translate the quaternion into an axis-angle. Again, v represents the axis, theta is the angle and t is the

axis_angle_to_angular_velocity

Euler Angles To Quaternion

Euler angles are interesting because the order in which the angles are applied is important. The same angles applied in different orders won’t give you the same result. The most common order of application is heading, pitch then roll.

Euler angles are essentially three axis angles. Heading is a rotation around the z axis, pitch is an angle around the y axis and roll is around the x axis. It’s easy to convert these three axis angles into three quaternions, then multiply them together to create a single quaternion representation of the original euler angles.

Quaternion To Euler Angles

There’s an elegant solution to this problem.

To extract a heading euler angle from a quaternion

heading_from_quaternion

Pitch euler angle from quaternion

pitch_from_quaternion

Roll euler angle from quaternion

roll_from_quaternion

Quaternion Multiplication

To multiply quaternion q by quaternion r to produce quaternion s.

quaternion_multiplication

Rotating Vectors

Quaternions can be used to translate vectors from one frame of reference to another.

quaternion_vector_rotation

q(x,y,z) is a vector constructed from the x,y,z components of the quaternion q. v is the vector to rotate and rv is the rotated vector.

5 thoughts on “Quaternion Formulas

  1. Mathieu

    In Your Quaternion to Euler angles conversion,

    1) Are you you haven’t inversed Vx and Vz ?
    If Roll is around X axis, then it should be noted Vx, not Vz…
    If Yaw is around Z axis, then it should be noted Vz, not Vx…

    2) The wikipedia formula is different :
    Vx = roll = atan2(2.0 * (qr*qi + qj*qk), 1.0 – 2.0 * (qi2 + qj2) )
    Vy = pitch = asin(2.0 * (qr*qj – qi*qk) )
    Vz = yaw = atan2(2.0 * (qr*qk + qi*qj), 1.0 – 2.0 * (qj2 + qk2) )
    why?

    https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Quaternion_.E2.86.92_Euler_angles_.28z-y.E2.80.99-x.E2.80.B3_intrinsic.29

    Thanks

    Reply
    1. Camel

      Thanks for the comment! I know that quaternion to euler function has worked (or appeared to work) correctly for me before. I’ll look into this and update this blog post if I discover any errors.

      Reply
    2. Camel

      Ok, I’ve got an answer. You’re right, Vx and Vz do appear switched around. This is because I’ve been using x-y-z rotations rather than z-y-x rotations on the wikipedia. This is why the quaternion to euler angle formula is different too.

      I use x-y-z for euler angles and north-east-down for matrices 🙂 Those are normal in aviation.

      Reply
  2. Mathieu

    …with the following notation equivalence :
    qi equivalent to qx
    qj equivalent to qy
    qk equivalent to qz
    qr equivalent to qw

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *