TypeIIRMLVelocity.cpp
Go to the documentation of this file.
1 // ---------------------- Doxygen info ----------------------
38 // ----------------------------------------------------------
39 // For a convenient reading of this file's source code,
40 // please use a tab width of four characters.
41 // ----------------------------------------------------------
42 
43 
44 #include <TypeIIRMLVelocity.h>
45 #include <TypeIIRMLMath.h>
46 #include <TypeIIRMLDecisions.h>
49 #include <RMLVector.h>
50 #include <ReflexxesAPI.h>
51 #include <RMLVelocityFlags.h>
52 
53 
54 
55 using namespace TypeIIRMLMath;
56 
57 
58 //****************************************************************************
59 // TypeIIRMLVelocity()
60 
61 TypeIIRMLVelocity::TypeIIRMLVelocity( const unsigned int &DegreesOfFreedom
62  , const double &CycleTimeInSeconds)
63 {
64  this->CurrentTrajectoryIsPhaseSynchronized = false ;
65  this->CalculatePositionalExtremsFlag = false ;
66  this->CurrentTrajectoryIsNotSynchronized = false ;
67 
68  this->ReturnValue = ReflexxesAPI::RML_ERROR ;
69  this->DOFWithGreatestExecutionTime = 0 ;
70 
71  this->NumberOfDOFs = DegreesOfFreedom ;
72  this->CycleTime = CycleTimeInSeconds ;
73  this->InternalClockInSeconds = 0.0 ;
74  this->SynchronizationTime = 0.0 ;
75 
76  this->PhaseSyncSelectionVector = new RMLBoolVector (this->NumberOfDOFs);
77 
78  this->ExecutionTimes = new RMLDoubleVector (this->NumberOfDOFs);
79  this->PhaseSynchronizationReferenceVector = new RMLDoubleVector (this->NumberOfDOFs);
80  this->PhaseSynchronizationCurrentVelocityVector = new RMLDoubleVector (this->NumberOfDOFs);
81  this->PhaseSynchronizationTargetVelocityVector = new RMLDoubleVector (this->NumberOfDOFs);
82  this->PhaseSynchronizationMaxAccelerationVector = new RMLDoubleVector (this->NumberOfDOFs);
83 
84  this->OldInputParameters = new RMLVelocityInputParameters (this->NumberOfDOFs);
85  this->CurrentInputParameters = new RMLVelocityInputParameters (this->NumberOfDOFs);
86 
87  this->OutputParameters = new RMLVelocityOutputParameters (this->NumberOfDOFs);
88 
89  this->Polynomials = new MotionPolynomials [this->NumberOfDOFs];
90 }
91 
92 
93 //****************************************************************************
94 // ~TypeIIRMLVelocity()
95 
97 {
98  delete this->PhaseSyncSelectionVector ;
99 
100  delete this->ExecutionTimes ;
101  delete this->PhaseSynchronizationReferenceVector ;
102  delete this->PhaseSynchronizationCurrentVelocityVector ;
103  delete this->PhaseSynchronizationTargetVelocityVector ;
104  delete this->PhaseSynchronizationMaxAccelerationVector ;
105 
106  delete this->OldInputParameters ;
107  delete this->CurrentInputParameters ;
108  delete this->OutputParameters ;
109 
110  delete[] this->Polynomials ;
111 
112  this->PhaseSyncSelectionVector = NULL ;
113  this->ExecutionTimes = NULL ;
114  this->PhaseSynchronizationReferenceVector = NULL ;
115  this->PhaseSynchronizationCurrentVelocityVector = NULL ;
116  this->PhaseSynchronizationTargetVelocityVector = NULL ;
117  this->PhaseSynchronizationMaxAccelerationVector = NULL ;
118 
119  this->OldInputParameters = NULL ;
120  this->CurrentInputParameters = NULL ;
121  this->OutputParameters = NULL ;
122 
123  this->Polynomials = NULL ;
124 }
125 
126 
127 //****************************************************************************
128 // GetNextStateOfMotion()
129 
131  , RMLVelocityOutputParameters *OutputValues
132  , const RMLVelocityFlags &Flags)
133 {
134  bool ErroneousInputValues = false
135  , StartANewCalculation = false ;
136 
137  unsigned int i = 0 ;
138 
139  if ( (OutputValues == NULL)
140  || (&InputValues == NULL)
141  || (&Flags == NULL) )
142  {
143  this->ReturnValue = ReflexxesAPI::RML_ERROR_NULL_POINTER;
144  return(this->ReturnValue);
145  }
146 
147  if ( (this->NumberOfDOFs != InputValues.GetNumberOfDOFs())
148  || (this->NumberOfDOFs != OutputValues->GetNumberOfDOFs()) )
149  {
150  this->ReturnValue = ReflexxesAPI::RML_ERROR_NUMBER_OF_DOFS;
151  return(this->ReturnValue);
152  }
153 
154  this->CalculatePositionalExtremsFlag = Flags.EnableTheCalculationOfTheExtremumMotionStates;
155 
156  *(this->CurrentInputParameters) = InputValues;
157 
158  if (Flags != this->OldFlags)
159  {
160  StartANewCalculation = true;
161  }
162 
163  // check whether parameters have changed
164  if (!StartANewCalculation)
165  {
166  if ( *(this->CurrentInputParameters->SelectionVector)
167  !=
168  *(this->OldInputParameters->SelectionVector) )
169  {
170  StartANewCalculation = true;
171  }
172  else
173  {
174  for (i = 0; i < this->NumberOfDOFs; i++)
175  {
176  if ((this->CurrentInputParameters->SelectionVector->VecData)[i])
177  {
178  if (!( IsInputEpsilonEqual(
179  (this->CurrentInputParameters->CurrentVelocityVector->VecData)[i]
180  , (this->OutputParameters->NewVelocityVector->VecData)[i])
182  (this->CurrentInputParameters->MaxAccelerationVector->VecData)[i]
183  , (this->OldInputParameters->MaxAccelerationVector->VecData)[i])
185  (this->CurrentInputParameters->TargetVelocityVector->VecData)[i]
186  , (this->OldInputParameters->TargetVelocityVector->VecData)[i])
188  (this->CurrentInputParameters->CurrentPositionVector->VecData)[i]
189  , (this->OutputParameters->NewPositionVector->VecData)[i])))
190  {
191  StartANewCalculation = true;
192  break;
193  }
194  }
195  }
196  }
197  }
198 
199  if ( (StartANewCalculation)
200  || ( ( this->ReturnValue != ReflexxesAPI::RML_WORKING)
201  && ( this->ReturnValue != ReflexxesAPI::RML_FINAL_STATE_REACHED) ) )
202  {
203  this->InternalClockInSeconds = this->CycleTime;
204  StartANewCalculation = true;
205  // if the values have changed, we have to start a
206  // trajectory computation
207 
208  this->SynchronizationTime = 0.0;
209  }
210  else
211  {
212  this->InternalClockInSeconds += this->CycleTime;
213  this->SynchronizationTime -= this->CycleTime;
214 
215  if (this->SynchronizationTime < 0.0)
216  {
217  this->SynchronizationTime = 0.0;
218  }
219  }
220 
221  *(this->OldInputParameters) = InputValues ;
222  this->OldFlags = Flags ;
223 
224  if (StartANewCalculation)
225  {
226  this->CurrentTrajectoryIsPhaseSynchronized = (Flags.SynchronizationBehavior == RMLFlags::ONLY_PHASE_SYNCHRONIZATION)
228 
229  for (i = 0; i < this->NumberOfDOFs; i++)
230  {
231  if ((this->CurrentInputParameters->SelectionVector->VecData)[i])
232  {
233  if (this->CurrentInputParameters->MaxAccelerationVector->VecData[i] <= 0.0)
234  {
235  ErroneousInputValues = true;
236  }
237  }
238  }
239 
240  if (ErroneousInputValues)
241  {
242  this->FallBackStrategy( *(this->CurrentInputParameters)
243  , this->OutputParameters );
244 
245  *OutputValues = *(this->OutputParameters);
247  return(this->ReturnValue);
248  }
249 
250  this->CurrentTrajectoryIsNotSynchronized = ( Flags.SynchronizationBehavior == RMLFlags::NO_SYNCHRONIZATION );
251 
252  this->CurrentTrajectoryIsPhaseSynchronized = (( Flags.SynchronizationBehavior == RMLFlags::ONLY_PHASE_SYNCHRONIZATION )
254 
255 
256  this->CalculateExecutionTimes();
257 
258  this->SynchronizationTime = 0.0;
259 
260  for(i = 0; i < this->NumberOfDOFs; i++)
261  {
262  if(this->CurrentInputParameters->SelectionVector->VecData[i])
263  {
264  if ( (this->ExecutionTimes->VecData)[i] > this->SynchronizationTime )
265  {
266  this->SynchronizationTime = (this->ExecutionTimes->VecData)[i];
267  this->DOFWithGreatestExecutionTime = i;
268  }
269  }
270  }
271 
273  && (InputValues.MinimumSynchronizationTime > this->SynchronizationTime ))
274  {
275  this->SynchronizationTime = InputValues.MinimumSynchronizationTime;
276  }
277 
278  if (this->CurrentTrajectoryIsPhaseSynchronized)
279  {
280  this->ComputePhaseSynchronizationParameters();
281  }
282 
283  if ( (!this->CurrentTrajectoryIsPhaseSynchronized )
285  {
286  this->FallBackStrategy( *(this->CurrentInputParameters)
287  , this->OutputParameters );
288 
289  *OutputValues = *(this->OutputParameters);
290  if (InputValues.CheckForValidity())
291  {
293  }
294  else
295  {
297  }
298  return(this->ReturnValue);
299  }
300 
303  && (this->CurrentTrajectoryIsPhaseSynchronized == false ) ) )
304  {
305  for (i = 0; i < this->NumberOfDOFs; i++)
306  {
307  this->CurrentInputParameters->MaxAccelerationVector->VecData[i] =
308  fabs( (this->CurrentInputParameters->CurrentVelocityVector->VecData )[i]
309  - (this->CurrentInputParameters->TargetVelocityVector->VecData )[i])
310  / this->SynchronizationTime;
311  }
312  }
313 
314  this->ComputeTrajectoryParameters();
315  }
316 
317  this->OutputParameters->ANewCalculationWasPerformed = StartANewCalculation;
318 
319  this->ReturnValue = this->ComputeAndSetOutputParameters( this->InternalClockInSeconds
320  , this->OutputParameters );
321 
322  this->OutputParameters->TrajectoryIsPhaseSynchronized = this->CurrentTrajectoryIsPhaseSynchronized;
323 
324  if (this->CurrentTrajectoryIsNotSynchronized)
325  {
326  this->OutputParameters->SynchronizationTime = 0.0;
327  this->OutputParameters->DOFWithTheGreatestExecutionTime = this->DOFWithGreatestExecutionTime;
328 
329  for (i = 0; i < this->NumberOfDOFs; i++)
330  {
331  if (this->CurrentInputParameters->SelectionVector->VecData[i])
332  {
333  this->OutputParameters->ExecutionTimes->VecData[i] = (this->ExecutionTimes->VecData)[i]
334  - this->InternalClockInSeconds
335  + this->CycleTime;
336 
337  if (this->OutputParameters->ExecutionTimes->VecData[i] < 0.0)
338  {
339  this->OutputParameters->ExecutionTimes->VecData[i] = 0.0;
340  }
341  }
342  else
343  {
344  this->OutputParameters->ExecutionTimes->VecData[i] = 0.0;
345  }
346  }
347  }
348  else
349  {
350  this->OutputParameters->SynchronizationTime = this->SynchronizationTime;
351  this->OutputParameters->DOFWithTheGreatestExecutionTime = 0;
352 
353  for (i = 0; i < this->NumberOfDOFs; i++)
354  {
355  if (this->CurrentInputParameters->SelectionVector->VecData[i])
356  {
357  this->OutputParameters->ExecutionTimes->VecData[i] = this->SynchronizationTime;
358  }
359  else
360  {
361  this->OutputParameters->ExecutionTimes->VecData[i] = 0.0;
362  }
363  }
364  }
365 
366  if (this->CalculatePositionalExtremsFlag)
367  {
368  this->CalculatePositionalExtrems( this->InternalClockInSeconds - this->CycleTime
369  , this->OutputParameters );
370  }
371  else
372  {
373  this->SetPositionalExtremsToZero(this->OutputParameters);
374  }
375 
376  *OutputValues = *(this->OutputParameters);
377 
378  return(this->ReturnValue);
379 }
380 
381 
382 //****************************************************************************
383 // GetNextStateOfMotionAtTime()
384 
385 int TypeIIRMLVelocity::GetNextStateOfMotionAtTime( const double &TimeValueInSeconds
386  , RMLVelocityOutputParameters *OutputValues ) const
387 {
388  unsigned int i = 0;
389 
390  int ReturnValueOfThisMethod = ReflexxesAPI::RML_FINAL_STATE_REACHED;
391 
392  double InternalTime = TimeValueInSeconds
393  + this->InternalClockInSeconds
394  - this->CycleTime;
395 
396  if ( ( this->ReturnValue != ReflexxesAPI::RML_WORKING )
397  && ( this->ReturnValue != ReflexxesAPI::RML_FINAL_STATE_REACHED ) )
398  {
399  return(this->ReturnValue);
400  }
401 
402  if ( ( TimeValueInSeconds < 0.0 )
403  || ( InternalTime > RML_MAX_EXECUTION_TIME ) )
404  {
406  }
407 
408  if ( OutputValues == NULL )
409  {
411  }
412 
413  if (OutputValues->NumberOfDOFs != this->NumberOfDOFs)
414  {
416  }
417 
418  OutputValues->ANewCalculationWasPerformed = false;
419 
420  ReturnValueOfThisMethod = this->ComputeAndSetOutputParameters( InternalTime
421  , OutputValues );
422 
423  OutputValues->TrajectoryIsPhaseSynchronized = this->CurrentTrajectoryIsPhaseSynchronized;
424 
425  if (this->CurrentTrajectoryIsNotSynchronized)
426  {
427  OutputValues->SynchronizationTime = 0.0;
428  OutputValues->DOFWithTheGreatestExecutionTime = this->DOFWithGreatestExecutionTime;
429 
430  for (i = 0; i < this->NumberOfDOFs; i++)
431  {
432  if (this->CurrentInputParameters->SelectionVector->VecData[i])
433  {
434  OutputValues->ExecutionTimes->VecData[i] = (this->ExecutionTimes->VecData)[i]
435  - this->InternalClockInSeconds
436  + this->CycleTime
437  - InternalTime;
438 
439  if (OutputValues->ExecutionTimes->VecData[i] < 0.0)
440  {
441  OutputValues->ExecutionTimes->VecData[i] = 0.0;
442  }
443  }
444  else
445  {
446  OutputValues->ExecutionTimes->VecData[i] = 0.0;
447  }
448  }
449  }
450  else
451  {
452  OutputValues->SynchronizationTime = this->SynchronizationTime - InternalTime;
453  OutputValues->DOFWithTheGreatestExecutionTime = this->DOFWithGreatestExecutionTime;
454 
455  for (i = 0; i < this->NumberOfDOFs; i++)
456  {
457  if (this->CurrentInputParameters->SelectionVector->VecData[i])
458  {
459  OutputValues->ExecutionTimes->VecData[i] = this->SynchronizationTime
460  - InternalTime;
461 
462  if (OutputValues->ExecutionTimes->VecData[i] < 0.0)
463  {
464  OutputValues->ExecutionTimes->VecData[i] = 0.0;
465  }
466  }
467  else
468  {
469  OutputValues->ExecutionTimes->VecData[i] = 0.0;
470  }
471  }
472  }
473 
474  if (this->CalculatePositionalExtremsFlag)
475  {
476  this->CalculatePositionalExtrems( InternalTime
477  , OutputValues);
478  }
479  else
480  {
481  this->SetPositionalExtremsToZero(OutputValues);
482  }
483 
484  return(ReturnValueOfThisMethod);
485 }
486 
487 
488 //****************************************************************************
489 // operator = ()
490 
492 {
493  unsigned int i = 0;
494 
495  this->CurrentTrajectoryIsPhaseSynchronized = TypeIIRMLObject.CurrentTrajectoryIsPhaseSynchronized ;
496  this->CalculatePositionalExtremsFlag = TypeIIRMLObject.CalculatePositionalExtremsFlag ;
497  this->CurrentTrajectoryIsNotSynchronized = TypeIIRMLObject.CurrentTrajectoryIsNotSynchronized ;
498 
499  this->ReturnValue = TypeIIRMLObject.ReturnValue ;
500  this->DOFWithGreatestExecutionTime = TypeIIRMLObject.DOFWithGreatestExecutionTime ;
501 
502  this->NumberOfDOFs = TypeIIRMLObject.NumberOfDOFs ;
503  this->CycleTime = TypeIIRMLObject.CycleTime ;
504  this->InternalClockInSeconds = TypeIIRMLObject.InternalClockInSeconds ;
505  this->SynchronizationTime = TypeIIRMLObject.SynchronizationTime ;
506 
507  *(this->PhaseSyncSelectionVector ) = *(TypeIIRMLObject.PhaseSyncSelectionVector ) ;
508 
509  *(this->ExecutionTimes ) = *(TypeIIRMLObject.ExecutionTimes ) ;
510  *(this->PhaseSynchronizationReferenceVector ) = *(TypeIIRMLObject.PhaseSynchronizationReferenceVector ) ;
511  *(this->PhaseSynchronizationCurrentVelocityVector ) = *(TypeIIRMLObject.PhaseSynchronizationCurrentVelocityVector ) ;
512  *(this->PhaseSynchronizationTargetVelocityVector ) = *(TypeIIRMLObject.PhaseSynchronizationTargetVelocityVector ) ;
513  *(this->PhaseSynchronizationMaxAccelerationVector ) = *(TypeIIRMLObject.PhaseSynchronizationMaxAccelerationVector ) ;
514 
515  *(this->OldInputParameters ) = *(TypeIIRMLObject.OldInputParameters ) ;
516  *(this->CurrentInputParameters ) = *(TypeIIRMLObject.CurrentInputParameters ) ;
517 
518  *(this->OutputParameters ) = *(TypeIIRMLObject.OutputParameters ) ;
519 
520  for ( i = 0; i < this->NumberOfDOFs; i++)
521  {
522  this->Polynomials[i] = TypeIIRMLObject.Polynomials[i];
523  }
524 
525  return(*this);
526 }
527 
528 
529 //****************************************************************************
530 // TypeIIRMLVelocity()
531 
532 
534 {
535  this->PhaseSyncSelectionVector = new RMLBoolVector (TypeIIRMLObject.NumberOfDOFs) ;
536 
537  this->ExecutionTimes = new RMLDoubleVector (TypeIIRMLObject.NumberOfDOFs) ;
538  this->PhaseSynchronizationReferenceVector = new RMLDoubleVector (TypeIIRMLObject.NumberOfDOFs) ;
539  this->PhaseSynchronizationCurrentVelocityVector = new RMLDoubleVector (TypeIIRMLObject.NumberOfDOFs) ;
540  this->PhaseSynchronizationTargetVelocityVector = new RMLDoubleVector (TypeIIRMLObject.NumberOfDOFs) ;
541  this->PhaseSynchronizationMaxAccelerationVector = new RMLDoubleVector (TypeIIRMLObject.NumberOfDOFs) ;
542 
543  this->OldInputParameters = new RMLVelocityInputParameters (TypeIIRMLObject.NumberOfDOFs) ;
544  this->CurrentInputParameters = new RMLVelocityInputParameters (TypeIIRMLObject.NumberOfDOFs) ;
545 
546  this->OutputParameters = new RMLVelocityOutputParameters (TypeIIRMLObject.NumberOfDOFs) ;
547 
548  this->Polynomials = new MotionPolynomials [TypeIIRMLObject.NumberOfDOFs] ;
549 
550  *this = TypeIIRMLObject ;
551 }
Header file for the dynamic vector class used for the Reflexxes Motion Libraries. ...
RMLVector< double > RMLDoubleVector
Type definition for vectors of double elements.
Definition: RMLVector.h:548
double InternalClockInSeconds
In order to prevent from recalculating the trajectory within every control cycle and to safe CPU time...
Header file for the class ReflexxesAPI (API of the Reflexxes Motion Libraries)
double SynchronizationTime
The synchronization time in seconds.
RMLDoubleVector * PhaseSynchronizationTargetVelocityVector
Target velocity vector used for the calculation of phase-synchronized motion trajectories.
Data structure containing flags to parameterize the execution of the velocity-based On-Line Trajector...
Header file for the class TypeIIRMLVelocity.
TypeIIRMLVelocity(const unsigned int &DegreesOfFreedom, const double &CycleTimeInSeconds)
Constructor of the class TypeIIRMLVelocity.
RMLDoubleVector * ExecutionTimes
A pointer to an RMLDoubleVector object that contains the execution times of all selected degrees of f...
T * VecData
Pointer to the actual vector data, that is, an array of type T objects.
Definition: RMLVector.h:524
int GetNextStateOfMotionAtTime(const double &TimeValueInSeconds, RMLVelocityOutputParameters *OutputValues) const
Once the method of TypeIIRMLVelocity::GetNextStateOfMotion() was successfully called to compute a tra...
double SynchronizationTime
If the trajectory is time- or phase-synchronized, this attribute will contain the synchronization tim...
Header file for decisions of the two decision trees of the Type II On-Line Trajectory Generation algo...
Three arrays of TypeIIRMLMath::TypeIIRMLPolynomial.
bool CalculatePositionalExtremsFlag
Indicates, whether the positional extremes are to be calculated.
unsigned int NumberOfDOFs
The number of degrees of freedom .
double MinimumSynchronizationTime
Minimum trajectory execution time in seconds specified by the user (optional input parameter) ...
Header file for functions and definitions of constant values and macros.
unsigned int GetNumberOfDOFs(void) const
Returns the number of degrees of freedom.
RMLDoubleVector * ExecutionTimes
Vector of double values, each of which represents an execution time that is used internally.
Header file for the class RMLVelocityInputParameters.
unsigned int GetNumberOfDOFs(void) const
Returns the number of degrees of freedom.
Header file for the class RMLVelocityFlags.
TypeIIRMLVelocity & operator=(const TypeIIRMLVelocity &TypeIIRMLObject)
Copy operator.
unsigned char SynchronizationBehavior
This value specifies the desired synchronization behavior.
Definition: RMLFlags.h:192
RMLBoolVector * PhaseSyncSelectionVector
Boolean vector, which contains the modified selection vector that is based on the original selection ...
unsigned int DOFWithTheGreatestExecutionTime
Index of the degree of freedom that requires the greatest execution time to reach its desired target ...
RMLVelocityInputParameters * CurrentInputParameters
Pointer to an RMLVelocityInputParameters object. This object contains a complete set of input values ...
double CycleTime
Contains the cycle time in seconds.
bool CurrentTrajectoryIsPhaseSynchronized
Indicates, whether the current trajectory is phase-synchronized.
Header file for the class RMLVelocityOutputParameters.
Class for the output parameters of the velocity-based On-Line Trajectory Generation algorithm...
Even if it is possible to calculate a phase-synchronized trajectory, only a time-synchronized traject...
Definition: RMLFlags.h:152
bool ANewCalculationWasPerformed
Indicates, whether a new computation was performed in the last cycle.
RMLDoubleVector * PhaseSynchronizationMaxAccelerationVector
Contains the adapted maximum acceleration vector for phase-synchronized trajectories.
RMLVelocityOutputParameters * OutputParameters
Pointer to an RMLVelocityOutputParameters object. This object contains the output parameters of the m...
RMLDoubleVector * PhaseSynchronizationCurrentVelocityVector
Current velocity vector used for the calculation of phase-synchronized motion trajectories.
Only phase-synchronized trajectories are allowed. If it is not possible calculate a phase-synchronize...
Definition: RMLFlags.h:159
bool CheckForValidity(void) const
Checks the input parameters for validity.
This is the default value. If it is possible to calculate a phase-synchronized (i.e., homothetic) trajectory, the algorithm will generate it. A more detailed description of this flag can be found on the page page_PSIfPossible.
Definition: RMLFlags.h:146
RMLDoubleVector * PhaseSynchronizationReferenceVector
Reference vector for phase-synchronized trajectories, with .
No synchronization will be performed, and all selected degrees of freedom are treated independently...
Definition: RMLFlags.h:163
unsigned int NumberOfDOFs
The number of degrees of freedom .
unsigned int DOFWithGreatestExecutionTime
Index of the degree of freedom that requires the greatest execution time.
#define RML_MAX_EXECUTION_TIME
Maximum value for the for the minimum trajectory execution time .
int ReturnValue
Contains the return value of the method TypeIIRMLVelocity::GetNextStateOfMotion() ...
bool TrajectoryIsPhaseSynchronized
Boolean flag that indicates whether the current trajectory is phase-synchronized. ...
Class for the input parameters of the velocity-based On-Line Trajectory Generation algorithm...
~TypeIIRMLVelocity(void)
Destructor of the class TypeIIRMLVelocity.
int GetNextStateOfMotion(const RMLVelocityInputParameters &InputValues, RMLVelocityOutputParameters *OutputValues, const RMLVelocityFlags &Flags)
The main method of the class TypeIIRMLVelocity. It executes the velocity-based Type II On-Line Trajec...
bool CurrentTrajectoryIsNotSynchronized
Indicates, that the current trajectory is not synchronized.
MotionPolynomials * Polynomials
Pointer to an array of MotionPolynomials objects, which contains the actual trajectory ...
RMLVector< bool > RMLBoolVector
Type definition for vectors of bool elements.
Definition: RMLVector.h:570
#define IsInputEpsilonEqual(A, B)
A macro that checks, whether the difference between the values &#39;A&#39; and &#39;B&#39; is less than RML_INPUT_VAL...
RMLVelocityInputParameters * OldInputParameters
Pointer to an RMLVelocityInputParameters object. In order to check, whether a new calculation has to ...
This class constitutes the user interface of velocity-based the Type II On-Line Trajectory Generation...
bool EnableTheCalculationOfTheExtremumMotionStates
A flag to enable or disable the calculation of the extremum states of motion of the currently calcula...
Definition: RMLFlags.h:227


libreflexxestype2
Author(s):
autogenerated on Sat Nov 21 2020 03:17:34