Reflexxes Motion Libraries  Manual and Documentation (Type II, Version 1.2.6)
include/RMLVelocityInputParameters.h
Go to the documentation of this file.
00001 //  ---------------------- Doxygen info ----------------------
00043 //  ----------------------------------------------------------
00044 //   For a convenient reading of this file's source code,
00045 //   please use a tab width of four characters.
00046 //  ----------------------------------------------------------
00047
00048
00049 #ifndef __RMLVelocityInputParameters__
00050 #define __RMLVelocityInputParameters__
00051 
00052
00053 #include <RMLInputParameters.h>
00054 #include <math.h>
00055
00056
00057 //  ---------------------- Doxygen info ----------------------
00076 //  ----------------------------------------------------------
00077 class RMLVelocityInputParameters : public RMLInputParameters
00078 {
00079 public:
00080
00081
00082 //  ---------------------- Doxygen info ----------------------
00094 //  ----------------------------------------------------------
00095     RMLVelocityInputParameters(const unsigned int DegreesOfFreedom) : RMLInputParameters(DegreesOfFreedom)
00096     {
00097     }
00098
00099
00100 //  ---------------------- Doxygen info ----------------------
00112 //  ----------------------------------------------------------
00113     RMLVelocityInputParameters(const RMLVelocityInputParameters &IP) : RMLInputParameters(IP)
00114     {
00115     }
00116
00117
00118 //  ---------------------- Doxygen info ----------------------
00123 //  ----------------------------------------------------------
00124     ~RMLVelocityInputParameters(void)
00125     {
00126     }
00127
00128
00129 //  ---------------------- Doxygen info ----------------------
00137 //  ----------------------------------------------------------
00138     inline RMLVelocityInputParameters &operator = (const RMLVelocityInputParameters &IP)
00139     {
00140         RMLInputParameters::operator=(IP);
00141
00142         return(*this);
00143     }
00144
00145
00146
00147 // #############################################################################
00148
00149
00150 //  ---------------------- Doxygen info ----------------------
00158 //  ----------------------------------------------------------
00159     bool CheckForValidity(void) const
00160     {
00161         unsigned int        i                           =   0;
00162
00163         double              MinimumOrderOfMagnitude     =   0.0
00164                         ,   MaximumOrderOfMagnitude     =   0.0;
00165
00166         for (i = 0; i < this->NumberOfDOFs; i++)
00167         {
00168             if ((this->SelectionVector->VecData)[i])
00169             {
00170                 if (    ((this->MaxAccelerationVector->VecData)[i]  >=  (this->MaxJerkVector->VecData)                  [i] )
00171                     &&  ((this->MaxAccelerationVector->VecData)[i]  >=  fabs((this->TargetVelocityVector->VecData)      [i]))
00172                     &&  ((this->MaxAccelerationVector->VecData)[i]  >=  fabs((this->CurrentPositionVector->VecData)     [i]))
00173                     &&  ((this->MaxAccelerationVector->VecData)[i]  >=  fabs((this->CurrentVelocityVector->VecData)     [i]))
00174                     &&  ((this->MaxAccelerationVector->VecData)[i]  >=  fabs((this->CurrentAccelerationVector->VecData) [i])))
00175                 {
00176                     MaximumOrderOfMagnitude =   (this->MaxAccelerationVector->VecData)[i];
00177                 }
00178                 else
00179                 {
00180                     if (    ((this->MaxJerkVector->VecData)[i]  >=  fabs((this->TargetVelocityVector->VecData)      [i]))
00181                         &&  ((this->MaxJerkVector->VecData)[i]  >=  fabs((this->CurrentPositionVector->VecData)     [i]))
00182                         &&  ((this->MaxJerkVector->VecData)[i]  >=  fabs((this->CurrentVelocityVector->VecData)     [i]))
00183                         &&  ((this->MaxJerkVector->VecData)[i]  >=  fabs((this->CurrentAccelerationVector->VecData) [i])))
00184                     {
00185                         MaximumOrderOfMagnitude =   (this->MaxJerkVector->VecData)[i];
00186                     }
00187                     else
00188                     {
00189                         if (    (fabs((this->TargetVelocityVector->VecData)[i]) >=  fabs((this->CurrentPositionVector->VecData)     [i]))
00190                             &&  (fabs((this->TargetVelocityVector->VecData)[i]) >=  fabs((this->CurrentVelocityVector->VecData)     [i]))
00191                             &&  (fabs((this->TargetVelocityVector->VecData)[i]) >=  fabs((this->CurrentAccelerationVector->VecData) [i])))
00192                         {
00193                             MaximumOrderOfMagnitude =   fabs((this->TargetVelocityVector->VecData)[i]);
00194                         }
00195                         else
00196                         {
00197                             if (    (fabs((this->CurrentPositionVector->VecData)[i])    >=  fabs((this->CurrentVelocityVector->VecData)     [i]))
00198                                 &&  (fabs((this->CurrentPositionVector->VecData)[i])    >=  fabs((this->CurrentAccelerationVector->VecData) [i])))
00199                             {
00200                                 MaximumOrderOfMagnitude =   fabs((this->CurrentPositionVector->VecData)[i]);
00201                             }
00202                             else
00203                             {
00204                                 MaximumOrderOfMagnitude =   fabs((this->CurrentAccelerationVector->VecData)[i]);
00205                             }
00206                         }
00207                     }
00208                 }
00209
00210                 if ((this->MaxAccelerationVector->VecData)[i]   <=  (this->MaxJerkVector->VecData)[i])
00211                 {
00212                     MinimumOrderOfMagnitude =   (this->MaxAccelerationVector->VecData)[i];
00213                 }
00214                 else
00215                 {
00216                     MinimumOrderOfMagnitude =   (this->MaxJerkVector->VecData)[i];
00217                 }
00218
00219                 // The value of MinimumOrderOfMagnitude is greater than
00220                 // zero:
00221                 if (    (MaximumOrderOfMagnitude / MinimumOrderOfMagnitude)
00222                     >   (double)pow((float)10, (int)(RMLVelocityInputParameters::MAXIMUM_MAGNITUDE_RANGE)))
00223                 {
00224                     return(false);
00225                 }
00226             }
00227         }
00228
00229         if (this->MinimumSynchronizationTime > 1e10)
00230         {
00231             return(false);
00232         }
00233
00234         return(true);
00235     }
00236
00237
00238 //  ---------------------- Doxygen info ----------------------
00246 //  ----------------------------------------------------------
00247     void Echo(FILE* FileHandler = stdout) const
00248     {
00249         RMLInputParameters::Echo(FileHandler);
00250         return;
00251     }
00252
00253 protected:
00254
00255
00256     enum
00257     {
00258 //  ---------------------- Doxygen info ----------------------
00262 //  ----------------------------------------------------------
00263         MAXIMUM_MAGNITUDE_RANGE =   10
00264     };
00265
00266
00267
00268 };// class RMLVelocityInputParameters
00269
00270
00271
00272 #endif
00273 
00274
User documentation of the Reflexxes Motion Libraries by Reflexxes GmbH (Company Information, Impressum). This document was generated with Doxygen on Mon Jul 7 2014 13:21:08. Copyright 2010–2014.