Blender V2.61 - r43446

KDL::Rotation Class Reference

represents rotations in 3 dimensional space. More...

#include <frames.hpp>

List of all members.

Public Member Functions

 Rotation ()
 Rotation (double Xx, double Yx, double Zx, double Xy, double Yy, double Zy, double Xz, double Yz, double Zz)
 Rotation (const Vector &x, const Vector &y, const Vector &z)
void setValue (float *oglmat)
void getValue (float *oglmat) const
Rotationoperator= (const Rotation &arg)
Vector operator* (const Vector &v) const
double & operator() (int i, int j)
 Access to elements 0..2,0..2, bounds are checked when NDEBUG is not set.
double operator() (int i, int j) const
 Access to elements 0..2,0..2, bounds are checked when NDEBUG is not set.
void SetInverse ()
 Sets the value of *this to its inverse.
Rotation Inverse () const
 Gives back the inverse rotation matrix of *this.
Vector Inverse (const Vector &v) const
 The same as R.Inverse()*v but more efficient.
Wrench Inverse (const Wrench &arg) const
 The same as R.Inverse()*arg but more efficient.
Twist Inverse (const Twist &arg) const
 The same as R.Inverse()*arg but more efficient.
void DoRotX (double angle)
void DoRotY (double angle)
void DoRotZ (double angle)
void Ortho ()
Vector GetRot () const
Vector2 GetXZRot () const
double GetRotAngle (Vector &axis, double eps=epsilon) const
void GetEulerZYZ (double &alfa, double &beta, double &gamma) const
void GetRPY (double &roll, double &pitch, double &yaw) const
void GetEulerZYX (double &Alfa, double &Beta, double &Gamma) const
Twist operator* (const Twist &arg) const
Wrench operator* (const Wrench &arg) const
Vector UnitX () const
 Access to the underlying unitvectors of the rotation matrix.
void UnitX (const Vector &X)
 Access to the underlying unitvectors of the rotation matrix.
Vector UnitY () const
 Access to the underlying unitvectors of the rotation matrix.
void UnitY (const Vector &X)
 Access to the underlying unitvectors of the rotation matrix.
Vector UnitZ () const
 Access to the underlying unitvectors of the rotation matrix.
void UnitZ (const Vector &X)
 Access to the underlying unitvectors of the rotation matrix.

Static Public Member Functions

static Rotation Identity ()
 Gives back an identity rotaton matrix.
static Rotation RotX (double angle)
 The Rot... static functions give the value of the appropriate rotation matrix back.
static Rotation RotY (double angle)
 The Rot... static functions give the value of the appropriate rotation matrix back.
static Rotation RotZ (double angle)
 The Rot... static functions give the value of the appropriate rotation matrix back.
static Rotation Rot (const Vector &rotaxis, double angle)
static Rotation Rot2 (const Vector &rotvec, double angle)
 Along an arbitrary axes. rotvec should be normalized.
static Rotation EulerZYZ (double Alfa, double Beta, double Gamma)
static Rotation RPY (double roll, double pitch, double yaw)
static Rotation EulerZYX (double Alfa, double Beta, double Gamma)

Public Attributes

double data [9]

Friends

class Frame
Rotation operator* (const Rotation &lhs, const Rotation &rhs)
bool Equal (const Rotation &a, const Rotation &b, double eps=epsilon)
bool operator== (const Rotation &a, const Rotation &b)
 The literal equality operator==(), also identical.
bool operator!= (const Rotation &a, const Rotation &b)
 The literal inequality operator!=()

Detailed Description

represents rotations in 3 dimensional space.

This class represents a rotation matrix with the following conventions :

     Suppose V2 = R*V,                                    (1)
     V is expressed in frame B
     V2 is expressed in frame A
     This matrix R consists of 3 collumns [ X,Y,Z ],
     X,Y, and Z contain the axes of frame B, expressed in frame A
     Because of linearity expr(1) is valid.
 

