Reflexxes Motion Libraries
Manual and Documentation (Type II, Version 1.2.6)
|
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