Quaternion class. More...
#include "robot.h"

Go to the source code of this file.
Classes | |
| class | Quaternion |
| Quaternion class definition. More... | |
Defines | |
| #define | BASE_FRAME 0 |
| #define | BODY_FRAME 1 |
| #define | EPSILON 0.0000001 |
Functions | |
| short | Integ_quat (Quaternion &dquat_present, Quaternion &dquat_past, Quaternion &quat, const Real dt) |
| Trapezoidal quaternion integration. | |
| Real | Integ_Trap_quat_s (const Quaternion &present, Quaternion &past, const Real dt) |
| Trapezoidal quaternion scalar part integration. | |
| ReturnMatrix | Integ_Trap_quat_v (const Quaternion &present, Quaternion &past, const Real dt) |
| Trapezoidal quaternion vector part integration. | |
| ReturnMatrix | Omega (const Quaternion &q, const Quaternion &q_dot) |
| Return angular velocity from a quaternion and it's time derivative. | |
| Quaternion | operator* (const Real c, const Quaternion &rhs) |
| Overload * operator, multiplication by a scalar. | |
| Quaternion | operator* (const Quaternion &lhs, const Real c) |
| Overload * operator, multiplication by a scalar. | |
| Quaternion | operator/ (const Real c, const Quaternion &rhs) |
| Overload / operator, division by a scalar. | |
| Quaternion | operator/ (const Quaternion &lhs, const Real c) |
| Quaternion | Slerp (const Quaternion &q0, const Quaternion &q1, const Real t) |
| Spherical Linear Interpolation. | |
| Quaternion | Slerp_prime (const Quaternion &q0, const Quaternion &q1, const Real t) |
| Spherical Linear Interpolation derivative. | |
| Quaternion | Squad (const Quaternion &p, const Quaternion &a, const Quaternion &b, const Quaternion &q, const Real t) |
| Spherical Cubic Interpolation. | |
| Quaternion | Squad_prime (const Quaternion &p, const Quaternion &a, const Quaternion &b, const Quaternion &q, const Real t) |
| Spherical Cubic Interpolation derivative. | |
Variables | |
| static const char | header_quat_rcsid [] = "$Id: quaternion.h,v 1.12 2005/11/15 19:25:58 gourdeau Exp $" |
| RCS/CVS version. | |
Quaternion class.
Definition in file quaternion.h.
| #define BASE_FRAME 0 |
Definition at line 84 of file quaternion.h.
| #define BODY_FRAME 1 |
Definition at line 85 of file quaternion.h.
| #define EPSILON 0.0000001 |
Definition at line 86 of file quaternion.h.
| short Integ_quat | ( | Quaternion & | dquat_present, |
| Quaternion & | dquat_past, | ||
| Quaternion & | quat, | ||
| const Real | dt | ||
| ) |
Trapezoidal quaternion integration.
Definition at line 585 of file quaternion.cpp.
| Real Integ_Trap_quat_s | ( | const Quaternion & | present, |
| Quaternion & | past, | ||
| const Real | dt | ||
| ) |
Trapezoidal quaternion scalar part integration.
Definition at line 612 of file quaternion.cpp.
| ReturnMatrix Integ_Trap_quat_v | ( | const Quaternion & | present, |
| Quaternion & | past, | ||
| const Real | dt | ||
| ) |
Trapezoidal quaternion vector part integration.
Definition at line 621 of file quaternion.cpp.
| ReturnMatrix Omega | ( | const Quaternion & | q, |
| const Quaternion & | q_dot | ||
| ) |
Return angular velocity from a quaternion and it's time derivative.
See Quaternion::dot for explanation.
Definition at line 560 of file quaternion.cpp.
| Quaternion operator* | ( | const Real | c, |
| const Quaternion & | q | ||
| ) |
Overload * operator, multiplication by a scalar.
and let
. Then ![$rq = qr = [r, 0][s, v] = [rs, rv]$](form_169.png)
The result is not necessarily a unit quaternion even if
is a unit quaternions.
Definition at line 516 of file quaternion.cpp.
| Quaternion operator* | ( | const Quaternion & | lhs, |
| const Real | c | ||
| ) |
Overload * operator, multiplication by a scalar.
Definition at line 533 of file quaternion.cpp.
| Quaternion operator/ | ( | const Real | c, |
| const Quaternion & | q | ||
| ) |
Overload / operator, division by a scalar.
Same explanation as multiplication by scaler.
Definition at line 542 of file quaternion.cpp.
| Quaternion operator/ | ( | const Quaternion & | lhs, |
| const Real | c | ||
| ) |
Definition at line 555 of file quaternion.cpp.
| Quaternion Slerp | ( | const Quaternion & | q0, |
| const Quaternion & | q1, | ||
| const Real | t | ||
| ) |
Spherical Linear Interpolation.
Cite_:Dam
The quaternion
interpolate the quaternions
and
given the parameter
along the quaternion sphere.
where
and
are real functions with
. As
varies between 0 and 1. the values
varies uniformly along the circular arc from
and
. The angle between
and
is
and the angle between
and
is
. Taking the dot product of
and
yields
and taking the dot product of
and
yields
These are two equations with
and
. The solution is
The interpolation is then
If
and
are unit quaternions the
is also a unit quaternions. For unit quaternions we have
For t = 0 and t = 1 we have
It is customary to choose the sign G on q1 so that q0.Gq1 >=0 (the angle between q0 ang Gq1 is acute). This choice avoids extra spinning caused by the interpolated rotations.
Definition at line 631 of file quaternion.cpp.
| Quaternion Slerp_prime | ( | const Quaternion & | q0, |
| const Quaternion & | q1, | ||
| const Real | t | ||
| ) |
Spherical Linear Interpolation derivative.
Cite_: Dam
The derivative of the function
where
is a constant unit quaternion is
Using the preceding equation the Slerp derivative is then
It is customary to choose the sign G on q1 so that q0.Gq1 >=0 (the angle between q0 ang Gq1 is acute). This choice avoids extra spinning caused by the interpolated rotations. The result is not necessary a unit quaternion.
Definition at line 692 of file quaternion.cpp.
| Quaternion Squad | ( | const Quaternion & | p, |
| const Quaternion & | a, | ||
| const Quaternion & | b, | ||
| const Quaternion & | q, | ||
| const Real | t | ||
| ) |
Spherical Cubic Interpolation.
Cite_: Dam
Let four quaternions be
(p),
(a),
(b) and
(q) be the ordered vertices of a quadrilateral. Obtain c from
to
interpolation. Obtain d from
to
interpolation. Obtain e, the final result, from c to d interpolation.
The intermediate quaternion
and
are given by
Definition at line 725 of file quaternion.cpp.
| Quaternion Squad_prime | ( | const Quaternion & | p, |
| const Quaternion & | a, | ||
| const Quaternion & | b, | ||
| const Quaternion & | q, | ||
| const Real | t | ||
| ) |
Spherical Cubic Interpolation derivative.
Cite_: www.magic-software.com
The derivative of the function
where
is a constant unit quaternion is
Recalling that
(see Quaternion::Log()). If the power is a function we have
If
is a function of time and the power is differentiable function of time we have
Using these last three equations Squad derivative can be define. Let
,
,
. We then have 
where
,
, 
The result is not necessarily a unit quaternion even if all the input quaternions are unit.
Definition at line 751 of file quaternion.cpp.
const char header_quat_rcsid[] = "$Id: quaternion.h,v 1.12 2005/11/15 19:25:58 gourdeau Exp $" [static] |
RCS/CVS version.
Definition at line 75 of file quaternion.h.