This class only represents rotational_interpolation, not translation Two interpretations are possible for rotation angles. if you rotate with angle around X frame A to have frame B, then the result of SetRotX is equal to frame B expressed wrt A. In code:

      Rotation R;
      F_A_B = R.SetRotX(angle);
 

Secondly, if you take the following code :

      Vector p,p2; Rotation R;
      R.SetRotX(angle);
      p2 = R*p;
 

then the frame p2 is rotated around X axis with (-angle). Analogue reasonings can be applyd to SetRotY,SetRotZ,SetRot

type
Concrete implementation

Definition at line 296 of file frames.hpp.


Constructor & Destructor Documentation

KDL::Rotation::Rotation ( ) [inline]
Rotation::Rotation ( double  Xx,
double  Yx,
double  Zx,
double  Xy,
double  Yy,
double  Zy,
double  Xz,
double  Yz,
double  Zz 
) [inline]

Definition at line 499 of file frames.inl.

References data.

Rotation::Rotation ( const Vector x,
const Vector y,
const Vector z 
) [inline]

Definition at line 509 of file frames.inl.

References KDL::Vector::data, and data.


Member Function Documentation

void KDL::Rotation::DoRotX ( double  angle) [inline]

The DoRot... functions apply a rotation R to *this,such that *this = *this * Rot.. DoRot... functions are only defined when they can be executed more efficiently

void KDL::Rotation::DoRotY ( double  angle) [inline]

The DoRot... functions apply a rotation R to *this,such that *this = *this * Rot.. DoRot... functions are only defined when they can be executed more efficiently

void KDL::Rotation::DoRotZ ( double  angle) [inline]

The DoRot... functions apply a rotation R to *this,such that *this = *this * Rot.. DoRot... functions are only defined when they can be executed more efficiently

static Rotation KDL::Rotation::EulerZYX ( double  Alfa,
double  Beta,
double  Gamma 
) [inline, static]

Gives back a rotation matrix specified with EulerZYX convention : First rotate around Z with alfa, then around the new Y with beta, then around new X with gamma.

closely related to RPY-convention

Definition at line 433 of file frames.hpp.

References RPY().

Referenced by posrandom(), and random().

Rotation KDL::Rotation::EulerZYZ ( double  Alfa,
double  Beta,
double  Gamma 
) [static]

Gives back a rotation matrix specified with EulerZYZ convention : First rotate around Z with alfa, then around the new Y with beta, then around new Z with gamma.

Definition at line 220 of file frames.cpp.

References KDL::cos(), Rotation(), and KDL::sin().

void KDL::Rotation::GetEulerZYX ( double &  Alfa,
double &  Beta,
double &  Gamma 
) const [inline]

GetEulerZYX gets the euler ZYX parameters of a rotation : First rotate around Z with alfa, then around the new Y with beta, then around new X with gamma.

Range of the results of GetEulerZYX : -PI <= alfa <= PI -PI <= gamma <= PI -PI/2 <= beta <= PI/2

Closely related to RPY-convention.

Definition at line 448 of file frames.hpp.

References GetRPY().

void KDL::Rotation::GetEulerZYZ ( double &  alfa,
double &  beta,
double &  gamma 
) const

Gives back the EulerZYZ convention description of the rotation matrix : First rotate around Z with alfa, then around the new Y with beta, then around new Z with gamma.

Variables are bound by (-PI <= alfa <= PI), (0 <= beta <= PI), (-PI <= alfa <= PI)

Definition at line 233 of file frames.cpp.

References KDL::atan2(), data, KDL::epsilon, fabs(), KDL::PI, KDL::sqr(), and KDL::sqrt().

Vector KDL::Rotation::GetRot ( ) const

Returns a vector with the direction of the equiv. axis and its norm is angle

Definition at line 297 of file frames.cpp.

References KDL::atan2(), KDL::Vector::data, data, KDL::epsilon, KDL::Vector::Norm(), and KDL::PI.

Referenced by GetJointRotation().

double KDL::Rotation::GetRotAngle ( Vector axis,
double  eps = epsilon 
) const

