INOS
cinosmovepathtrajectory.h
Go to the documentation of this file.
1//******************************************************************************
26//******************************************************************************
27#ifndef INC_CINOSMOVEPATHTRAJECTORY_H
28#define INC_CINOSMOVEPATHTRAJECTORY_H
29//------------------------------------------------------------------------------
30// defines
31//------------------------------------------------------------------------------
32//
33//------------------------------------------------------------------------------
34// includes
35//------------------------------------------------------------------------------
36//
37// system
38#include <inos.h>
39#include <cinosbaseramp.h>
40//
41// C++
42//
43// project
44//
45//------------------------------------------------------------------------------
46// struct definition
47//------------------------------------------------------------------------------
48//
75//
76//------------------------------------------------------------------------------
77// class definition
78//------------------------------------------------------------------------------
79//
81{
82 //--- user interface ---------------------------------------------------
83
84 // public member functions
85 public :
86
93 virtual uint32 GetMoveTime(double& adMoveTime, double adDelta = 0.0)
94 {
95 // base class always returns a 'not supported' error;
97 }
98
106
113
122
131
133 virtual uint32 Prepare();
134
136 virtual uint32 PrepareAppend() = 0;
137
139 virtual uint32 Append() = 0;
140
144 virtual uint32 Run(TINOSMovePathVec& vOffset, bool abDelegate);
146 virtual uint32 Stop() = 0;
148 virtual uint32 Break() = 0;
150 virtual uint32 Continue() = 0;
152 virtual uint32 Cancel();
153
156 TINOSMovePathVec& vPos,
157 TINOSMovePathVec& vVel,
158 TINOSMovePathVec& vAcc,
159 TINOSMovePathVec& vJrk);
162 TINOSMovePathVec& vPos,
163 TINOSMovePathVec& vVel,
164 TINOSMovePathVec& vAcc,
165 TINOSMovePathVec& vJrk);
166
167 virtual CINOSMovePathSegment* GetActSegment() {
168 return m_pActSegment;
169 }
170
175
179 TINOSMovePathVec &avPos,
180 TINOSMovePathVec &avVel,
181 TINOSMovePathVec &avAcc,
182 TINOSMovePathVec &avJrk);
183
185 enum {
186 eFlgNone = 0x00000000,
187 eFlgStopSupported = 0x00000001,
188 eFlgNeedsInterpolatorSegments = 0x00000002,
189 };
194 { return m_uFlags; };
195
207
208 //--- internals --------------------------------------------------------
209
210 friend class CINOSMovePath;
211 friend class CINOSMcRobot;
212
213 // constructor / destructor
214 public :
219
220 // protected members
221 protected :
224 { return m_pPath; };
227 { m_pPath = apPath; };
234
236 virtual uint32 iPrepare() = 0;
240 virtual bool GenData(CINOSMovePathSegment*& opSegment, double& adP,
241 TINOSMovePathVec& vPos) = 0;
243 enum {
244 ePutDataFlgNone = 0x00000000, // none
245 ePutDataFlgWaitIfFull = 0x00000001, // wait if buffer full
246 };
249 TINOSMovePathVec& vPos, uint32 auFlags);
250
263
265 virtual void iActiveHook();
266
269
272 double CalcRotationAngle(TINOSMovePathVec& vUnitVector1,
273 TINOSMovePathVec& vUnitVector2);
275 void CalcFollow(TINOSMovePathVec& vPos,
276 TINOSMovePathVec& vDir);
278 void GetPositionLast(TINOSMovePathVec& ovLast);
279
281 virtual CINCOObject* RequestRegister();
282
285 {
286 // check counter
287 if (m_uRegisterCnt > 0) {
288 // dec count
290 // destroy ?
291 if (m_uRegisterCnt == 0) {
292 // yes
293 delete m_pRegister;
294 // done
295 m_pRegister = nullptr;
296 } // end if
297 } // end if
298
299 } // end ReleaseRegister
300
302 CINCOObject* GetRegister()
303 {
304 return m_pRegister;
305 }
306
307 // protected members
308 protected :
310 inosName32 m_cType;
326 inos_std::vector<uint8> m_uMainCycleDownSampling;
327
328 inos_std::vector<CINOSMovePathResource*> m_vResources;
329
330 uint32 m_uNoResources = 0;
331
333 char m_cSpeedSet[64] = {0};
336
338 enum {
339 eFlgIntCancelRequest = 0x00000001
340 };
343
344 // buffer handling
345
348 eTypeActive,
349 eTypePassive
350 } m_eBufferType;
351
353 enum {
354 eFlgFull = 0x00000001,
355 eFlgNoMoreData = 0x00000002,
356 eFlgWrapAround = 0x00000004,
357 eFlgCalculated = 0x00000008,
358 eFlgDelegate = 0x00000010,
359 eFlgFollow = 0x00000020,
360 eFlgEnd = 0x00000040,
361 };
383 double* m_pBufferP;
385 TINOSMovePathVec* m_pBuffer;
389 TINOSMovePathVec m_vOffset;
390
391 // path logging handling
392
395
396 // generating data
397
403 uint8 m_uBusId;
409 double m_dTime;
411 double m_dP;
412
413 // running data
419 double m_dActP = 0.0;
421 TINOSMovePathVec m_vPos;
423 TINOSMovePathVec m_vVel;
425 TINOSMovePathVec m_vAcc;
427 TINOSMovePathVec m_vJrk;
428
431
432
438 inos_std::vector<uint8> m_vCycleDownSampling;
439
440 // filter handling
441
447 TINOSMovePathVec m_vFilterPos;
448
449 // follow mechanism
450
458 TINOSMovePathVec m_vFollowDir;
459
463 CINCOObject* m_pRegister = nullptr;
464
465 // dynamic
467};
468
469//------------------------------------------------------------------------------
470// end of file
471//------------------------------------------------------------------------------
472
473#endif // INC_CINOSMOVEPATHTRAJECTORY_H
Short comment.
#define DECLARE_DYNAMIC(aClass)
Definition cinospartitionmemory.h:328
Definition cinosmcmodule.h:1900
Definition cinosmcrobot.h:206
Definition cinosmovepathcurve.h:56
Definition cinosmovepathsegment.h:45
Definition cinosmovepathtrajectory.h:81
uint32 m_uFilterLength
filter length
Definition cinosmovepathtrajectory.h:443
TINOSMovePathVec * m_pBuffer
the buffer
Definition cinosmovepathtrajectory.h:385
void ReleaseRegister()
release inco registration
Definition cinosmovepathtrajectory.h:284
uint32 HandlePrestartEvent()
handle prestart event
virtual uint32 PrepareRun()
prepare trajectory to run
double m_dTime
current timestamp
Definition cinosmovepathtrajectory.h:409
inos_std::vector< uint8 > m_uMainCycleDownSampling
main cycle down sampling
Definition cinosmovepathtrajectory.h:326
uint32 WaitCmd(uint32 auCommand, uint32 auError=INOS_MOVEPATH_ERROR_NO_COMMAND_QUEUE)
wait for either auCommand or eCmdAbort
void GetActual(SINOSRampData &aActual)
Get actual path s,v,a,j.
Definition cinosmovepathtrajectory.h:200
double CalcRotationAngle(TINOSMovePathVec &vUnitVector1, TINOSMovePathVec &vUnitVector2)
uint32 m_uBufferTotalWr
buffer write total index
Definition cinosmovepathtrajectory.h:373
virtual uint32 PrepareEvents()
prepare events
CINOSMovePathTrajectory(class CINOSMovePath *apPath=NULL)
constructor
uint32 m_uBufferCnt
buffer entries
Definition cinosmovepathtrajectory.h:379
uint32 m_uBufferSize
buffer size
Definition cinosmovepathtrajectory.h:365
TINOSMovePathVec m_vFollowDir
actual direction vector
Definition cinosmovepathtrajectory.h:458
virtual uint32 Stop()=0
stop move path
class CINOSMovePathResourceAxis * GetAxis(uint32 auIndex)
get pointer to axis
uintid m_uActiveHookId
active hook id
Definition cinosmovepathtrajectory.h:387
uint32 HandleEvents()
handle events
virtual uint32 GetData(TINOSMovePathVec &vPos, TINOSMovePathVec &vVel, TINOSMovePathVec &vAcc, TINOSMovePathVec &vJrk)
get data from trajectory buffer
virtual uint32 iPrepare()=0
prepare run
uint8 m_uMainOversampling
main axis oversampling
Definition cinosmovepathtrajectory.h:324
uint64 m_uTicksStart
start ticks
Definition cinosmovepathtrajectory.h:399
uint32 m_uFollowIndex
index of axis to follow
Definition cinosmovepathtrajectory.h:452
double m_dCycleTime
cycle time
Definition cinosmovepathtrajectory.h:316
class CINOSMovePathCurve * GetPrepareCurve()
get pointer to my prepare curve
TINOSMovePathVec m_vPos
position
Definition cinosmovepathtrajectory.h:421
uint32 m_uBufferReady
buffer ready level
Definition cinosmovepathtrajectory.h:367
uint32 m_uBufferWr
buffer write index
Definition cinosmovepathtrajectory.h:371
class CINOSMovePath * m_pPath
pointer to my path
Definition cinosmovepathtrajectory.h:314
double m_dFollowFactor
follow unit factor
Definition cinosmovepathtrajectory.h:454
uint32 m_uBufferFlags
buffer flags
Definition cinosmovepathtrajectory.h:363
TINOSMovePathVec m_vVel
velocity
Definition cinosmovepathtrajectory.h:423
virtual uint32 Prepare()
prepare move path
TINOSMovePathVec m_vOffset
running offset
Definition cinosmovepathtrajectory.h:389
virtual uint32 Break()=0
break move path
virtual uint32 iCancelData()
internal cancel data
virtual uint32 PrepareAppend()=0
prepare trajectory of curve to append
virtual uint32 Run(TINOSMovePathVec &vOffset, bool abDelegate)
run move path
void GetPositionLast(TINOSMovePathVec &ovLast)
get last path position vector
uint32 GetBufferFillLevel() const
double m_dFilterFactor
filter
Definition cinosmovepathtrajectory.h:445
void CalcFollow(TINOSMovePathVec &vPos, TINOSMovePathVec &vDir)
calc follow axis
CINOSMovePathSegment * m_pActSegment
current act segment
Definition cinosmovepathtrajectory.h:434
CINOSMovePathSegment * m_pPathSegment
current segment
Definition cinosmovepathtrajectory.h:394
inos_std::vector< uint8 > m_vCycleDownSampling
main cycle down sampling
Definition cinosmovepathtrajectory.h:438
TINOSMovePathVec m_vFilterPos
filtered position
Definition cinosmovepathtrajectory.h:447
uint32 m_uBufferLow
buffer low level
Definition cinosmovepathtrajectory.h:369
virtual uint32 PutData(CINOSMovePathSegment *apSegment, double adP, TINOSMovePathVec &vPos, uint32 auFlags)
put data into trajectory buffer
uint32 m_uBusTicksPerAxisTick
bus ticks per axis tick
Definition cinosmovepathtrajectory.h:407
class CINOSMovePath * GetPath()
get pointer to my path
Definition cinosmovepathtrajectory.h:223
virtual uint32 Append()=0
prepare trajectory of curve to append
CINOSMovePathSegment * m_pNextSegment
next act segment
Definition cinosmovepathtrajectory.h:436
virtual uint32 GetMoveLength(double &adMoveLength)
Return the path length [path units].
CINCOObject * GetRegister()
get pointer to inco registration (if any)
Definition cinosmovepathtrajectory.h:302
uint8 m_uMainAxisIndex
main axis index
Definition cinosmovepathtrajectory.h:322
uint32 HandleCmd(uint32 auError=INOS_OK)
check command queue
double m_dP
current position
Definition cinosmovepathtrajectory.h:411
SINOSRampParam m_sSpeedSet
speedset
Definition cinosmovepathtrajectory.h:335
uint32 m_uBufferRd
buffer read index
Definition cinosmovepathtrajectory.h:375
class CINOSMovePathCurve * GetRunCurve()
get pointer to run curve
SINOSMovePathActual * m_pActual
actuals (handled over to inco registration of involved axes)
Definition cinosmovepathtrajectory.h:417
inosName32 m_cType
type
Definition cinosmovepathtrajectory.h:310
double * m_pBufferP
corresponding buffer virtual position P
Definition cinosmovepathtrajectory.h:383
virtual uint32 CancelData()
cancel trajectory buffer data
virtual ~CINOSMovePathTrajectory()
destructor
virtual bool GenData(CINOSMovePathSegment *&opSegment, double &adP, TINOSMovePathVec &vPos)=0
generate data
void EmitEvent(CINOSMovePathEvent *apEvent, uint64 auTicksStart)
emit event
uint8 m_uCycleDownSampling[DF_INOS_MOVEPATH_MAX_AXES]
main cycle down sampling
Definition cinosmovepathtrajectory.h:430
double m_dCycleTime_1
inverse cycle time
Definition cinosmovepathtrajectory.h:318
virtual CINCOObject * RequestRegister()
return pointer to inco registration
virtual uint32 GetMoveTicks(uint64 &adMoveTicks, double arDelta=0.0)
Return bus ticks the path needs until End - Delta.
virtual uint32 Continue()=0
continue move path
TINOSMovePathVec m_vJrk
jerk
Definition cinosmovepathtrajectory.h:427
virtual uint32 GetMoveTime(double &adMoveTime, double adDelta=0.0)
Return time [sec] the path needs until End - Delta.
Definition cinosmovepathtrajectory.h:93
double m_dActP
p value
Definition cinosmovepathtrajectory.h:419
virtual void iActiveHook()
active hook
double m_dSlowMotion
slowmotion factor
Definition cinosmovepathtrajectory.h:320
uint32 GetFlags()
Returns general trajectory generator flags.
Definition cinosmovepathtrajectory.h:193
virtual uint32 GetMoveRemaining(double &adMoveRemaining)
Return the remaining path length [path units]. It can be used to ask for the actual remaining length ...
void SetPath(class CINOSMovePath *apPath)
set pointer to my path
Definition cinosmovepathtrajectory.h:226
uint32 m_uFlags
trajectory generator flags
Definition cinosmovepathtrajectory.h:312
virtual uint32 GetMaxConstantVelocity(double &adMaxConstantVelocity, CINOSMovePathCurve *apCurve)
Return the max. allowed constant velocity the path can be run with without violating any axes limits ...
char m_cSpeedSet[64]
speedset name
Definition cinosmovepathtrajectory.h:333
virtual uint32 Cancel()
cancel move path
SINOSMovePathActual m_Actual
internal actuals
Definition cinosmovepathtrajectory.h:415
CINOSMovePathSegment ** m_ppBufferSegment
corresponding segment
Definition cinosmovepathtrajectory.h:381
uint8 m_uBusId
bus id
Definition cinosmovepathtrajectory.h:403
virtual uint32 GetData(uint32 &ouSegmentId, TINOSMovePathVec &vPos, TINOSMovePathVec &vVel, TINOSMovePathVec &vAcc, TINOSMovePathVec &vJrk)
get data from trajectory buffer
CINCOObject * m_pRegister
pointer to inco registration
Definition cinosmovepathtrajectory.h:463
uint32 m_uBusTicksPerMs
bus ticks per ms
Definition cinosmovepathtrajectory.h:405
double m_dFollowAngle
actual follow angle
Definition cinosmovepathtrajectory.h:456
uint32 PutCmd(uint32 auCommand)
put command to command queue
uint32 m_uRegisterCnt
inco tree registration counter
Definition cinosmovepathtrajectory.h:461
TINOSMovePathVec m_vAcc
acceleration
Definition cinosmovepathtrajectory.h:425
uint32 m_uBufferTotalRd
buffer read total index
Definition cinosmovepathtrajectory.h:377
EBufferType
buffer type
Definition cinosmovepathtrajectory.h:347
virtual uint32 HandleData(CINOSMovePathSegment *apSegment, TINOSMovePathVec &avPos, TINOSMovePathVec &avVel, TINOSMovePathVec &avAcc, TINOSMovePathVec &avJrk)
handle data of all resources
uint32 m_uTicksCurrent
current ticks
Definition cinosmovepathtrajectory.h:401
uint32 m_uFlagsInternal
internal flags
Definition cinosmovepathtrajectory.h:342
Definition cinosmovepath.h:566
#define DF_INOS_MOVEPATH_MAX_AXES
Definition inosdefault.h:144
uint32 INOS_OK
Definition inoserror.h:1677
uint32 INOS_MOVEPATH_ERROR_NO_COMMAND_QUEUE
Definition inoserror.h:1677
uint32 INOS_MOVEPATH_ERROR_TRJ_NOT_SUPPORTED
Definition inoserror.h:1677
Definition cinosmovepathtrajectory.h:50
static void Free(SINOSMovePathActual *apActual)
alloc
double m_dJerk
jerk
Definition cinosmovepathtrajectory.h:60
double m_dVelocity
velocity
Definition cinosmovepathtrajectory.h:56
double m_dPosition
position
Definition cinosmovepathtrajectory.h:54
uint32 m_uSegmentId
segment id
Definition cinosmovepathtrajectory.h:52
double m_dAcceleration
acceleration
Definition cinosmovepathtrajectory.h:58
SINOSMovePathActual * m_pNext
pointer to next in chain
Definition cinosmovepathtrajectory.h:68
static SINOSMovePathActual * m_pFirst
head of chain
Definition cinosmovepathtrajectory.h:70
static SINOSMovePathActual * Alloc()
alloc
ramp data
Definition cinosbaseramp.h:602
ramp parameters
Definition cinosbaseramp.h:503