ROBOOP, A Robotics Object Oriented Package in C++
Quaternion Class Reference

Quaternion class definition. More...

#include <quaternion.h>

Public Member Functions

 Quaternion ()
 Constructor.
 
 Quaternion (const Real angle_in_rad, const ColumnVector &axis)
 Constructor.
 
 Quaternion (const Real s, const Real v1, const Real v2, const Real v3)
 Constructor.
 
 Quaternion (const Matrix &R)
 Constructor. More...
 
Quaternion operator+ (const Quaternion &q) const
 Overload + operator. More...
 
Quaternion operator- (const Quaternion &q) const
 Overload - operator. More...
 
Quaternion operator* (const Quaternion &q) const
 Overload * operator. More...
 
Quaternion operator/ (const Quaternion &q) const
 Overload / operator.
 
Quaternion conjugate () const
 Conjugate. More...
 
Quaternion i () const
 Quaternion inverse.

\[ q^{-1} = \frac{q^{*}}{N(q)} \]

where $q^{*}$ and $N(q)$ are the quaternion conjugate and the quaternion norm respectively.

 
Quaternionunit ()
 Normalize a quaternion.
 
Quaternion exp () const
 Exponential of a quaternion. More...
 
Quaternion power (const Real t) const
 
Quaternion Log () const
 Logarithm of a unit quaternion. More...
 
Quaternion dot (const ColumnVector &w, const short sign) const
 Quaternion time derivative. More...
 
ReturnMatrix E (const short sign) const
 Matrix E. More...
 
Real norm () const
 Return the quaternion norm. More...
 
Real dot_prod (const Quaternion &q) const
 Quaternion dot product. More...
 
Real s () const
 Return scalar part.
 
void set_s (const Real s)
 Set scalar part.
 
ReturnMatrix v () const
 Return vector part.
 
void set_v (const ColumnVector &v)
 Set vector part. More...
 
ReturnMatrix R () const
 Rotation matrix from a unit quaternion. More...
 
ReturnMatrix T () const
 Transformation matrix from a quaternion. More...
 

Private Attributes

Real s_
 Quaternion scalar part.
 
ColumnVector v_
 Quaternion vector part.
 

Detailed Description

Quaternion class definition.

Definition at line 89 of file quaternion.h.

Constructor & Destructor Documentation

Quaternion::Quaternion ( const Matrix &  R)

Constructor.

Cite_: Dam. The unit quaternion obtained from a matrix (see Quaternion::R())

\[ R(s,v) = \left[ \begin{array}{ccc} s^2+v_1^2-v_2^2-v_3^2 & 2v_1v_2+2sv_3 & 2v_1v_3-2sv_2 \\ 2v_1v_2-2sv_3 & s^2-v_1^2+v_2^2-v_3^2 & 2v_2v_3+2sv_1 \\ 2v_1v_3+2sv_2 &2v_2v_3-2sv_1 & s^2-v_1^2-v_2^2+v_3^2 \end{array} \right] \]

First we find $s$:

\[ R_{11} + R_{22} + R_{33} + R_{44} = 4s^2 \]

Now the other values are:

\[ s = \pm \frac{1}{2}\sqrt{R_{11} + R_{22} + R_{33} + R_{44}} \]

\[ v_1 = \frac{R_{32}-R_{23}}{4s} \]

\[ v_2 = \frac{R_{13}-R_{31}}{4s} \]

\[ v_3 = \frac{R_{21}-R_{12}}{4s} \]

The sign of $s$ cannot be determined. Depending on the choice of the sign for s the sign of $v$ change as well. Thus the quaternions $q$ and $-q$ represent the same rotation, but the interpolation curve changed with the choice of the sign. A positive sign has been chosen.

Definition at line 117 of file quaternion.cpp.

Member Function Documentation

Quaternion Quaternion::conjugate ( ) const

Conjugate.

The conjugate of a quaternion $q = [s, v]$ is $q^{*} = [s, -v]$

Definition at line 280 of file quaternion.cpp.

References s_, and v_.

Quaternion Quaternion::dot ( const ColumnVector &  w,
const short  sign 
) const

Quaternion time derivative.

The quaternion time derivative, quaternion propagation equation, is

\[ \dot{s} = - \frac{1}{2}v^Tw_{_0} \]

\[ \dot{v} = \frac{1}{2}E(s,v)w_{_0} \]

\[ E = sI - S(v) \]

where $w_{_0}$ is the angular velocity vector expressed in the base frame. If the vector is expressed in the object frame, $w_{_b}$, the time derivative becomes

\[ \dot{s} = - \frac{1}{2}v^Tw_{_b} \]

\[ \dot{v} = \frac{1}{2}E(s,v)w_{_b} \]

\[ E = sI + S(v) \]

Definition at line 385 of file quaternion.cpp.

References s_, sign(), and v_.

