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
105 virtual uint32 GetMoveTicks(uint64& adMoveTicks, double arDelta = 0.0);
106
112 virtual uint32 GetMoveLength(double& adMoveLength);
113
121 virtual uint32 GetMoveRemaining(double& adMoveRemaining);
122
129 virtual uint32 GetMaxConstantVelocity(double& adMaxConstantVelocity,
130 CINOSMovePathCurve* apCurve);
131
133 virtual uint32 Prepare();
134
136 virtual uint32 PrepareAppend() = 0;
137
139 virtual uint32 Append() = 0;
140
142 virtual uint32 PrepareRun();
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
155 virtual uint32 GetData(
156 TINOSMovePathVec& vPos,
157 TINOSMovePathVec& vVel,
158 TINOSMovePathVec& vAcc,
159 TINOSMovePathVec& vJrk);
161 virtual uint32 GetData(uint32& ouSegmentId,
162 TINOSMovePathVec& vPos,
163 TINOSMovePathVec& vVel,
164 TINOSMovePathVec& vAcc,
165 TINOSMovePathVec& vJrk);
166
167 virtual CINOSMovePathSegment* GetActSegment() {
168 return m_pActSegment;
169 }
170
178 virtual uint32 GetBufferSegment(
179 uint32 auOffset,
180 CINOSMovePathSegment*& opSegment);
181
183 virtual uint32 CancelData();
185 uint32 GetBufferFillLevel() const;
186
188 virtual uint32 HandleData(
189 CINOSMovePathSegment* apSegment,
190 TINOSMovePathVec &avPos,
191 TINOSMovePathVec &avVel,
192 TINOSMovePathVec &avAcc,
193 TINOSMovePathVec &avJrk);
194
196 enum {
197 eFlgNone = 0x00000000,
198 eFlgStopSupported = 0x00000001,
199 eFlgNeedsInterpolatorSegments = 0x00000002,
200 };
204 uint32 GetFlags()
205 { return m_uFlags; };
206
212 {
213 aActual.m_rS = m_Actual.m_dPosition;
214 aActual.m_rV = m_Actual.m_dVelocity;
215 aActual.m_rA = m_Actual.m_dAcceleration;
216 aActual.m_rJ = m_Actual.m_dJerk;
217 }
218
219 //--- internals --------------------------------------------------------
220
221 friend class CINOSMovePath;
222 friend class CINOSMcRobot;
223
224 // constructor / destructor
225 public :
230
231 // protected members
232 protected :
235 { return m_pPath; };
237 void SetPath(class CINOSMovePath* apPath)
238 { m_pPath = apPath; };
244 class CINOSMovePathResourceAxis* GetAxis(uint32 auIndex);
245
247 virtual uint32 iPrepare() = 0;
249 virtual uint32 PrepareEvents();
251 virtual bool GenData(CINOSMovePathSegment*& opSegment, double& adP,
252 TINOSMovePathVec& vPos) = 0;
254 enum {
255 ePutDataFlgNone = 0x00000000, // none
256 ePutDataFlgWaitIfFull = 0x00000001, // wait if buffer full
257 };
259 virtual uint32 PutData( CINOSMovePathSegment* apSegment, double adP,
260 TINOSMovePathVec& vPos, uint32 auFlags);
261
263 uint32 PutCmd(uint32 auCommand);
265 uint32 HandleCmd(uint32 auError = INOS_OK);
269 uint32 HandleEvents();
271 void EmitEvent(CINOSMovePathEvent* apEvent, uint64 auTicksStart);
273 uint32 WaitCmd(uint32 auCommand, uint32 auError = INOS_MOVEPATH_ERROR_NO_COMMAND_QUEUE);
274
276 virtual void iActiveHook();
277
279 virtual uint32 iCancelData();
280
283 double CalcRotationAngle(TINOSMovePathVec& vUnitVector1,
284 TINOSMovePathVec& vUnitVector2);
286 void CalcFollow(TINOSMovePathVec& vPos,
287 TINOSMovePathVec& vDir);
289 void GetPositionLast(TINOSMovePathVec& ovLast);
290
292 virtual CINCOObject* RequestRegister();
293
296 {
297 // check counter
298 if (m_uRegisterCnt > 0) {
299 // dec count
301 // destroy ?
302 if (m_uRegisterCnt == 0) {
303 // yes
304 delete m_pRegister;
305 // done
306 m_pRegister = nullptr;
307 } // end if
308 } // end if
309
310 } // end ReleaseRegister
311
313 CINCOObject* GetRegister()
314 {
315 return m_pRegister;
316 }
317
318 // protected members
319 protected :
321 inosName32 m_cType;
323 uint32 m_uFlags;
337 inos_std::vector<uint8> m_uMainCycleDownSampling;
338
339 inos_std::vector<CINOSMovePathResource*> m_vResources;
340
341 uint32 m_uNoResources = 0;
342
344 char m_cSpeedSet[64] = {0};
347
349 enum {
350 eFlgIntCancelRequest = 0x00000001
351 };
354
355 // buffer handling
356
359 eTypeActive,
360 eTypePassive
361 } m_eBufferType;
362
364 enum {
365 eFlgFull = 0x00000001,
366 eFlgNoMoreData = 0x00000002,
367 eFlgWrapAround = 0x00000004,
368 eFlgCalculated = 0x00000008,
369 eFlgDelegate = 0x00000010,
370 eFlgFollow = 0x00000020,
371 eFlgEnd = 0x00000040,
372 };
394 double* m_pBufferP;
396 TINOSMovePathVec* m_pBuffer;
400 TINOSMovePathVec m_vOffset;
401
402 // path logging handling
403
406
407 // generating data
408
414 uint8 m_uBusId;
420 double m_dTime;
422 double m_dP;
423
424 // running data
430 double m_dActP = 0.0;
432 TINOSMovePathVec m_vPos;
434 TINOSMovePathVec m_vVel;
436 TINOSMovePathVec m_vAcc;
438 TINOSMovePathVec m_vJrk;
439
442
443
449 inos_std::vector<uint8> m_vCycleDownSampling;
450
451 // filter handling
452
458 TINOSMovePathVec m_vFilterPos;
459
460 // follow mechanism
461
469 TINOSMovePathVec m_vFollowDir;
470
472 uint32 m_uRegisterCnt = 0;
474 CINCOObject* m_pRegister = nullptr;
475
476 // dynamic
478};
479
480//------------------------------------------------------------------------------
481// end of file
482//------------------------------------------------------------------------------
483
484#endif // INC_CINOSMOVEPATHTRAJECTORY_H
Short comment.
#define DECLARE_DYNAMIC(aClass)
Definition cinospartitionmemory.h:328
Definition cinosmovepathcurve.h:56
Definition cinosmovepathsegment.h:45
Definition cinosmovepathtrajectory.h:81
uint32 m_uFilterLength
filter length
Definition cinosmovepathtrajectory.h:454
TINOSMovePathVec * m_pBuffer
the buffer
Definition cinosmovepathtrajectory.h:396
void ReleaseRegister()
release inco registration
Definition cinosmovepathtrajectory.h:295
uint32 HandlePrestartEvent()
handle prestart event
virtual uint32 PrepareRun()
prepare trajectory to run
double m_dTime
current timestamp
Definition cinosmovepathtrajectory.h:420
inos_std::vector< uint8 > m_uMainCycleDownSampling
main cycle down sampling
Definition cinosmovepathtrajectory.h:337
virtual uint32 GetBufferSegment(uint32 auOffset, CINOSMovePathSegment *&opSegment)
Get the segment for an offset in samples to the current sample.
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:211
double CalcRotationAngle(TINOSMovePathVec &vUnitVector1, TINOSMovePathVec &vUnitVector2)
uint32 m_uBufferTotalWr
buffer write total index
Definition cinosmovepathtrajectory.h:384
virtual uint32 PrepareEvents()
prepare events
CINOSMovePathTrajectory(class CINOSMovePath *apPath=NULL)
constructor
uint32 m_uBufferCnt
buffer entries
Definition cinosmovepathtrajectory.h:390
uint32 m_uBufferSize
buffer size
Definition cinosmovepathtrajectory.h:376
TINOSMovePathVec m_vFollowDir
actual direction vector
Definition cinosmovepathtrajectory.h:469
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:398
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:335
uint64 m_uTicksStart
start ticks
Definition cinosmovepathtrajectory.h:410
uint32 m_uFollowIndex
index of axis to follow
Definition cinosmovepathtrajectory.h:463
double m_dCycleTime
cycle time
Definition cinosmovepathtrajectory.h:327
class CINOSMovePathCurve * GetPrepareCurve()
get pointer to my prepare curve
TINOSMovePathVec m_vPos
position
Definition cinosmovepathtrajectory.h:432
uint32 m_uBufferReady
buffer ready level
Definition cinosmovepathtrajectory.h:378
uint32 m_uBufferWr
buffer write index
Definition cinosmovepathtrajectory.h:382
class CINOSMovePath * m_pPath
pointer to my path
Definition cinosmovepathtrajectory.h:325
double m_dFollowFactor
follow unit factor
Definition cinosmovepathtrajectory.h:465
uint32 m_uBufferFlags
buffer flags
Definition cinosmovepathtrajectory.h:374
TINOSMovePathVec m_vVel
velocity
Definition cinosmovepathtrajectory.h:434
virtual uint32 Prepare()
prepare move path
TINOSMovePathVec m_vOffset
running offset
Definition cinosmovepathtrajectory.h:400
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:456
void CalcFollow(TINOSMovePathVec &vPos, TINOSMovePathVec &vDir)
calc follow axis
CINOSMovePathSegment * m_pActSegment
current act segment
Definition cinosmovepathtrajectory.h:445
CINOSMovePathSegment * m_pPathSegment
current segment
Definition cinosmovepathtrajectory.h:405
inos_std::vector< uint8 > m_vCycleDownSampling
main cycle down sampling
Definition cinosmovepathtrajectory.h:449
TINOSMovePathVec m_vFilterPos
filtered position
Definition cinosmovepathtrajectory.h:458
uint32 m_uBufferLow
buffer low level
Definition cinosmovepathtrajectory.h:380
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:418
class CINOSMovePath * GetPath()
get pointer to my path
Definition cinosmovepathtrajectory.h:234
virtual uint32 Append()=0
prepare trajectory of curve to append
CINOSMovePathSegment * m_pNextSegment
next act segment
Definition cinosmovepathtrajectory.h:447
virtual uint32 GetMoveLength(double &adMoveLength)
Return the path length [path units].
CINCOObject * GetRegister()
get pointer to inco registration (if any)
Definition cinosmovepathtrajectory.h:313
uint8 m_uMainAxisIndex
main axis index
Definition cinosmovepathtrajectory.h:333
uint32 HandleCmd(uint32 auError=INOS_OK)
check command queue
double m_dP
current position
Definition cinosmovepathtrajectory.h:422
SINOSRampParam m_sSpeedSet
speedset
Definition cinosmovepathtrajectory.h:346
uint32 m_uBufferRd
buffer read index
Definition cinosmovepathtrajectory.h:386
class CINOSMovePathCurve * GetRunCurve()
get pointer to run curve
SINOSMovePathActual * m_pActual
actuals (handled over to inco registration of involved axes)
Definition cinosmovepathtrajectory.h:428
inosName32 m_cType
type
Definition cinosmovepathtrajectory.h:321
double * m_pBufferP
corresponding buffer virtual position P
Definition cinosmovepathtrajectory.h:394
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:441
double m_dCycleTime_1
inverse cycle time
Definition cinosmovepathtrajectory.h:329
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:438
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:430
virtual void iActiveHook()
active hook
double m_dSlowMotion
slowmotion factor
Definition cinosmovepathtrajectory.h:331
uint32 GetFlags()
Returns general trajectory generator flags.
Definition cinosmovepathtrajectory.h:204
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:237
uint32 m_uFlags
trajectory generator flags
Definition cinosmovepathtrajectory.h:323
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:344
virtual uint32 Cancel()
cancel move path
SINOSMovePathActual m_Actual
internal actuals
Definition cinosmovepathtrajectory.h:426
CINOSMovePathSegment ** m_ppBufferSegment
corresponding segment
Definition cinosmovepathtrajectory.h:392
uint8 m_uBusId
bus id
Definition cinosmovepathtrajectory.h:414
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:474
uint32 m_uBusTicksPerMs
bus ticks per ms
Definition cinosmovepathtrajectory.h:416
double m_dFollowAngle
actual follow angle
Definition cinosmovepathtrajectory.h:467
uint32 PutCmd(uint32 auCommand)
put command to command queue
uint32 m_uRegisterCnt
inco tree registration counter
Definition cinosmovepathtrajectory.h:472
TINOSMovePathVec m_vAcc
acceleration
Definition cinosmovepathtrajectory.h:436
uint32 m_uBufferTotalRd
buffer read total index
Definition cinosmovepathtrajectory.h:388
EBufferType
buffer type
Definition cinosmovepathtrajectory.h:358
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:412
uint32 m_uFlagsInternal
internal flags
Definition cinosmovepathtrajectory.h:353
Definition cinosmovepath.h:550
#define DF_INOS_MOVEPATH_MAX_AXES
Definition inosdefault.h:152
uint32 INOS_OK
Definition inoserror.h:1683
uint32 INOS_MOVEPATH_ERROR_NO_COMMAND_QUEUE
Definition inoserror.h:1683
uint32 INOS_MOVEPATH_ERROR_TRJ_NOT_SUPPORTED
Definition inoserror.h:1683
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
real64 m_rJ
jerk
Definition cinosbaseramp.h:610
real64 m_rS
position
Definition cinosbaseramp.h:604
real64 m_rV
velocity
Definition cinosbaseramp.h:606
real64 m_rA
acceleration
Definition cinosbaseramp.h:608
ramp parameters
Definition cinosbaseramp.h:503