INOS
cinosmovepath.h
Go to the documentation of this file.
1//******************************************************************************
26//******************************************************************************
27#ifndef INC_CINOSMOVEPATH_H
28#define INC_CINOSMOVEPATH_H
29//------------------------------------------------------------------------------
30// defines
31//------------------------------------------------------------------------------
32//
33// --- general -----------------------------------------------------------------
34//
39#define DF_INOS_MOVEPATH_ID_DEFAULT 0xffffffff
43#define DF_INOS_MOVEPATH_TOLERANCE_DEFAULT -1.0
47#define DF_INOS_MOVEPATH_TOLERANCE_MIN 1.0e-4
51#define DF_INOS_MOVEPATH_VELOCITY_DEFAULT -1.0
55#define DF_INOS_MOVEPATH_FLAG_NO 0x00000000
59#define DF_INOS_MOVEPATH_FLAG_ABS 0x00000001
63#define DF_INOS_MOVEPATH_FLAG_INC 0x00000002
69#define DF_INOS_MOVEPATH_FLAG_NLG 0x00000004
74#define DF_INOS_MOVEPATH_FLAG_RAW 0x00000008
78#define DF_INOS_MOVEPATH_THE_END 1
79
80//------------------------------------------------------------------------------
81// Curve flags
82
86#define DF_INOS_MOVEPATH_FLAG_CURVE_OWNED 0x01000000
90#define DF_INOS_MOVEPATH_FLAG_CONTINUATION 0x02000000
94#define DF_INOS_MOVEPATH_FLAG_INCOMPLETE 0x04000000
100#define DF_INOS_MOVEPATH_FLAG_OFFSET_ZERO 0x40000000
105#define DF_INOS_MOVEPATH_FLAG_RELOCATABLE 0x80000000
106//
107
108//------------------------------------------------------------------------------
109// Segment flags
110#define DF_INOS_MOVEPATH_FLAG_SHORT 0x10000000 // segment is too short
111#define DF_INOS_MOVEPATH_FLAG_PURE_LINEAR 0x20000000 // segment is pure linear
112#define DF_INOS_MOVEPATH_FLAG_PURE_RAPID 0x40000000 // segment is pure rapid
113
117#define DF_INOS_MOVEPATH_OPTION_NONE uint32(0x00000000)
121#define DF_INOS_MOVEPATH_OPTION_EXCEPTION_SUPPORT uint32(0x00000001)
125#define DF_INOS_MOVEPATH_OPTION_ASYNCH_SUPPORT uint32(0x00000002)
129#define DF_INOS_MOVEPATH_OPTION_REGISTER_INCO uint32(0x00000004)
133#define DF_INOS_MOVEPATH_OPTION_ALL \
134 (DF_INOS_MOVEPATH_OPTION_EXCEPTION_SUPPORT| \
135 DF_INOS_MOVEPATH_OPTION_ASYNCH_SUPPORT| \
136 DF_INOS_MOVEPATH_OPTION_REGISTER_INCO)
137#ifdef INOS_MOVEPATH_ASYNCH_SUPPORT
141#define DF_INOS_MOVEPATH_OPTION_DEFAULT \
142 DF_INOS_MOVEPATH_OPTION_ASYNCH_SUPPORT
143#else
147#define DF_INOS_MOVEPATH_OPTION_DEFAULT \
148 DF_INOS_MOVEPATH_OPTION_NONE
149#endif
150
151// --- helper ------------------------------------------------------------------
152//
156#define DF_INOS_MOVEPATH_HELPER_CORE_NAME "Helper.Core"
157#define DF_INOS_MOVEPATH_HELPER_CORE_DEFAULT -1
158//
162#define DF_INOS_MOVEPATH_HELPER_PRIORITY_NAME "Helper.Priority"
163#define DF_INOS_MOVEPATH_HELPER_PRIORITY_DEFAULT DF_INOS_TASK_PRIO_REALTIME_LOWEST
164
168#define DF_INOS_MOVEPATH_PREPARE_HELPER_CORE_NAME "PrepareHelper.Core"
169#define DF_INOS_MOVEPATH_PREPARE_HELPER_CORE_DEFAULT -1
170//
174#define DF_INOS_MOVEPATH_PREPARE_HELPER_PRIORITY_NAME "PrepareHelper.Priority"
175#define DF_INOS_MOVEPATH_PREPARE_HELPER_PRIORITY_DEFAULT DF_INOS_TASK_PRIO_BACKGROUND
179#define DF_INOS_MOVEPATH_RUN_HELPER_CORE_NAME "RunHelper.Core"
180#define DF_INOS_MOVEPATH_RUN_HELPER_CORE_DEFAULT -1
181//
185#define DF_INOS_MOVEPATH_RUN_HELPER_PRIORITY_NAME "RunHelper.Priority"
186#define DF_INOS_MOVEPATH_RUN_HELPER_PRIORITY_DEFAULT DF_INOS_TASK_PRIO_REALTIME_LOWEST
187//
188// --- mcrobot -----------------------------------------------------------------
189//
196#define DF_INOS_MOVEPATH_MCROBOT_PREPAREPATH_NAME "McRobot.PreparePath"
197#define DF_INOS_MOVEPATH_MCROBOT_PREPAREPATH_DEFAULT 0
198#define DF_INOS_MOVEPATH_MCROBOT_PREPAREPATH_NOTHING 0
199#define DF_INOS_MOVEPATH_MCROBOT_PREPAREPATH_ERROR 1
200//
201// --- interpolator ------------------------------------------------------------
202//
211#define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_NAME "Shape.OnShrink"
212#define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_DEFAULT 1
213#define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_LIMIT_AMAX 0
214#define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_STOP 1
215#define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_ERROR 2
216#define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_LIMIT_JMAX 3
223#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_MAX_ANGLE "Nurbs.MaxAngle"
224#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_MAX_ANGLE_DEFAULT 20.0
232#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_MAX_LENGTH "Nurbs.MaxLength"
233#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_MAX_LENGTH_DEFAULT 0.0
242#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_OVERLAP "Nurbs.Overlap"
243#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_OVERLAP_DEFAULT 0.2
249#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_VECTORIZE_FACTOR "Nurbs.Vectorize"
250#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_VECTORIZE_FACTOR_DEFAULT 0.1
256#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_INTERPOLATION_POINTS "Nurbs.InterpolationPoints"
257#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_INTERPOLATION_POINTS_DEFAULT DF_INOS_NURBSCURVE_INTERPOLATION_POINTS
264#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_D3_FACTOR "Nurbs.D3Factor"
265#define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_D3_FACTOR_DEFAULT 20.0
273#define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_PURE "Clothoid.Pure"
274#define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_PURE_DEFAULT 1.0
282#define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_REDUCE "Clothoid.Reduce"
283#define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_REDUCE_DEFAULT 1.0
291#define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_R "Clothoid.R"
292#define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_L "Clothoid.L"
293#define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_A "Clothoid.A"
294
295// --- trajectory --------------------------------------------------------------
296//
300#define DF_INOS_MOVEPATH_TRAJECTORY_MAIN_AXIS_NAME "Trajectory.MainAxis"
301#define DF_INOS_MOVEPATH_TRAJECTORY_MAIN_AXIS_DEFAULT 0
308#define DF_INOS_MOVEPATH_TRAJECTORY_LOGGING_MASK "Trajectory.Logging.Mask"
309#define DF_INOS_MOVEPATH_TRAJECTORY_LOGGING_MASK_DEFAULT 0x00000001
310#define DF_INOS_MOVEPATH_TRAJECTORY_LOGGING_MASK_NONE 0.0
311#define DF_INOS_MOVEPATH_TRAJECTORY_LOGGING_MASK_PATHS 0x00000001
323#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_TYPE_NAME "Trajectory.Buffer.Type"
324#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_TYPE_DEFAULT "active"
325#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_TYPE_NONE "none"
326#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_TYPE_ACTIVE "active"
327#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_TYPE_PASSIVE "passive"
331#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_SIZE_NAME "Trajectory.Buffer.Size"
332#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_SIZE_DEFAULT 256
336#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_READY_NAME "Trajectory.Buffer.Ready"
337#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_READY_DEFAULT 16
338#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_READY_FULL_PATH 0xffffffff
342#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_LOW_NAME "Trajectory.Buffer.Low"
343#define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_LOW_DEFAULT 192
347#define DF_INOS_MOVEPATH_TRAJECTORY_FILTER_LENGTH_NAME "Trajectory.Filter.Length"
348#define DF_INOS_MOVEPATH_TRAJECTORY_FILTER_LENGTH_DEFAULT 0
361#define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_ENABLE_NAME "Trajectory.Follow.Enable"
362#define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_ENABLE_DEFAULT 0
363#define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_INDEX_NAME "Trajectory.Follow.Index"
364#define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_INDEX_DEFAULT 3
365#define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_UNIT_NAME "Trajectory.Follow.Unit"
366#define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_UNIT_DEFAULT 0
376#define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY "Trajectory.Constant.CheckVelocity"
377#define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_NONE 0.0
378#define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_DEFAULT 0.0
379#define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_REDUCE 2.0
380#define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_ONLY 1.0
390#define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_OVERSAMPLING "Trajectory.Constant.CheckVelocity.Oversampling"
391#define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_OVERSAMPLING_DEFAULT 1.0
395#define DF_INOS_MOVEPATH_TRAJECTORY_SEGMENT_CUBIC_REDUCTION_NAME "Trajectory.Segment.CubicReduction"
396#define DF_INOS_MOVEPATH_TRAJECTORY_SEGMENT_CUBIC_REDUCTION_DEFAULT 1.0
397//
398//------------------------------------------------------------------------------
399// param names
400//------------------------------------------------------------------------------
401//
405#define DF_INOS_MOVEPATH_PARAM_SPEEDSET "SpeedSet"
409#define DF_INOS_MOVEPATH_PARAM_SLOWMOTION "SlowMotion"
413#define DF_INOS_MOVEPATH_PARAM_TOLERANCE "Tolerance"
417#define DF_INOS_MOVEPATH_PARAM_VMAX "Vmax"
421#define DF_INOS_MOVEPATH_PARAM_VTRQ "Vtrq"
425#define DF_INOS_MOVEPATH_PARAM_AMAX "Amax"
429#define DF_INOS_MOVEPATH_PARAM_ATRQ "Atrq"
433#define DF_INOS_MOVEPATH_PARAM_BMAX "Bmax"
437#define DF_INOS_MOVEPATH_PARAM_BTRQ "Btrq"
441#define DF_INOS_MOVEPATH_PARAM_JMAX "Jmax"
442//
446#define DF_INOS_MOVEPATH_APPROACH_NAME "Approach"
447#define DF_INOS_MOVEPATH_APPROACH_DEFAULT 0
451#define DF_INOS_MOVEPATH_APPROACH_DISTANCE_NAME "Approach.Distance"
452#define DF_INOS_MOVEPATH_APPROACH_DISTANCE_DEFAULT 5.0
456#define DF_INOS_MOVEPATH_APPROACH_VELOCITY_NAME "Approach.Velocity"
457#define DF_INOS_MOVEPATH_APPROACH_VELOCITY_DEFAULT 1.0
458
462#define DF_INOS_MOVEPATH_RAPID_GATE_INVERT_NAME "RapidGateInverted"
463#define DF_INOS_MOVEPATH_RAPID_GATE_INVERT_DEFAULT 0.0
464
465
466//------------------------------------------------------------------------------
467// includes
468//------------------------------------------------------------------------------
469//
470// system
471#include <inos.h>
472#include <cinostaskexdef.h>
473#include <cinosvector.h>
474#include <cinosmotionframe.h>
475
476//------------------------------------------------------------------------------
477// type definitions
478//------------------------------------------------------------------------------
479//
480typedef TINOSVector<DF_INOS_MOVEPATH_MAX_AXES> TINOSMovePathVec;
481
482
483#include <cinosmovepathparam.h>
484#include <cinosmovepathevent.h>
485#include <cinosmovepathsegment.h>
488#include <cinosmovepathresource.h>
489#include <cinosmovepathresourceposaxis.h>
490#include <cinosmovepathresourcespeedaxis.h>
491#include <cinosmovepathresourcerapidgate.h>
492#include <cinosmovepathpart.h>
497#include <cinosmovepathcurve.h>
499#include <cinosmovepathinterpolatorsegment.h>
503#include <cinosmovepathtrajectorylookahead.h>
504
505#ifdef INOS_MOVEPATH_SKYWRITING_SUPPORT
506#include <cinosmovepathsegmentrapid.h>
507#include <cinosmovepathpartrapid.h>
508#include <cinosmovepathtrajectoryskywriting.h>
509#endif
510
511//
512// C++
513//
514// project
515//
516//------------------------------------------------------------------------------
517// trace macros
518//------------------------------------------------------------------------------
519//
520#define DF_INOS_EVENT_LOGGER_FONT_COLOR_MOVEPATH_CREATE 0x00808000
521#define DF_INOS_EVENT_LOGGER_FONT_COLOR_MOVEPATH_RUN 0x00008080
522//
523#ifdef INOS_MOVEPATH_TRACE_SUPPORT
524#define MOVEPATH_TRACE_CREATE( path, apFormat, aArgs... ) \
525 if( CINOSEventLogger::Instance().IsLevelActive(DF_INOS_EVENT_LOGGER_LEVEL_MOVEPATH_CREATE) ) {\
526 char cBuffer[256]; \
527 inos_strncpy(cBuffer, "MOVEPATH[%s] : ", sizeof(cBuffer)); \
528 inos_strcat(cBuffer, apFormat, sizeof(cBuffer)); \
529 CINOSEventLogger::Instance().EvtLog( \
530 DF_INOS_EVENT_LOGGER_LEVEL_MOVEPATH_CREATE, \
531 __PRETTY_FUNCTION__, \
532 __FILE__, \
533 __LINE__, \
534 DF_INOS_EVENT_LOGGER_FONT_COLOR_MOVEPATH_CREATE, \
535 cBuffer, path->GetName(), \
536 ##aArgs ); \
537 }
538#define MOVEPATH_TRACE_RUN( path, apFormat, aArgs... ) \
539 if( CINOSEventLogger::Instance().IsLevelActive(DF_INOS_EVENT_LOGGER_LEVEL_MOVEPATH_RUN) ) {\
540 char cBuffer[256]; \
541 inos_strncpy(cBuffer, "MOVEPATH[%s] : ", sizeof(cBuffer)); \
542 inos_strcat(cBuffer, apFormat, sizeof(cBuffer)); \
543 CINOSEventLogger::Instance().EvtLog( \
544 DF_INOS_EVENT_LOGGER_LEVEL_MOVEPATH_RUN, \
545 __PRETTY_FUNCTION__, \
546 __FILE__, \
547 __LINE__, \
548 DF_INOS_EVENT_LOGGER_FONT_COLOR_MOVEPATH_RUN, \
549 cBuffer, path->GetName(), \
550 ##aArgs ); \
551 }
552#else
553#if defined(_MSC_VER)
554#define MOVEPATH_TRACE_CREATE( path, apFormat, ... )
555#define MOVEPATH_TRACE_RUN( path, apFormat, ... )
556#else
557#define MOVEPATH_TRACE_CREATE( path, apFormat, aArgs... )
558#define MOVEPATH_TRACE_RUN( path, apFormat, aArgs... )
559#endif
560#endif
561//------------------------------------------------------------------------------
562// class definition
563//------------------------------------------------------------------------------
564//
566{
567 //--- user interface ---------------------------------------------------
568
569 // public member functions
570 public :
572 enum EState {
573 eStaVirgin = 0,
574 eStaEdit = 1,
575 eStaRaw = 2,
576 eStaReady = 3,
577 eStaRunning = 4,
578 eStaStopping = 5,
579 eStaBreaking = 6,
580 eStaCanceling = 7,
581 eStaSettling = 8,
582 eStaTransient = 9,
583 eStaPaused = 10,
584 eStaDone = 11,
585 eStaLast = 12
586 };
587
591 {
592 // return actual state
593 return m_eState;
594 }
601 bool IsMoving() const;
602
605 uint32 GetError() const
606 {
607 // return actual error
608 return m_uError;
609 }
610
613 virtual uint32 AcceptError()
614 {
615 // save pending error
616 uint32 uError = m_uError;
617 // clear error
618 m_uError = 0;
619 // return pending error
620 return uError;
621 }
622
625 const char* GetName() const
626 {
627 // return name
628 return &m_cName[0];
629 }
630
633 uint32 GetOptions() const
634 {
635 // return options
636 return m_uOptions;
637 }
638
639 // --- creation and destruction ---------------------------------------
640
658 static uint32 Create(CINOSMovePath*& apPath,
660
679 static uint32 Create(CINOSMovePath*& apPath, const char* apName,
681
700 static uint32 Create(CINOSMovePath*& apPath,
701 const char* apCurveType, const char* apInterpolatorType, const char* apTrajectoryType,
703
723 static uint32 Create(CINOSMovePath*& apPath, const char* apName,
724 const char* apCurveType, const char* apInterpolatorType, const char* apTrajectoryType,
726
748 static uint32 Create(CINOSMovePath*& apPath, const char* apName,
749 const char* apCurveType, const char* apInterpolatorType, const char* apTrajectoryType,
751
758 static uint32 Destroy(CINOSMovePath* apPath);
759
760 // --- static global methods ------------------------------------------
761
772 static uint32 glbSetAxis(const char* apName, uint8 auIndex,
775
783
793 static uint32 glbGetActPosition(const char* apName, double& adPosition,
795
796 // --- edit mode ------------------------------------------------------
797
809 virtual uint32 SetAxis(const char* apName, uint8 auIndex,
811 const char* apType = "PosAxis");
812
824 virtual uint32 AddResource(const char* apName,
825 uint8& auIndex,
827 const char* apType = "PosAxis");
828
849
855 virtual uint32 EditEnd(bool abIncomplete = false);
856
877
883 virtual uint32 SegEnd();
884
896 virtual uint32 Start(uint8 auIndex, double adPosition);
897
898 // --- base curve methods ---------------------------------------------
899
911 virtual uint32 Linear(uint8 auIndex, double adPosition, uint32 auFlags = 0);
912
930 double adPosition2, double adLength, uint32 auFlags = 0);
931
950 double adEnd1, double adEnd2, double adMid1, double adMid2,
951 uint32 auFlags=0);
952
971 double adEnd1, double adEnd2, double adMid1, double adMid2,
972 uint32 auFlags=0);
973
993 double adMid1, double adMid2, double adAngle, bool abAngleAbsolute,
994 uint32 auFlags=0);
995
1015 double adMid1, double adMid2, double adAngle, bool abAngleAbsolute,
1016 uint32 auFlags=0);
1017
1036 double adEnd1, double adEnd2, double adRadius, uint32 auFlags=0);
1037
1056 double adEnd1, double adEnd2, double adRadius, uint32 auFlags=0);
1057
1058 // --- rapid segment methods -------------------------------------------
1059#ifdef INOS_MOVEPATH_SKYWRITING_SUPPORT
1060
1072 virtual uint32 RapidBegin(uint32 auId = DF_INOS_MOVEPATH_ID_DEFAULT,
1074
1080 virtual uint32 RapidEnd();
1081
1093 virtual uint32 Rapid(uint8 auIndex, double adPosition, uint32 auFlags = 0);
1094#endif
1095
1096 // --- nurbs curve methods -------------------------------------------
1097
1114 uint32 auDegree = 3,
1117
1123 virtual uint32 NrbEnd();
1124
1134 virtual uint32 NrbPoint(double adP0, double adP1, double adWeight = 1.0);
1135
1146 #if DF_INOS_MOVEPATH_MAX_AXES > 2
1147 virtual uint32 NrbPoint(double adP0, double adP1, double adP2, double adWeight);
1148 #endif
1149
1161 #if DF_INOS_MOVEPATH_MAX_AXES > 3
1162 virtual uint32 NrbPoint(double adP0, double adP1, double adP2, double adP3,
1163 double adWeight);
1164 #endif
1165
1178 #if DF_INOS_MOVEPATH_MAX_AXES > 4
1179 virtual uint32 NrbPoint(double adP0, double adP1, double adP2, double adP3,
1180 double adP4, double adWeight);
1181 #endif
1182
1193 virtual uint32 NrbKnot(double adValue, uint32 auMultiplicity = 1);
1194
1195 // --- general methods -----------------------------------------
1196
1204 virtual uint32 Reset();
1205
1206 // --- general setter/getter -----------------------------------------
1207
1215 virtual uint32 SetParam(const char* apName, double adValue);
1216
1226 virtual uint32 SetParam(uint8 auIndex, const char* apName, double adValue);
1227
1235 virtual uint32 SetParam(const char* apName, const char* apValue);
1236
1246 virtual uint32 SetParam(uint8 auIndex, const char* apName, const char* apValue);
1247
1256 virtual uint32 GetParam(const char* apName, double& adValue, double adDefault = 0.0);
1257
1267 virtual uint32 GetParam(uint8 auIndex, const char* apName, double& adValue, double adDefault = 0.0);
1268
1278 virtual uint32 GetParam(const char* apName, char* apBuffer, uint32 auSize, const char* apDefault = "");
1279
1290 virtual uint32 GetParam(uint8 auIndex, const char* apName, char* apBuffer, uint32 auSize, const char* apDefault = "");
1291
1292 // --- timing --------------------------------------------------------
1293
1299 virtual uint32 GetCycleTime(double& adCycleTime);
1300
1310 inos_std::vector<uint8>& auMainCycleDownSampling, uint8& auMainOversampling);
1311
1318 virtual uint32 GetMoveTime(double& adMoveTime, double adDelta = 0.0);
1319
1326 virtual uint32 GetMoveTicks(uint64& adMoveTicks, double arDelta = 0.0);
1327
1333 virtual uint32 GetMoveLength(double& adMoveLength);
1334
1342 virtual uint32 GetMoveRemaining(double& adMoveRemaining);
1343
1355
1356 // --- event handling ------------------------------------------------
1357
1363 virtual uint32 AddEvent(const char* apName, double adValue, uint32 auType);
1364
1371
1372 // --- running -------------------------------------------------------
1373
1385
1397 virtual CMcResult Prepare(const char* apSpeedset, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
1398
1409
1420 virtual CMcResult Run(const char* apSpeedset, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
1421
1431
1439
1447
1455
1463
1464 // --- misc ----------------------------------------------------------
1465
1479 virtual uint32 GetData(
1480 TINOSMovePathVec& vPos,
1481 TINOSMovePathVec& vVel,
1482 TINOSMovePathVec& vAcc,
1483 TINOSMovePathVec& vJrk)
1484 {
1485 // FIXME : ensure a valid trajectory generator
1487 // handle request over to trajectory generator
1488 return m_pTrajectory->GetData(vPos, vVel, vAcc, vJrk);
1489 }
1490
1505 virtual uint32 GetData(
1506 uint32& auSegmentId,
1507 TINOSMovePathVec& vPos,
1508 TINOSMovePathVec& vVel,
1509 TINOSMovePathVec& vAcc,
1510 TINOSMovePathVec& vJrk)
1511 {
1512 // FIXME : ensure a valid trajectory generator
1514 // handle request over to trajectory generator
1516 }
1517
1518 virtual CINOSMovePathSegment* GetActSegment()
1519 {
1520 // FIXME : ensure a valid trajectory generator
1522 // handle request over to trajectory generator
1523 return m_pTrajectory->GetActSegment();
1524 }
1525
1526
1527
1533 virtual uint32 CancelData()
1534 {
1535 // FIXME : ensure a valid trajectory generator
1537 // handle request over to trajectory generator
1538 return m_pTrajectory->CancelData();
1539 }
1540
1545 virtual uint32 Fail(uint32 auError);
1546
1556 virtual uint32 GetPositionDelta(TINOSMovePathVec& vDelta);
1557
1559 virtual bool GetPosition(uint32 auIndex, TINOSMovePathVec& ovPos)
1560 {
1561 if(m_pMainCurve == nullptr) {
1562 return false;
1563 }
1564 // get it from curve
1566 }
1567
1569 virtual uint32 GetTorqueLimit()
1570 {
1571 return m_uTorqueLimit;
1572 }
1574 virtual double GetEpsilon()
1575 {
1576 return m_dEpsilon;
1577 }
1578
1580 virtual double GetTolerance()
1581 {
1582 return m_dTolerance;
1583 }
1584
1586 virtual uint32 GetVmax(TINOSMovePathVec& aVmax)
1587 {
1588 aVmax = vVmax;
1589 return 0;
1590 }
1592 virtual uint32 GetVtrq(TINOSMovePathVec& aVtrq)
1593 {
1594 aVtrq = vVtrq;
1595 return 0;
1596 }
1598 virtual uint32 GetAmax(TINOSMovePathVec& aAmax)
1599 {
1600 aAmax = vAmax;
1601 return 0;
1602 }
1604 virtual uint32 GetAtrq(TINOSMovePathVec& aAtrq)
1605 {
1606 aAtrq = vAtrq;
1607 return 0;
1608 }
1610 virtual uint32 GetBmax(TINOSMovePathVec& aBmax)
1611 {
1612 aBmax = vBmax;
1613 return 0;
1614 }
1616 virtual uint32 GetBtrq(TINOSMovePathVec& aBtrq)
1617 {
1618 aBtrq = vBtrq;
1619 return 0;
1620 }
1622 virtual uint32 GetJmax(TINOSMovePathVec& aJmax)
1623 {
1624 aJmax = vJmax;
1625 return 0;
1626 }
1627
1630
1634
1635
1645
1646
1652
1655 { return m_pAxis[auIndex]; };
1656
1657 class CINOSMovePathResource* GetResource(uint32 auIndex);
1658
1660 void GetActPosition(TINOSMovePathVec& ovAct);
1662 void GetPositionFirst(TINOSMovePathVec& ovFirst);
1664 void GetPositionLast(TINOSMovePathVec& ovLast);
1665
1675
1683
1691
1697 typedef std::function<uint32(CINOSMovePath*,uint32,TINOSMovePathVec&,TINOSMovePathVec&,TINOSMovePathVec&,TINOSMovePathVec&)> tpActiveCallback;
1698
1699 void SetActiveCallback(tpActiveCallback aCallback)
1700 {
1701 m_ActiveCallback = aCallback;
1702 }
1703
1709 {
1710 // trajectory available ?
1711 if (nullptr != m_pTrajectory) {
1712 // yes
1714 }
1715 else {
1716 // not available
1717 aActual.m_rS = 0.0;
1718 aActual.m_rV = 0.0;
1719 aActual.m_rA = 0.0;
1720 aActual.m_rJ = 0.0;
1721 }
1722 }
1723
1724 //--- internals --------------------------------------------------------
1725
1726 // my friends
1727 friend class CINOSMovePathHelper;
1728 friend class CINOSMovePathInterpolator;
1729 friend class CINOSMovePathInterpolatorBlend;
1731 friend class CINOSMovePathInterpolatorPolynom;
1732 friend class CINOSMovePathTrajectory;
1733 template <typename CINOSMovePath> friend class CINOSTaskExMsgParam::CPtrContainer;
1734 friend class CINOSMcTargetMovePath;
1735 friend void _INI_0300_CINOSMovePath();
1736
1737 // testing friends
1738 friend class CINOSMovePathHelperTest;
1739
1740
1741 // protected methods
1742 protected :
1743
1744 // constructor / destructor
1747 const char* apName,
1748 const char* apCurveType,
1749 const char* apInterpolatorType,
1750 const char* apTrajectoryType,
1751 uint32 auOptions);
1753 virtual ~CINOSMovePath ();
1754
1755 virtual uint32 iCircle(bool abCw, uint8 auIndex1, uint8 auIndex2,
1756 double adEnd1, double adEnd2, double adMid1, double adMid2,
1757 uint32 auFlags);
1760 double adMid1, double adMid2, double adAngle, bool abAngleAbsolute,
1761 uint32 auFlags);
1764 double adEnd1, double adEnd2, double adRadius, uint32 auFlags);
1765
1767 virtual uint32 iPrepare(class CINOSTaskExMsg* apMsg);
1768 virtual uint32 iPrepare(const char* apSpeedSet);
1769
1771 virtual uint32 iStartRun(class CINOSTaskExMsg* apMsg);
1772 virtual uint32 iStartRun(const char* apSpeedSet, CINOSSync* apSync);
1773
1774 virtual uint32 iRun(class CINOSTaskExMsg* apMsg);
1775 virtual uint32 iRun(const char* apSpeedSet, CINOSSync* apSync);
1776
1778 virtual uint32 iPrepareAppend(class CINOSTaskExMsg* apMsg);
1779 virtual uint32 iPrepareAppend(CINOSSync* apSync);
1780
1782 virtual uint32 iAppend(class CINOSTaskExMsg* apMsg);
1784
1786 virtual uint32 iStop(class CINOSTaskExMsg* apMsg);
1788 virtual uint32 iBreak(class CINOSTaskExMsg* apMsg);
1790 virtual uint32 iContinue(class CINOSTaskExMsg* apMsg);
1792 virtual uint32 iCancel(class CINOSTaskExMsg* apMsg);
1794 virtual uint32 iCancelData(class CINOSTaskExMsg* apMsg);
1796 virtual uint32 iSetParam(uint8 auIndex, const char* apName, double adValue);
1798 virtual uint32 iSetParam(uint8 auIndex, const char* apName, const char* apValue);
1800 virtual uint32 iGetParam(uint8 auIndex, const char* apName, double* adValue, double adDefault);
1802 virtual uint32 iGetParam(uint8 auIndex, const char* apName, char* apValue, uint32 auSize, const char* apDefault);
1803
1804
1805
1807 CMcResult PutMsg(CINOSTaskExMsg* apMsg);
1811 uint32 HandleCmd(uint32 auError = INOS_OK);
1814
1819
1820
1823
1826 {
1827 // set actual state
1828 m_eState = aeState;
1829 }
1830
1832 virtual void SetError(uint32 auError)
1833 {
1834 // set error
1835 m_uError = auError;
1836 }
1837
1840 {
1841 // return frame
1842 return m_pFrame;
1843 }
1844
1847 {
1848 // return event descriptor
1849 return m_pEventDesc;
1850 }
1851
1853 CINCOObject* RequestRegister();
1856
1857 // private methods
1858 private:
1859 // ! check validity of speedset values if speedset is defined global
1860 static uint32 CheckSpeedSetValues(const char* apSpeedSet);
1861
1862 // protected members
1863 protected :
1864
1865 // commands
1866 public:
1867 enum {
1868 eCmdAttach = 256,
1869 eCmdDetach = 257,
1870 // state dependent commands
1871 eCmdFirst = 258,
1872 eCmdSetAxis,
1873 eCmdSetCurve,
1874 eCmdReset,
1875 eCmdSetMapping,
1876 eCmdGetMoveTime,
1877 eCmdGetMoveTicks,
1878 eCmdGetMoveLength,
1879 eCmdGetPositionDelta,
1880 eCmdGetMaxConstantVelocity,
1881 eCmdAddEvent,
1882 eCmdSetEventDescriptor,
1883 eCmdPrepare,
1884 eCmdStartRun,
1885 eCmdRun,
1886 eCmdPrepareAppend,
1887 eCmdAppend,
1888 eCmdBufferLow,
1889 eCmdBufferEmpty,
1890 eCmdStop,
1891 eCmdBreak,
1892 eCmdContinue,
1893 eCmdCancel,
1894 eCmdCancelData,
1895 eCmdLast
1896 };
1897
1899 enum {
1900 eParamIndexGlobalInternal = 0,
1901 eParamIndexGlobal = 0xff,
1902 eParamIndexMask = 0x0000ffff,
1903 eParamTypeNumber = 0x00010000,
1904 eParamTypeString = 0x00020000,
1905 };
1906
1908 enum {
1909 eFlgOwnerInterpolator = 0x00000001,
1910 eFlgOwnerTrajectory = 0x00000002,
1911 eFlgHasRapidSegments = 0x00000004,
1912 };
1913
1917 uint32 m_uFlags;
1921 uint32 m_uError;
1922
1925
1928
1935
1940
1943
1947 class CINOSMovePathHelper* m_pPrepareHelper;
1949 class CINOSMovePathHelper* m_pRunHelper;
1950
1953
1954 private:
1955
1957 uint32 m_uId;
1958
1960 char m_cName[256];
1961
1963 char m_cInterpolatorType[32];
1964
1966 CINOSTaskQueue* m_pCmdQueue;
1967
1972
1973
1975 inos_std::vector<
1977
1981 inos_std::vector<CINOSMovePathResource*> m_vAdditionalResources;
1982
1983 // misc properties
1984
1986 double m_dTolerance;
1988 double m_dEpsilon;
1989
1990 // max vectors
1991
1993 uint32 m_uTorqueLimit;
1995 TINOSMovePathVec vVmax;
1997 TINOSMovePathVec vVtrq;
1999 TINOSMovePathVec vAmax;
2001 TINOSMovePathVec vAtrq;
2003 TINOSMovePathVec vBmax;
2005 TINOSMovePathVec vBtrq;
2007 TINOSMovePathVec vJmax;
2008
2009 // edit helpers
2010
2012 CINOSMovePathSegmentBase* m_pActSegmentBase;
2014 CINOSMovePathSegmentNurbs* m_pActSegmentNurbs;
2016 TINOSMovePathVec m_vEditBegPos;
2017
2018 // internals
2019
2021 // used for run helper if core id is -1.
2022 int8 m_iCallerCore = -1;
2023
2024
2025
2026 // event handling
2027
2029 struct SINOSMovePathEventDesc* m_pEventDesc;
2031 CINOSMovePathEvent* m_pFstEvent;
2032
2033 // active callback
2034
2036 tpActiveCallback m_ActiveCallback;
2037
2038 // inco registration
2039
2041 uint32 m_uRegisterCnt = 0;
2043 CINCOObject* m_pRegister = nullptr;
2044
2045 // static members
2046
2048 static uint32 m_PathId;
2050 static const char* m_pCurveType;
2052 static const char* m_pInterpolatorType;
2054 static const char* m_pTrajectoryType;
2056 static uint32 m_uGlbLengthMask;
2058 static class CINOSBaseAxis* m_pGlbAxis[DF_INOS_MOVEPATH_MAX_AXES];
2059
2060 // dynamic
2062};
2063
2064//------------------------------------------------------------------------------
2065// end of file
2066//------------------------------------------------------------------------------
2067
2068#endif // INC_CINOSMOVEPATH_H
#define DF_INOS_MOVEPATH_VELOCITY_DEFAULT
Definition cinosmovepath.h:51
#define DF_INOS_MOVEPATH_FLAG_NO
Definition cinosmovepath.h:55
#define DF_INOS_MOVEPATH_FLAG_INC
Definition cinosmovepath.h:63
#define DF_INOS_MOVEPATH_OPTION_DEFAULT
Definition cinosmovepath.h:147
#define DF_INOS_MOVEPATH_ID_DEFAULT
Definition cinosmovepath.h:39
#define DF_INOS_MOVEPATH_TOLERANCE_DEFAULT
Definition cinosmovepath.h:43
The CINOSMovePath class.
The CINOSMovePathInterpolator class.
The CINOSMovePathPart class.
The CINOSMovePathPartCircle class.
The CINOSMovePathPartClothoid class.
The CINOSMovePathPartLinear class.
The CINOSMovePathPartLinearBay class.
The CINOSMovePathSegment class.
The CINOSMovePathSegment class.
The CINOSMovePathSegmentNurbs class.
The CINOSMovePathTrajectors class.
The CINOSMovePathTrajectoryConstant class.
The CINOSMovePathTrajectorySegment class.
#define DECLARE_DYNAMIC(aClass)
Definition cinospartitionmemory.h:328
Provides axis functionality.
Definition cinosbaseaxis.h:676
Definition cinosmcmodule.h:1900
Definition cinosmovepathcurve.h:56
bool GetPosition(uint32 auIndex, TINOSMovePathVec &ovPos)
get position vector auIndex
Definition cinosmovepathinterpolatorblend.h:71
Definition cinosmovepathinterpolatorclothoid.h:50
Definition cinosmovepathinterpolator.h:82
Definition cinosmovepathpart.h:45
Definition cinosmovepathsegmentbase.h:48
Definition cinosmovepathsegmentnurbs.h:47
Definition cinosmovepathsegment.h:45
Definition cinosmovepathtrajectory.h:81
void GetActual(SINOSRampData &aActual)
Get actual path s,v,a,j.
Definition cinosmovepathtrajectory.h:200
virtual uint32 GetData(TINOSMovePathVec &vPos, TINOSMovePathVec &vVel, TINOSMovePathVec &vAcc, TINOSMovePathVec &vJrk)
get data from trajectory buffer
virtual uint32 CancelData()
cancel trajectory buffer data
Definition cinosmovepath.h:566
CINOSMovePathCurve * m_pMainCurve
pointer to main curve
Definition cinosmovepath.h:1942
virtual uint32 iCancelData(class CINOSTaskExMsg *apMsg)
internal cancel data
static uint32 Create(CINOSMovePath *&apPath, uint32 auOptions=uint32(0x00000000))
Create a movepath instance.
CMcResult PutCmd(uint32 auCommand, CINOSSync *apSync=DF_INOS_ASYNCHRONOUS)
put command to queue
CINOSMovePathCurve * m_pRunCurve
pointer to run curve
Definition cinosmovepath.h:1939
virtual uint32 CancelData()
Cancel data from running path (inform trajectory generator, that we don't need data anymore.
Definition cinosmovepath.h:1533
virtual uint32 GetAtrq(TINOSMovePathVec &aAtrq)
get Atrq vector
Definition cinosmovepath.h:1604
virtual uint32 iContinue(class CINOSTaskExMsg *apMsg)
internal continue
virtual uint32 GetAmax(TINOSMovePathVec &aAmax)
get Amax vector
Definition cinosmovepath.h:1598
CINOSMovePath(const char *apName, const char *apCurveType, const char *apInterpolatorType, const char *apTrajectoryType, uint32 auOptions)
constructor (application should use CINOSMovePath::Create)
CINOSMovePathCurve * GetPrepareCurve()
get pointer to path prepare curve
Definition cinosmovepath.h:1640
virtual uint32 CircleCW(uint8 auIndex1, uint8 auIndex2, double adEnd1, double adEnd2, double adRadius, uint32 auFlags=0)
Add a clock wise circle part to the current segment.
virtual uint32 Linear(uint8 auIndex, double adPosition, uint32 auFlags=0)
Add a linear part to the current segment.
virtual uint32 Break(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Break the running path.
virtual uint32 Reset()
Reset the path, resets curves, interpolators and trajectories does not reset parameters of the movepa...
virtual uint32 Append(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Appends curves that have been edited to the path.
CINOSMutex m_MainMutex
the main mutex
Definition cinosmovepath.h:1927
CINOSMovePathCurve * m_pRawCurve
pointer to raw curve
Definition cinosmovepath.h:1932
virtual uint32 CircleCC(uint8 auIndex1, uint8 auIndex2, double adMid1, double adMid2, double adAngle, bool abAngleAbsolute, uint32 auFlags=0)
Add a counter clock wise circle part to the current segment.
void SetTrajectory(CINOSMovePathTrajectory *apTrajectory)
set pointer to path trajectory
virtual CMcResult Run(const char *apSpeedset, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Run the path.
virtual void SetState(EState aeState)
set move path state
Definition cinosmovepath.h:1825
virtual uint32 GetCycleTime(double &adCycleTime)
Return the path cycle time [sec].
virtual uint32 EditBegin(uint32 auFlags=0x00000002, double adTolerance=-1.0, double adVelocity=-1.0)
Enter into edit mode.
uint32 m_uFlags
flags
Definition cinosmovepath.h:1917
uint32 WaitCmd(uint32 auCommand, uint32 auError=INOS_MOVEPATH_ERROR_NO_COMMAND_QUEUE)
wait for auCommand or eCmdAbort (return auError if no command queue available)
const char * GetName() const
Get move path name.
Definition cinosmovepath.h:625
virtual void SetError(uint32 auError)
set move path error
Definition cinosmovepath.h:1832
class TINOSMotionFrame< DF_INOS_MOVEPATH_MAX_AXES > * GetFrame()
get currently selected frame
Definition cinosmovepath.h:1839
virtual uint32 SetParam(uint8 auIndex, const char *apName, const char *apValue)
Set axis specific movepath parameter to given value.
CMcResult PutMsg(CINOSTaskExMsg *apMsg)
put message into helpers queue
virtual uint32 NrbEnd()
End of nurbs curve segment.
CINOSMovePathCurve * GetEditCurve()
get pointer to path edit curve
Definition cinosmovepath.h:1637
virtual uint32 AddEvent(const char *apName, double adValue, uint32 auType)
Return the path cycle time [sec].
uint32 GetAxesErrorMask()
Get axes error mask. Returns an axis on error pattern (bit set means, the corresponding axis is on er...
virtual uint32 GetData(TINOSMovePathVec &vPos, TINOSMovePathVec &vVel, TINOSMovePathVec &vAcc, TINOSMovePathVec &vJrk)
Get actual path data.
Definition cinosmovepath.h:1479
virtual ~CINOSMovePath()
destructor (application should use CINOSMovePath::Destroy)
virtual CMcResult Run(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Run the path.
virtual uint32 NrbBegin(uint32 auId=0xffffffff, uint32 auFlags=0x00000000, uint32 auDegree=3, uint32 auInterpolationPoints=DF_INOS_NURBSCURVE_INTERPOLATION_POINTS, double adVelocity=-1.0)
Mark the begin of a nurbs curve segment.
virtual uint32 GetParam(uint8 auIndex, const char *apName, double &adValue, double adDefault=0.0)
Get axis specific movepath parameter.
CINCOObject * RequestRegister()
return inco registration of path
virtual uint32 CircleCC(uint8 auIndex1, uint8 auIndex2, double adEnd1, double adEnd2, double adMid1, double adMid2, uint32 auFlags=0)
Add a counter clock wise circle part to the current segment.
static CINOSBaseAxis * glbGetAxis(uint8 auIndex)
Get pointer to globally mapped axis with given index.
uint32 GetOptions() const
Get move path options.
Definition cinosmovepath.h:633
virtual CMcResult Prepare(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Precalculate the path.
virtual uint32 AcceptError()
Accept pending error and return its code, see also INOS_MOVEPATH_ERROR_GENERAL.
Definition cinosmovepath.h:613
static uint32 glbGetActPosition(const char *apName, double &adPosition, uint32 auOptions=uint32(0x00000000))
Get actual commanded position of given axis.
virtual uint32 iBreak(class CINOSTaskExMsg *apMsg)
internal break
struct SINOSMovePathEventDesc * GetEventDescriptor()
get event receiver
Definition cinosmovepath.h:1846
uint32 HandleCmd(uint32 auError=INOS_OK)
check command queue (return auError if no command queue available)
virtual uint32 NrbPoint(double adP0, double adP1, double adWeight=1.0)
Add a control point to the nurbs curve.
virtual bool GetPosition(uint32 auIndex, TINOSMovePathVec &ovPos)
get position vector at index auIndex
Definition cinosmovepath.h:1559
void GetActual(SINOSRampData &aActual)
Get actual path s,v,a,j.
Definition cinosmovepath.h:1708
virtual uint32 GetData(uint32 &auSegmentId, TINOSMovePathVec &vPos, TINOSMovePathVec &vVel, TINOSMovePathVec &vAcc, TINOSMovePathVec &vJrk)
Get actual path data.
Definition cinosmovepath.h:1505
virtual uint32 AddResource(const char *apName, uint8 &auIndex, uint32 auFlags=0x00000000, const char *apType="PosAxis")
Add recource with given recource name and type.
uint32 SetMapping(class CINOSMatrix *apMapping)
Set a virtual to physical axis mapping.
void GetPositionFirst(TINOSMovePathVec &ovFirst)
get first path position vector
virtual uint32 GetMoveRemaining(double &adMoveRemaining)
Return the remaining path length [path units]. It can be used to ask for the actual remaining length ...
virtual uint32 GetMoveTime(double &adMoveTime, double adDelta=0.0)
Return time [sec] the path needs until End - Delta.
virtual uint32 SetParam(const char *apName, double adValue)
Set movepath parameter to given value.
virtual uint32 iCircleAngle(bool abCw, uint8 auIndex1, uint8 auIndex2, double adMid1, double adMid2, double adAngle, bool abAngleAbsolute, uint32 auFlags)
internal circle angle
CINOSMovePathCurve * m_pEditCurve
pointer to edit curve
Definition cinosmovepath.h:1930
static uint32 Create(CINOSMovePath *&apPath, const char *apName, uint32 auOptions=uint32(0x00000000))
Create a movepath instance with given name.
CINOSMovePathTrajectory * GetTrajectory()
get pointer to path trajectory
Definition cinosmovepath.h:1648
virtual uint32 Fail(uint32 auError)
Cancel running path with a given error.
virtual uint32 iCircleRadius(bool abCw, uint8 auIndex1, uint8 auIndex2, double adEnd1, double adEnd2, double adRadius, uint32 auFlags)
internal circle radius
virtual double GetTolerance()
get path tolerance
Definition cinosmovepath.h:1580
uint32 SetCurve(CINOSMovePathCurve *apCurve)
set pointer to path curve (deprecated)
void GetActPosition(TINOSMovePathVec &ovAct)
get actual axes position vector
uint32 DispatchCmd(CINOSTaskExMsg *apCmd)
dispatch command
virtual uint32 iAppend(class CINOSTaskExMsg *apMsg)
internal append
virtual uint32 GetBtrq(TINOSMovePathVec &aBtrq)
get Btrq vector
Definition cinosmovepath.h:1616
CINOSMovePathCurve * GetCurve()
get pointer to maincurve
Definition cinosmovepath.h:1632
virtual uint32 iSetParam(uint8 auIndex, const char *apName, double adValue)
internal set param
virtual uint32 iCancel(class CINOSTaskExMsg *apMsg)
internal cancel
virtual uint32 GetJmax(TINOSMovePathVec &aJmax)
get Jmax vector
Definition cinosmovepath.h:1622
virtual uint32 GetParam(const char *apName, double &adValue, double adDefault=0.0)
Get movepath parameter.
static uint32 Create(CINOSMovePath *&apPath, const char *apName, const char *apCurveType, const char *apInterpolatorType, const char *apTrajectoryType, uint32 auOptions=uint32(0x00000000))
Create a movepath instance with given name.
EState m_eState
state
Definition cinosmovepath.h:1915
virtual uint32 CircleCW(uint8 auIndex1, uint8 auIndex2, double adMid1, double adMid2, double adAngle, bool abAngleAbsolute, uint32 auFlags=0)
Add a clock wise circle part to the current segment.
uint32 m_uError
error
Definition cinosmovepath.h:1921
virtual uint32 EditEnd(bool abIncomplete=false)
Exit edit mode.
virtual uint32 GetMaxConstantVelocity(double &adMaxConstantVelocity)
Return the max. allowed constant velocity the path can be run with without violating any axes limits ...
virtual uint32 GetVtrq(TINOSMovePathVec &aVtrq)
get Vtrq vector
Definition cinosmovepath.h:1592
virtual uint32 iStop(class CINOSTaskExMsg *apMsg)
internal stop
virtual uint32 LinearBay(uint8 auIndex1, uint8 auIndex2, double adPosition1, double adPosition2, double adLength, uint32 auFlags=0)
Add a linear bay part to the current segment.
virtual uint32 iGetParam(uint8 auIndex, const char *apName, char *apValue, uint32 auSize, const char *apDefault)
internal get param
virtual uint32 CircleCW(uint8 auIndex1, uint8 auIndex2, double adEnd1, double adEnd2, double adMid1, double adMid2, uint32 auFlags=0)
Add a clock wise circle part to the current segment.
uint32 GetError() const
Return current pending movepath error, see also INOS_MOVEPATH_ERROR_GENERAL.
Definition cinosmovepath.h:605
virtual uint32 GetMoveTicks(uint64 &adMoveTicks, double arDelta=0.0)
Return bus ticks the path needs until End - Delta.
virtual uint32 NrbKnot(double adValue, uint32 auMultiplicity=1)
Add a control point to the nurbs curve.
virtual uint32 GetMoveLength(double &adMoveLength)
Return the path length [path units].
virtual uint32 GetTorqueLimit()
get torque limit
Definition cinosmovepath.h:1569
bool IsMoving() const
virtual uint32 SetParam(const char *apName, const char *apValue)
Set movepath parameter to given value.
virtual uint32 iStartRun(class CINOSTaskExMsg *apMsg)
internal run
virtual CMcResult Prepare(const char *apSpeedset, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Precalculate the path.
virtual uint32 Stop(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Stop the running path.
virtual uint32 SetAxis(const char *apName, uint8 auIndex, uint32 auFlags=0x00000000, const char *apType="PosAxis")
Map given axis name to given index.
class CINOSMovePathHelper * m_pPrepareHelper
pointer to prepare helper thread
Definition cinosmovepath.h:1947
virtual uint32 GetBmax(TINOSMovePathVec &aBmax)
get Bmax vector
Definition cinosmovepath.h:1610
virtual uint32 CircleCC(uint8 auIndex1, uint8 auIndex2, double adEnd1, double adEnd2, double adRadius, uint32 auFlags=0)
Add a counter clock wise circle part to the current segment.
class CINOSMovePathResourceAxis * GetAxis(uint32 auIndex)
get pointer to axis
Definition cinosmovepath.h:1654
virtual uint32 iSetParam(uint8 auIndex, const char *apName, const char *apValue)
internal set param
virtual uint32 iPrepareAppend(class CINOSTaskExMsg *apMsg)
internal prepare append
EState GetState() const
Get move path state.
Definition cinosmovepath.h:590
uint32 m_uLengthMask
axes flags
Definition cinosmovepath.h:1952
CINOSMovePathTrajectory * m_pTrajectory
pointer to trajectory
Definition cinosmovepath.h:1945
uint32 m_uActInvolved
temporary segment involved
Definition cinosmovepath.h:1924
CINOSMovePathCurve * GetRunCurve()
get pointer to path run curve
Definition cinosmovepath.h:1643
virtual uint32 GetPositionDelta(TINOSMovePathVec &vDelta)
Get position delta between end and start of path.
virtual uint32 GetParam(uint8 auIndex, const char *apName, char *apBuffer, uint32 auSize, const char *apDefault="")
Get axis specific movepath parameter.
virtual uint32 GetCycleData(double &adMainCycleTime, uint8 &auMainAxisIndex, inos_std::vector< uint8 > &auMainCycleDownSampling, uint8 &auMainOversampling)
Return path cycle data.
std::function< uint32(CINOSMovePath *, uint32, TINOSMovePathVec &, TINOSMovePathVec &, TINOSMovePathVec &, TINOSMovePathVec &)> tpActiveCallback
Set callback method used for active trajectory handling. This callback is called on every sample and ...
Definition cinosmovepath.h:1697
CINOSTaskQueue * GetCmdQueue()
get pointer to command queue
virtual uint32 GetVmax(TINOSMovePathVec &aVmax)
get Vmax vector
Definition cinosmovepath.h:1586
virtual uint32 SegBegin(uint32 auId=0xffffffff, uint32 auFlags=0x00000000, double adTolerance=-1.0, double adVelocity=-1.0)
Mark the begin of a movepath segment.
static uint32 Create(CINOSMovePath *&apPath, const char *apCurveType, const char *apInterpolatorType, const char *apTrajectoryType, uint32 auOptions=uint32(0x00000000))
Create a movepath instance.
uint32 m_uOptions
options
Definition cinosmovepath.h:1919
static uint32 Destroy(CINOSMovePath *apPath)
Destroy given movepath.
CINOSMovePathCurve * m_pPrepareCurve
pointer to prepare curve
Definition cinosmovepath.h:1937
static uint32 Create(CINOSMovePath *&apPath, const char *apName, const char *apCurveType, const char *apInterpolatorType, const char *apTrajectoryType, const char *apParam, uint32 auOptions=uint32(0x00000000))
Create a movepath instance with given name.
static uint32 glbSetAxis(const char *apName, uint8 auIndex, uint32 auFlags=0x00000000, uint32 auOptions=uint32(0x00000000))
Globally map given axis name to given index.
virtual uint32 GetParam(const char *apName, char *apBuffer, uint32 auSize, const char *apDefault="")
Get movepath parameter.
virtual uint32 SetParam(uint8 auIndex, const char *apName, double adValue)
Set axis specific movepath parameter to given value.
uint32 AddPart(CINOSMovePathPart *apPart, uint32 auFlags)
add part to actual segment
virtual double GetEpsilon()
get path epsilon
Definition cinosmovepath.h:1574
class CINOSMovePathHelper * m_pRunHelper
pointer to run helper thread
Definition cinosmovepath.h:1949
EState
move path states
Definition cinosmovepath.h:572
void ReleaseRegister()
release inco registration of path
virtual uint32 Start(uint8 auIndex, double adPosition)
Set curve start position of given axis.
CINOSMovePathCurve * m_pAppendCurve
pointer to curve to append
Definition cinosmovepath.h:1934
void GetPositionLast(TINOSMovePathVec &ovLast)
get last path position vector
bool GetBufferFillLevel(uint32 &auBufferFillLevel) const
virtual uint32 SegEnd()
Exit segment mode.
virtual uint32 iPrepare(class CINOSTaskExMsg *apMsg)
internal prepare
virtual uint32 Continue(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Continue paused path.
virtual uint32 iGetParam(uint8 auIndex, const char *apName, double *adValue, double adDefault)
internal get param
virtual CMcResult Cancel(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Cancel the running path.
virtual uint32 SetEventDescriptor(struct SINOSMovePathEventDesc *apDesc)
Set event receiver.
Definition cinosmutex.h:36
Definition inos_syn.h:67
Definition cinostaskex.h:396
#define DF_INOS_NURBSCURVE_INTERPOLATION_POINTS
Definition inosdefault.h:188
#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
#define DF_INOS_ASYNCHRONOUS
Definition inosmacro.h:337
#define DF_INOS_SYNCHRONOUS
Definition inosmacro.h:332
#define ASSERT_ALWAYS(f)
Definition inosmacro.h:696
ramp data
Definition cinosbaseramp.h:602