Returns the rotation angle around the equiv. axis

Parameters:
axisthe rotation axis is returned in this variable
eps: in the case of angle == 0 : rot axis is undefined and choosen to be +/- Z-axis in the case of angle == PI : 2 solutions, positive Z-component of the axis is choosen.
Returns:
returns the rotation angle (between [0..PI] )

Returns the rotation angle around the equiv. axis

Parameters:
axisthe rotation axis is returned in this variable
eps: in the case of angle == 0 : rot axis is undefined and choosen to be +/- Z-axis in the case of angle == PI : 2 solutions, positive Z-component of the axis is choosen.
Returns:
returns the rotation angle (between [0..PI] ) /todo : Check corresponding routines in rframes and rrframes

Definition at line 354 of file frames.cpp.

References KDL::acos(), angle(), data, KDL::PI, KDL::sin(), and KDL::sqrt().

void KDL::Rotation::GetRPY ( double &  roll,
double &  pitch,
double &  yaw 
) const

Gives back a vector in RPY coordinates, variables are bound by -PI <= roll <= PI -PI <= Yaw <= PI -PI/2 <= PITCH <= PI/2

convention : first rotate around X with roll, then around the old Y with pitch, then around old Z with alfa

Definition at line 207 of file frames.cpp.

References KDL::atan2(), data, KDL::epsilon, fabs(), KDL::PI, KDL::sign(), KDL::sqr(), and KDL::sqrt().

Referenced by GetEulerZYX().

void KDL::Rotation::getValue ( float *  oglmat) const [inline]
Vector2 KDL::Rotation::GetXZRot ( ) const

Returns a 2D vector representing the equivalent rotation in the XZ plane that brings the Y axis onto the Matrix Y axis and its norm is angle

Definition at line 330 of file frames.cpp.

References KDL::acos(), data, KDL::epsilon, norm(), KDL::Vector2::Normalize(), and KDL::PI.

Referenced by GetJointRotation().

static Rotation KDL::Rotation::Identity ( ) [inline, static]

Gives back an identity rotaton matrix.

Referenced by Rotation().

Rotation KDL::Rotation::Inverse ( ) const [inline]

Gives back the inverse rotation matrix of *this.

Referenced by base_callback(), iTaSC::updateJoint(), and iTaSC::MovingFrame::updateKinematics().

Vector KDL::Rotation::Inverse ( const Vector v) const [inline]

The same as R.Inverse()*v but more efficient.

Twist KDL::Rotation::Inverse ( const Twist arg) const [inline]

The same as R.Inverse()*arg but more efficient.

Wrench KDL::Rotation::Inverse ( const Wrench arg) const [inline]

The same as R.Inverse()*arg but more efficient.

double & Rotation::operator() ( int  i,
int  j 
) [inline]

Access to elements 0..2,0..2, bounds are checked when NDEBUG is not set.

Definition at line 489 of file frames.inl.

References data, and FRAMES_CHECKI.

double KDL::Rotation::operator() ( int  i,
int  j 
) const [inline]

Access to elements 0..2,0..2, bounds are checked when NDEBUG is not set.

Wrench KDL::Rotation::operator* ( const Wrench arg) const [inline]

Transformation of the base to which the wrench is expressed. Complexity : 18M+12A

See also:
Frame*Wrench for a transformation that also transforms the force reference point.
Vector KDL::Rotation::operator* ( const Vector v) const [inline]

Defines a multiplication R*V between a Rotation R and a Vector V. Complexity : 9M+6A

Twist KDL::Rotation::operator* ( const Twist arg) const [inline]

Transformation of the base to which the twist is expressed. Complexity : 18M+12A

See also:
Frame*Twist for a transformation that also transforms the velocity reference point.
Rotation& KDL::Rotation::operator= ( const Rotation arg) [inline]
void KDL::Rotation::Ortho ( )

Definition at line 169 of file frames.cpp.

References data, credits_svn_gen::e, KDL::sqr(), and KDL::sqrt().

