Homepage Demos Overview Downloads Tutorials Reference
Credits

ROBOOP::Quaternion Class Reference

#include <quaternion.h>

List of all members.


Detailed Description

Quaternion class definition.

Definition at line 82 of file quaternion.h.

Public Member Functions

 Quaternion ()
 Constructor.
 Quaternion (const Quaternion &q)
 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.
Quaternionoperator= (const Quaternion &q)
 Overload = operator.
Quaternion operator+ (const Quaternion &q) const
 Overload + operator.
Quaternion operator- (const Quaternion &q) const
 Overload - operator.
Quaternion operator * (const Quaternion &q) const
 Overload * operator.
Quaternion operator * (const Real c) const
 Overload * operator, multiplication by a scalar.
Quaternion operator/ (const Quaternion &q) const
 Overload / operator.
Quaternion operator/ (const Real c) const
 Overload / operator, division by a scalar.
Quaternion conjugate () const
 Conjugate.
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.
Quaternion power (const Real t) const
Quaternion Log () const
 Logarithm of a unit quaternion.
Quaternion dot (const ColumnVector &w, const short sign) const
 Quaternion time derivative.
ReturnMatrix E (const short sign) const
 Matrix E.
Real norm () const
 Return the quaternion norm.
Real dot_prod (const Quaternion &q) const
 Quaternion dot product.
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 quaternion vector part.
ReturnMatrix R () const
 Rotation matrix from a unit quaternion.
ReturnMatrix T () const
 Transformation matrix from a quaternion.

Private Attributes

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


Constructor & Destructor Documentation

ROBOOP::Quaternion::Quaternion  ) 
 

Constructor.

Definition at line 67 of file quaternion.cpp.

ROBOOP::Quaternion::Quaternion const Quaternion q  ) 
 

Constructor.

Definition at line 75 of file quaternion.cpp.

ROBOOP::Quaternion::Quaternion const Real  angle_in_rad,
const ColumnVector axis
 

Constructor.

Definition at line 82 of file quaternion.cpp.

ROBOOP::Quaternion::Quaternion const Real  s,
const Real  v1,
const Real  v2,
const Real  v3
 

Constructor.

Definition at line 106 of file quaternion.cpp.

ROBOOP::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 ROBOOP::Quaternion::conjugate  )  const
 

Conjugate.

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

Definition at line 325 of file quaternion.cpp.

Referenced by i().

Quaternion ROBOOP::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 430 of file quaternion.cpp.

Referenced by ROBOOP::Impedance::control().

Real ROBOOP::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 487 of file quaternion.cpp.

Referenced by ROBOOP::Impedance::control(), ROBOOP::Clik::endeff_pos_ori_err(), ROBOOP::Slerp(), ROBOOP::Slerp_prime(), and ROBOOP::Resolved_acc::torque_cmd().

ReturnMatrix ROBOOP::Quaternion::E const short  sign  )  const
 

Matrix E.

See Quaternion::dot for explanation.

Definition at line 468 of file quaternion.cpp.

Referenced by ROBOOP::Impedance::control(), and ROBOOP::Omega().

Quaternion ROBOOP::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 378 of file quaternion.cpp.

Referenced by power(), and ROBOOP::Spl_Quaternion::quat().

Quaternion ROBOOP::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.

Definition at line 365 of file quaternion.cpp.

Referenced by ROBOOP::Impedance::control(), operator/(), Quaternion(), ROBOOP::Slerp(), ROBOOP::Slerp_prime(), and ROBOOP::Squad_prime().

Quaternion ROBOOP::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 407 of file quaternion.cpp.

Referenced by power(), ROBOOP::Slerp_prime(), and ROBOOP::Squad_prime().

Real ROBOOP::Quaternion::norm  )  const
 

Return the quaternion norm.

The norm of quaternion is defined by

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

Definition at line 340 of file quaternion.cpp.

Referenced by i(), and unit().

Quaternion ROBOOP::Quaternion::operator * const Real  c  )  const
 

