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
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.