utils.h
Go to the documentation of this file.
00001 /*
00002 ROBOOP -- A robotics object oriented package in C++
00003 Copyright (C) 1996-2004  Richard Gourdeau
00004 
00005 This library is free software; you can redistribute it and/or modify
00006 it under the terms of the GNU Lesser General Public License as
00007 published by the Free Software Foundation; either version 2.1 of the
00008 License, or (at your option) any later version.
00009 
00010 This library is distributed in the hope that it will be useful,
00011 but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 GNU Lesser General Public License for more details.
00014 
00015 You should have received a copy of the GNU Lesser General Public
00016 License along with this library; if not, write to the Free Software
00017 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 
00019 
00020 Report problems and direct all questions to:
00021 
00022 Richard Gourdeau
00023 Professeur Agrege
00024 Departement de genie electrique
00025 Ecole Polytechnique de Montreal
00026 C.P. 6079, Succ. Centre-Ville
00027 Montreal, Quebec, H3C 3A7
00028 
00029 email: richard.gourdeau@polymtl.ca
00030 
00031 -------------------------------------------------------------------------------
00032 Revision_history:
00033 
00034 2004/07/01: Etienne Lachance
00035    -Added doxygen documentation.
00036 
00037 2004/07/01: Ethan Tira-Thompson
00038     -Added support for newmat's use_namespace #define, using ROBOOP namespace
00039 
00040 2004/09/18: Etienne Lachance
00041    -Added deg2rad rad2deg
00042 
00043 2005/06/10: Carmine Lia
00044    -Added pinv
00045 -------------------------------------------------------------------------------
00046 */
00047 
00048 #ifndef __cplusplus
00049 #error Must use C++ for the type Robot
00050 #endif
00051 #ifndef UTILS_H
00052 #define UTILS_H
00053 
00059 
00060 static const char header_utils_rcsid[] = "$Id: utils.h,v 1.10 2006/05/16 16:11:15 gourdeau Exp $";
00061 
00062 #ifdef _MSC_VER                         // Microsoft
00063 #pragma warning (disable:4786)  /* Disable decorated name truncation warnings */
00064 #endif
00065 #include <stdio.h>
00066 #include <limits>
00067 #define WANT_STRING                  /* include.h will get string fns */
00068 #define WANT_STREAM                  /* include.h will get stream fns */
00069 #define WANT_FSTREAM                 /* include.h will get fstream fns */
00070 #define WANT_MATH                    /* include.h will get math fns */
00071                                      /* newmatap.h will get include.h */
00072 
00073 #include "newmatap.h"                /* need matrix applications */
00074 
00075 #include "newmatio.h"                /* need matrix output routines */
00076 
00077 #ifdef use_namespace
00078 namespace ROBOOP {
00079   using namespace NEWMAT;
00080 #endif
00081 
00082 #ifndef M_PI
00083 #define M_PI 3.14159265358979
00084 #endif
00085 
00086 #define GRAVITY 9.81
00087 
00088 // global variables
00089 extern Real fourbyfourident[];
00090 extern Real threebythreeident[];
00091 
00092 // angle conversion
00093 inline double deg2rad(const double angle_deg){ return angle_deg*M_PI/180; }
00094 inline double rad2deg(const double angle_rad){ return angle_rad*180/M_PI; }
00095 
00096 // vector operation 
00097 
00098 ReturnMatrix x_prod_matrix(const ColumnVector & x);
00099 
00100 ReturnMatrix pinv(const Matrix & M);
00101 
00102 // numerical analysis tools
00103 
00104 ReturnMatrix Integ_Trap(const ColumnVector & present, ColumnVector & past, const Real dt);
00105 
00106 void Runge_Kutta4(ReturnMatrix (*xdot)(Real time, const Matrix & xin),
00107                   const Matrix & xo, Real to, Real tf, int nsteps,
00108                   RowVector & tout, Matrix & xout);
00109 
00110 void Runge_Kutta4_Real_time(ReturnMatrix (*xdot)(Real time, const Matrix & xin),
00111                             const Matrix & xo, Real to, Real tf, int nsteps);
00112 
00113 void Runge_Kutta4_Real_time(ReturnMatrix (*xdot)(Real time, const Matrix & xin,
00114                             bool & exit, bool & init),
00115                             const Matrix & xo, Real to, Real tf, int nsteps);
00116 
00117 void odeint(ReturnMatrix (*xdot)(Real time, const Matrix & xin),
00118             Matrix & xo, Real to, Real tf, Real eps, Real h1, Real hmin,
00119             int & nok, int & nbad,
00120             RowVector & tout, Matrix & xout, Real dtsav);
00121 
00122 ReturnMatrix sign(const Matrix & x);
00123 
00124 short sign(const Real x);
00125 
00126 const double epsilon = 0.0000001;
00127 
00128 inline bool isZero(const double x)
00129 {
00130     if ( fabs(x) < epsilon)
00131     {
00132         return true;
00133     }
00134     return false;
00135 }
00136 
00137 
00138 // translation 
00139 ReturnMatrix trans(const ColumnVector & a);
00140 
00141 // rotation matrices 
00142 ReturnMatrix rotx(const Real alpha);
00143 ReturnMatrix roty(const Real beta);
00144 ReturnMatrix rotz(const Real gamma);
00145 ReturnMatrix rotk(const Real theta, const ColumnVector & k);
00146 
00147 ReturnMatrix rpy(const ColumnVector & a);
00148 ReturnMatrix eulzxz(const ColumnVector & a);
00149 ReturnMatrix rotd(const Real theta, const ColumnVector & k1, const ColumnVector & k2);
00150 
00151 
00152 // inverse on rotation matrices 
00153 ReturnMatrix irotk(const Matrix & R);
00154 ReturnMatrix irpy(const Matrix & R);
00155 ReturnMatrix ieulzxz(const Matrix & R);
00156 
00157 #ifdef use_namespace
00158 }
00159 #endif
00160 
00161 #endif
00162 


kni
Author(s): Martin Günther
autogenerated on Thu Aug 27 2015 13:40:07