Referenced by Impedance::control().

Real Quaternion::dot_prod ( const Quaternion q) const

Quaternion dot product.

The dot product of quaternion is defined by

\[ q_1\cdot q_2 = s_1s_2 + v_1 \cdot v_2 \]

Definition at line 442 of file quaternion.cpp.

References s_, and v_.

Referenced by Slerp(), Slerp_prime(), and Resolved_acc::torque_cmd().

ReturnMatrix Quaternion::E ( const short  sign) const

Matrix E.

See Quaternion::dot for explanation.

Definition at line 423 of file quaternion.cpp.

References sign(), threebythreeident, and x_prod_matrix().

Referenced by Omega().

Quaternion Quaternion::exp ( ) const

Exponential of a quaternion.

Let a quaternion of the form $q = [0, \theta v]$, q is not necessarily a unit quaternion. Then the exponential function is defined by $q = [\cos(\theta),v \sin(\theta)]$.

Definition at line 333 of file quaternion.cpp.

References s_, and v_.

Referenced by Spl_Quaternion::quat(), and Spl_Quaternion::quat_w().

Quaternion Quaternion::Log ( ) const

Logarithm of a unit quaternion.

The logarithm function of a unit quaternion $q = [\cos(\theta), v \sin(\theta)]$ is defined as $log(q) = [0, v\theta]$. The result is not necessary a unit quaternion.

Definition at line 362 of file quaternion.cpp.

References s_, and v_.

Real Quaternion::norm ( ) const

Return the quaternion norm.

The norm of quaternion is defined by

\[ N(q) = s^2 + v\cdot v \]

Definition at line 295 of file quaternion.cpp.

Quaternion Quaternion::operator* ( const Quaternion rhs) const

Overload * operator.

The multiplication of two quaternions is

\[ q = q_1q_2 = [s_1s_2 - v_1\cdot v_2, v_1 \times v_2 + s_1v_2 + s_2v_1] \]

where $\cdot$ and $\times$ denote the scalar and vector product in $R^3$ respectively.

If $q_1$ and $q_2$ are unit quaternions, then q will also be a unit quaternion.

Definition at line 240 of file quaternion.cpp.

References s_, and v_.

Quaternion Quaternion::operator+ ( const Quaternion rhs) const

Overload + operator.

The quaternion addition is

\[ q_1 + q_2 = [s_1, v_1] + [s_2, v_2] = [s_1+s_2, v_1+v_2] \]

The result is not necessarily a unit quaternion even if $q_1$ and $q_2$ are unit quaternions.

Definition at line 200 of file quaternion.cpp.

References s_, and v_.

Quaternion Quaternion::operator- ( const Quaternion rhs) const

Overload - operator.

The quaternion soustraction is

\[ q_1 - q_2 = [s_1, v_1] - [s_2, v_2] = [s_1-s_2, v_1-v_2] \]

The result is not necessarily a unit quaternion even if $q_1$ and $q_2$ are unit quaternions.

Definition at line 220 of file quaternion.cpp.

References s_, and v_.

ReturnMatrix Quaternion::R ( ) const

Rotation matrix from a unit quaternion.

$p'=qpq^{-1} = Rp$ where $p$ is a vector, $R$ a rotation matrix and $q$ q quaternion. The rotation matrix obtained from a quaternion is then

\[ R(s,v) = (s^2 - v^Tv)I + 2vv^T - 2s S(v) \]

\[ R(s,v) = \left[ \begin{array}{ccc} s^2+v_1^2-v_2^2-v_3^2 & 2v_1v_2+2sv_3 & 2v_1v_3-2sv_2 \\ 2v_1v_2-2sv_3 & s^2-v_1^2+v_2^2-v_3^2 & 2v_2v_3+2sv_1 \\ 2v_1v_3+2sv_2 &2v_2v_3-2sv_1 & s^2-v_1^2-v_2^2+v_3^2 \end{array} \right] \]

where $S(\cdot)$ is the cross product matrix defined by

\[ S(u) = \left[ \begin{array}{ccc} 0 & -u_3 & u_2 \\ u_3 &0 & -u_1 \\ -u_2 & u_1 & 0 \\ \end{array} \right] \]

Definition at line 455 of file quaternion.cpp.

References threebythreeident, and x_prod_matrix().

Referenced by Dynamics::set_robot_on_first_point_of_splines().

void Quaternion::set_v ( const ColumnVector &  v)

Set vector part.

Set quaternion vector part.

Definition at line 271 of file quaternion.cpp.

Referenced by Integ_quat(), Integ_Trap_quat_v(), operator*(), and operator/().

ReturnMatrix Quaternion::T ( ) const

Transformation matrix from a quaternion.

See Quaternion::R() for equations.

Definition at line 496 of file quaternion.cpp.

References fourbyfourident, and x_prod_matrix().