Overload * operator, multiplication by a scalar.

$q = [s, v]$ and let $r \in R$. Then $rq = qr = [r, 0][s, v] = [rs, rv]$

The result is not necessarily a unit quaternion even if $q$ is a unit quaternions.

Definition at line 272 of file quaternion.cpp.

Quaternion ROBOOP::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 249 of file quaternion.cpp.

Quaternion ROBOOP::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 209 of file quaternion.cpp.

Quaternion ROBOOP::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 229 of file quaternion.cpp.

Quaternion ROBOOP::Quaternion::operator/ const Real  c  )  const
 

Overload / operator, division by a scalar.

Same explanation as multiplication by scaler.

Definition at line 302 of file quaternion.cpp.

Quaternion ROBOOP::Quaternion::operator/ const Quaternion q  )  const
 

Overload / operator.

Definition at line 290 of file quaternion.cpp.

Quaternion & ROBOOP::Quaternion::operator= const Quaternion q  ) 
 

Overload = operator.

Definition at line 200 of file quaternion.cpp.

Quaternion ROBOOP::Quaternion::power const Real  t  )  const
 

Definition at line 400 of file quaternion.cpp.

Referenced by ROBOOP::Squad_prime().

ReturnMatrix ROBOOP::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 500 of file quaternion.cpp.

Referenced by Quaternion(), and ROBOOP::Dynamics::set_robot_on_first_point_of_splines().

Real ROBOOP::Quaternion::s  )  const [inline]
 

Return scalar part.

Definition at line 113 of file quaternion.h.

Referenced by ROBOOP::Clik::endeff_pos_ori_err(), ROBOOP::Integ_quat(), ROBOOP::Integ_Trap_quat_s(), and ROBOOP::Resolved_acc::torque_cmd().

void ROBOOP::Quaternion::set_s const Real  s  )  [inline]
 

Set scalar part.

Definition at line 114 of file quaternion.h.

Referenced by ROBOOP::Integ_quat(), and ROBOOP::Integ_Trap_quat_s().

void ROBOOP::Quaternion::set_v const ColumnVector v  ) 
 

Set quaternion vector part.

Definition at line 316 of file quaternion.cpp.

Referenced by ROBOOP::Integ_quat(), and ROBOOP::Integ_Trap_quat_v().

ReturnMatrix ROBOOP::Quaternion::T  )  const
 

Transformation matrix from a quaternion.

See Quaternion::R() for equations.

Definition at line 541 of file quaternion.cpp.

Quaternion & ROBOOP::Quaternion::unit  ) 
 

Normalize a quaternion.

Definition at line 353 of file quaternion.cpp.

Referenced by ROBOOP::Integ_quat().

ReturnMatrix ROBOOP::Quaternion::v  )  const [inline]
 

Return vector part.

Definition at line 115 of file quaternion.h.

Referenced by ROBOOP::Impedance::control(), ROBOOP::Clik::endeff_pos_ori_err(), ROBOOP::Integ_quat(), ROBOOP::Integ_Trap_quat_v(), ROBOOP::Omega(), and ROBOOP::Resolved_acc::torque_cmd().


Member Data Documentation

Real ROBOOP::Quaternion::s_ [private]
 

Quaternion scalar part.

Definition at line 121 of file quaternion.h.

Referenced by conjugate(), dot(), exp(), Log(), norm(), operator *(), operator+(), operator-(), operator/(), operator=(), Quaternion(), R(), T(), and unit().

ColumnVector ROBOOP::Quaternion::v_ [private]
 

Quaternion vector part.

Definition at line 122 of file quaternion.h.

Referenced by conjugate(), dot(), exp(), Log(), norm(), operator *(), operator+(), operator-(), operator/(), operator=(), Quaternion(), R(), set_v(), T(), and unit().


The documentation for this class was generated from the following files:

ROBOOP v1.21a
Generated Tue Oct 19 14:18:30 2004 by Doxygen 1.3.9.1