Rotation KDL::Rotation::Rot ( const Vector rotaxis,
double  angle 
) [static]

Along an arbitrary axes. It is not necessary to normalize rotaxis. returns identity rotation matrix in the case that the norm of rotaxis is to small to be used.

Definition at line 250 of file frames.cpp.

References KDL::cos(), KDL::Vector::Normalize(), Rotation(), and KDL::sin().

Referenced by KDL::Frame2::Integrate().

Rotation KDL::Rotation::Rot2 ( const Vector rotvec,
double  angle 
) [static]

Along an arbitrary axes. rotvec should be normalized.

Definition at line 273 of file frames.cpp.

References KDL::cos(), Rotation(), and KDL::sin().

static Rotation KDL::Rotation::RotX ( double  angle) [inline, static]

The Rot... static functions give the value of the appropriate rotation matrix back.

Referenced by KDL::Joint::pose(), and RemoveEulerAngleFromMatrix().

static Rotation KDL::Rotation::RotY ( double  angle) [inline, static]

The Rot... static functions give the value of the appropriate rotation matrix back.

Referenced by KDL::Joint::pose(), and RemoveEulerAngleFromMatrix().

static Rotation KDL::Rotation::RotZ ( double  angle) [inline, static]

The Rot... static functions give the value of the appropriate rotation matrix back.

Referenced by KDL::Joint::pose(), and RemoveEulerAngleFromMatrix().

Rotation KDL::Rotation::RPY ( double  roll,
double  pitch,
double  yaw 
) [static]

Sets the value of this object to a rotation specified with RPY convention: first rotate around X with roll, then around the old Y with pitch, then around old Z with alfa

Definition at line 195 of file frames.cpp.

References KDL::cos(), Rotation(), and KDL::sin().

Referenced by EulerZYX().

void KDL::Rotation::SetInverse ( ) [inline]

Sets the value of *this to its inverse.

void KDL::Rotation::setValue ( float *  oglmat) [inline]

Referenced by convert_pose().

void KDL::Rotation::UnitX ( const Vector X) [inline]

Access to the underlying unitvectors of the rotation matrix.

Definition at line 470 of file frames.hpp.

References data.

Vector KDL::Rotation::UnitX ( ) const [inline]

Access to the underlying unitvectors of the rotation matrix.

Definition at line 465 of file frames.hpp.

References data.

Referenced by base_callback().

Vector KDL::Rotation::UnitY ( ) const [inline]

Access to the underlying unitvectors of the rotation matrix.

Definition at line 477 of file frames.hpp.

References data.

Referenced by base_callback().

void KDL::Rotation::UnitY ( const Vector X) [inline]

Access to the underlying unitvectors of the rotation matrix.

Definition at line 482 of file frames.hpp.

References data.

Vector KDL::Rotation::UnitZ ( ) const [inline]

Access to the underlying unitvectors of the rotation matrix.

Definition at line 489 of file frames.hpp.

References data.

Referenced by base_callback().

void KDL::Rotation::UnitZ ( const Vector X) [inline]

Access to the underlying unitvectors of the rotation matrix.

Definition at line 494 of file frames.hpp.

References data.


Friends And Related Function Documentation

bool Equal ( const Rotation a,
const Rotation b,
double  eps = epsilon 
) [friend]

do not use operator == because the definition of Equal(.,.) is slightly different. It compares whether the 2 arguments are equal in an eps-interval

Definition at line 157 of file frames.cpp.

friend class Frame [friend]

Definition at line 509 of file frames.hpp.

bool operator!= ( const Rotation a,
const Rotation b 
) [friend]

The literal inequality operator!=()

Rotation operator* ( const Rotation lhs,
const Rotation rhs 
) [friend]

Definition at line 177 of file frames.cpp.

bool operator== ( const Rotation a,
const Rotation b 
) [friend]

The literal equality operator==(), also identical.

Definition at line 377 of file frames.cpp.


Member Data Documentation


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