Go to the documentation of this file.
27 #ifndef INC_CINOSMOVEPATH_H
28 #define INC_CINOSMOVEPATH_H
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
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
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
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_REGISTER_INCO uint32(0x00000004)
129 #define DF_INOS_MOVEPATH_OPTION_ALL \
130 (DF_INOS_MOVEPATH_OPTION_EXCEPTION_SUPPORT| \
131 DF_INOS_MOVEPATH_OPTION_REGISTER_INCO)
133 #define DF_INOS_MOVEPATH_OPTION_DEFAULT DF_INOS_MOVEPATH_OPTION_NONE
140 #define DF_INOS_MOVEPATH_HELPER_CORE_NAME "Helper.Core"
141 #define DF_INOS_MOVEPATH_HELPER_CORE_DEFAULT -1
146 #define DF_INOS_MOVEPATH_HELPER_PRIORITY_NAME "Helper.Priority"
147 #define DF_INOS_MOVEPATH_HELPER_PRIORITY_DEFAULT DF_INOS_TASK_PRIO_REALTIME_LOWEST
152 #define DF_INOS_MOVEPATH_PREPARE_HELPER_CORE_NAME "PrepareHelper.Core"
153 #define DF_INOS_MOVEPATH_PREPARE_HELPER_CORE_DEFAULT -1
158 #define DF_INOS_MOVEPATH_PREPARE_HELPER_PRIORITY_NAME "PrepareHelper.Priority"
159 #define DF_INOS_MOVEPATH_PREPARE_HELPER_PRIORITY_DEFAULT DF_INOS_TASK_PRIO_BACKGROUND
163 #define DF_INOS_MOVEPATH_RUN_HELPER_CORE_NAME "RunHelper.Core"
164 #define DF_INOS_MOVEPATH_RUN_HELPER_CORE_DEFAULT -1
169 #define DF_INOS_MOVEPATH_RUN_HELPER_PRIORITY_NAME "RunHelper.Priority"
170 #define DF_INOS_MOVEPATH_RUN_HELPER_PRIORITY_DEFAULT DF_INOS_TASK_PRIO_REALTIME_LOWEST
180 #define DF_INOS_MOVEPATH_MCROBOT_PREPAREPATH_NAME "McRobot.PreparePath"
181 #define DF_INOS_MOVEPATH_MCROBOT_PREPAREPATH_DEFAULT 0
182 #define DF_INOS_MOVEPATH_MCROBOT_PREPAREPATH_NOTHING 0
183 #define DF_INOS_MOVEPATH_MCROBOT_PREPAREPATH_ERROR 1
195 #define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_NAME "Shape.OnShrink"
196 #define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_DEFAULT 1
197 #define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_LIMIT_AMAX 0
198 #define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_STOP 1
199 #define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_ERROR 2
200 #define DF_INOS_MOVEPATH_INTERPOLATOR_SHAPE_ON_SHRINK_LIMIT_JMAX 3
207 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_MAX_ANGLE "Nurbs.MaxAngle"
208 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_MAX_ANGLE_DEFAULT 20.0
216 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_MAX_LENGTH "Nurbs.MaxLength"
217 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_MAX_LENGTH_DEFAULT 0.0
226 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_OVERLAP "Nurbs.Overlap"
227 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_OVERLAP_DEFAULT 0.2
233 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_VECTORIZE_FACTOR "Nurbs.Vectorize"
234 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_VECTORIZE_FACTOR_DEFAULT 0.1
240 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_INTERPOLATION_POINTS "Nurbs.InterpolationPoints"
241 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_INTERPOLATION_POINTS_DEFAULT DF_INOS_NURBSCURVE_INTERPOLATION_POINTS
248 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_D3_FACTOR "Nurbs.D3Factor"
249 #define DF_INOS_MOVEPATH_INTERPOLATOR_NURBS_D3_FACTOR_DEFAULT 20.0
257 #define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_PURE "Clothoid.Pure"
258 #define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_PURE_DEFAULT 1.0
266 #define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_REDUCE "Clothoid.Reduce"
267 #define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_REDUCE_DEFAULT 1.0
275 #define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_R "Clothoid.R"
276 #define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_L "Clothoid.L"
277 #define DF_INOS_MOVEPATH_INTERPOLATOR_CLOTHOID_A "Clothoid.A"
284 #define DF_INOS_MOVEPATH_TRAJECTORY_MAIN_AXIS_NAME "Trajectory.MainAxis"
285 #define DF_INOS_MOVEPATH_TRAJECTORY_MAIN_AXIS_DEFAULT 0
292 #define DF_INOS_MOVEPATH_TRAJECTORY_LOGGING_MASK "Trajectory.Logging.Mask"
293 #define DF_INOS_MOVEPATH_TRAJECTORY_LOGGING_MASK_DEFAULT 0x00000001
294 #define DF_INOS_MOVEPATH_TRAJECTORY_LOGGING_MASK_NONE 0.0
295 #define DF_INOS_MOVEPATH_TRAJECTORY_LOGGING_MASK_PATHS 0x00000001
307 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_TYPE_NAME "Trajectory.Buffer.Type"
308 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_TYPE_DEFAULT "active"
309 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_TYPE_NONE "none"
310 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_TYPE_ACTIVE "active"
311 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_TYPE_PASSIVE "passive"
315 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_SIZE_NAME "Trajectory.Buffer.Size"
316 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_SIZE_DEFAULT 256
320 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_READY_NAME "Trajectory.Buffer.Ready"
321 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_READY_DEFAULT 16
322 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_READY_FULL_PATH 0xffffffff
326 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_LOW_NAME "Trajectory.Buffer.Low"
327 #define DF_INOS_MOVEPATH_TRAJECTORY_BUFFER_LOW_DEFAULT 192
331 #define DF_INOS_MOVEPATH_TRAJECTORY_FILTER_LENGTH_NAME "Trajectory.Filter.Length"
332 #define DF_INOS_MOVEPATH_TRAJECTORY_FILTER_LENGTH_DEFAULT 0
345 #define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_ENABLE_NAME "Trajectory.Follow.Enable"
346 #define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_ENABLE_DEFAULT 0
347 #define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_INDEX_NAME "Trajectory.Follow.Index"
348 #define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_INDEX_DEFAULT 3
349 #define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_UNIT_NAME "Trajectory.Follow.Unit"
350 #define DF_INOS_MOVEPATH_TRAJECTORY_FOLLOW_UNIT_DEFAULT 0
360 #define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY "Trajectory.Constant.CheckVelocity"
361 #define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_NONE 0.0
362 #define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_DEFAULT 0.0
363 #define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_REDUCE 2.0
364 #define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_ONLY 1.0
374 #define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_OVERSAMPLING "Trajectory.Constant.CheckVelocity.Oversampling"
375 #define DF_INOS_MOVEPATH_TRAJECTORY_CONSTANT_CHECK_VELOCITY_OVERSAMPLING_DEFAULT 1.0
379 #define DF_INOS_MOVEPATH_TRAJECTORY_SEGMENT_CUBIC_REDUCTION_NAME "Trajectory.Segment.CubicReduction"
380 #define DF_INOS_MOVEPATH_TRAJECTORY_SEGMENT_CUBIC_REDUCTION_DEFAULT 1.0
389 #define DF_INOS_MOVEPATH_PARAM_SPEEDSET "SpeedSet"
393 #define DF_INOS_MOVEPATH_PARAM_SLOWMOTION "SlowMotion"
397 #define DF_INOS_MOVEPATH_PARAM_TOLERANCE "Tolerance"
401 #define DF_INOS_MOVEPATH_PARAM_VMAX "Vmax"
405 #define DF_INOS_MOVEPATH_PARAM_VTRQ "Vtrq"
409 #define DF_INOS_MOVEPATH_PARAM_AMAX "Amax"
413 #define DF_INOS_MOVEPATH_PARAM_ATRQ "Atrq"
417 #define DF_INOS_MOVEPATH_PARAM_BMAX "Bmax"
421 #define DF_INOS_MOVEPATH_PARAM_BTRQ "Btrq"
425 #define DF_INOS_MOVEPATH_PARAM_JMAX "Jmax"
430 #define DF_INOS_MOVEPATH_APPROACH_NAME "Approach"
431 #define DF_INOS_MOVEPATH_APPROACH_DEFAULT 0
435 #define DF_INOS_MOVEPATH_APPROACH_DISTANCE_NAME "Approach.Distance"
436 #define DF_INOS_MOVEPATH_APPROACH_DISTANCE_DEFAULT 5.0
440 #define DF_INOS_MOVEPATH_APPROACH_VELOCITY_NAME "Approach.Velocity"
441 #define DF_INOS_MOVEPATH_APPROACH_VELOCITY_DEFAULT 1.0
446 #define DF_INOS_MOVEPATH_RAPID_GATE_INVERT_NAME "RapidGateInverted"
447 #define DF_INOS_MOVEPATH_RAPID_GATE_INVERT_DEFAULT 0.0
457 #include <cinosvector.h>
458 #include <cinosmotionframe.h>
464 typedef TINOSVector<DF_INOS_MOVEPATH_MAX_AXES> TINOSMovePathVec;
467 #include <cinosmovepathparam.h>
468 #include <cinosmovepathevent.h>
472 #include <cinosmovepathresource.h>
473 #include <cinosmovepathresourceposaxis.h>
474 #include <cinosmovepathresourcespeedaxis.h>
475 #include <cinosmovepathresourcerapidgate.h>
483 #include <cinosmovepathinterpolatorsegment.h>
487 #include <cinosmovepathtrajectorylookahead.h>
489 #ifdef INOS_MOVEPATH_SKYWRITING_SUPPORT
490 #include <cinosmovepathsegmentrapid.h>
491 #include <cinosmovepathpartrapid.h>
492 #include <cinosmovepathtrajectoryskywriting.h>
504 #define DF_INOS_EVENT_LOGGER_FONT_COLOR_MOVEPATH_CREATE 0x00808000
505 #define DF_INOS_EVENT_LOGGER_FONT_COLOR_MOVEPATH_RUN 0x00008080
507 #ifdef INOS_MOVEPATH_TRACE_SUPPORT
508 #define MOVEPATH_TRACE_CREATE( path, apFormat, aArgs... ) \
509 if( CINOSEventLogger::Instance().IsLevelActive(DF_INOS_EVENT_LOGGER_LEVEL_MOVEPATH_CREATE) ) {\
511 inos_strncpy(cBuffer, "MOVEPATH[%s] : ", sizeof(cBuffer)); \
512 inos_strcat(cBuffer, apFormat, sizeof(cBuffer)); \
513 CINOSEventLogger::Instance().EvtLog( \
514 DF_INOS_EVENT_LOGGER_LEVEL_MOVEPATH_CREATE, \
515 __PRETTY_FUNCTION__, \
518 DF_INOS_EVENT_LOGGER_FONT_COLOR_MOVEPATH_CREATE, \
519 cBuffer, path->GetName(), \
522 #define MOVEPATH_TRACE_RUN( path, apFormat, aArgs... ) \
523 if( CINOSEventLogger::Instance().IsLevelActive(DF_INOS_EVENT_LOGGER_LEVEL_MOVEPATH_RUN) ) {\
525 inos_strncpy(cBuffer, "MOVEPATH[%s] : ", sizeof(cBuffer)); \
526 inos_strcat(cBuffer, apFormat, sizeof(cBuffer)); \
527 CINOSEventLogger::Instance().EvtLog( \
528 DF_INOS_EVENT_LOGGER_LEVEL_MOVEPATH_RUN, \
529 __PRETTY_FUNCTION__, \
532 DF_INOS_EVENT_LOGGER_FONT_COLOR_MOVEPATH_RUN, \
533 cBuffer, path->GetName(), \
537 #if defined(_MSC_VER)
538 #define MOVEPATH_TRACE_CREATE( path, apFormat, ... )
539 #define MOVEPATH_TRACE_RUN( path, apFormat, ... )
541 #define MOVEPATH_TRACE_CREATE( path, apFormat, aArgs... )
542 #define MOVEPATH_TRACE_RUN( path, apFormat, aArgs... )
643 uint32 auOptions = DF_INOS_MOVEPATH_OPTION_DEFAULT);
664 uint32 auOptions = DF_INOS_MOVEPATH_OPTION_DEFAULT);
685 const char* apCurveType,
const char* apInterpolatorType,
const char* apTrajectoryType,
686 uint32 auOptions = DF_INOS_MOVEPATH_OPTION_DEFAULT);
708 const char* apCurveType,
const char* apInterpolatorType,
const char* apTrajectoryType,
709 uint32 auOptions = DF_INOS_MOVEPATH_OPTION_DEFAULT);
733 const char* apCurveType,
const char* apInterpolatorType,
const char* apTrajectoryType,
734 const char* apParam, uint32 auOptions = DF_INOS_MOVEPATH_OPTION_DEFAULT);
756 static uint32
glbSetAxis(
const char* apName, uint8 auIndex,
758 uint32 auOptions = DF_INOS_MOVEPATH_OPTION_DEFAULT);
778 uint32 auOptions = DF_INOS_MOVEPATH_OPTION_DEFAULT);
793 virtual uint32
SetAxis(
const char* apName, uint8 auIndex,
795 const char* apType =
"PosAxis");
811 const char* apType =
"PosAxis");
839 virtual uint32
EditEnd(
bool abIncomplete =
false);
880 virtual uint32
Start(uint8 auIndex,
double adPosition);
895 virtual uint32
Linear(uint8 auIndex,
double adPosition, uint32 auFlags = 0);
913 virtual uint32
LinearBay(uint8 auIndex1, uint8 auIndex2,
double adPosition1,
914 double adPosition2,
double adLength, uint32 auFlags = 0);
933 virtual uint32
CircleCW(uint8 auIndex1, uint8 auIndex2,
934 double adEnd1,
double adEnd2,
double adMid1,
double adMid2,
954 virtual uint32
CircleCC(uint8 auIndex1, uint8 auIndex2,
955 double adEnd1,
double adEnd2,
double adMid1,
double adMid2,
976 virtual uint32
CircleCW(uint8 auIndex1, uint8 auIndex2,
977 double adMid1,
double adMid2,
double adAngle,
bool abAngleAbsolute,
998 virtual uint32
CircleCC(uint8 auIndex1, uint8 auIndex2,
999 double adMid1,
double adMid2,
double adAngle,
bool abAngleAbsolute,
1019 virtual uint32
CircleCW(uint8 auIndex1, uint8 auIndex2,
1020 double adEnd1,
double adEnd2,
double adRadius, uint32 auFlags=0);
1039 virtual uint32
CircleCC(uint8 auIndex1, uint8 auIndex2,
1040 double adEnd1,
double adEnd2,
double adRadius, uint32 auFlags=0);
1043 #ifdef INOS_MOVEPATH_SKYWRITING_SUPPORT
1064 virtual uint32 RapidEnd();
1077 virtual uint32 Rapid(uint8 auIndex,
double adPosition, uint32 auFlags = 0);
1098 uint32 auDegree = 3,
1118 virtual uint32
NrbPoint(
double adP0,
double adP1,
double adWeight = 1.0);
1130 #if DF_INOS_MOVEPATH_MAX_AXES > 2
1131 virtual uint32
NrbPoint(
double adP0,
double adP1,
double adP2,
double adWeight);
1145 #if DF_INOS_MOVEPATH_MAX_AXES > 3
1146 virtual uint32
NrbPoint(
double adP0,
double adP1,
double adP2,
double adP3,
1162 #if DF_INOS_MOVEPATH_MAX_AXES > 4
1163 virtual uint32
NrbPoint(
double adP0,
double adP1,
double adP2,
double adP3,
1164 double adP4,
double adWeight);
1177 virtual uint32
NrbKnot(
double adValue, uint32 auMultiplicity = 1);
1188 virtual uint32
Reset();
1199 virtual uint32
SetParam(
const char* apName,
double adValue);
1210 virtual uint32
SetParam(uint8 auIndex,
const char* apName,
double adValue);
1219 virtual uint32
SetParam(
const char* apName,
const char* apValue);
1230 virtual uint32
SetParam(uint8 auIndex,
const char* apName,
const char* apValue);
1240 virtual uint32
GetParam(
const char* apName,
double& adValue,
double adDefault = 0.0);
1251 virtual uint32
GetParam(uint8 auIndex,
const char* apName,
double& adValue,
double adDefault = 0.0);
1262 virtual uint32
GetParam(
const char* apName,
char* apBuffer, uint32 auSize,
const char* apDefault =
"");
1274 virtual uint32
GetParam(uint8 auIndex,
const char* apName,
char* apBuffer, uint32 auSize,
const char* apDefault =
"");
1293 virtual uint32
GetCycleData(
double& adMainCycleTime, uint8& auMainAxisIndex,
1294 inos_std::vector<uint8>& auMainCycleDownSampling, uint8& auMainOversampling);
1302 virtual uint32
GetMoveTime(
double& adMoveTime,
double adDelta = 0.0);
1310 virtual uint32
GetMoveTicks(uint64& adMoveTicks,
double arDelta = 0.0);
1347 virtual uint32
AddEvent(
const char* apName,
double adValue, uint32 auType);
1464 TINOSMovePathVec& vPos,
1465 TINOSMovePathVec& vVel,
1466 TINOSMovePathVec& vAcc,
1467 TINOSMovePathVec& vJrk)
1490 uint32& auSegmentId,
1491 TINOSMovePathVec& vPos,
1492 TINOSMovePathVec& vVel,
1493 TINOSMovePathVec& vAcc,
1494 TINOSMovePathVec& vJrk)
1529 virtual uint32
Fail(uint32 auError);
1555 return m_uTorqueLimit;
1566 return m_dTolerance;
1638 class CINOSMovePathResourceAxis*
GetAxis(uint32 auIndex)
1639 {
return m_pAxis[auIndex]; };
1641 class CINOSMovePathResource* GetResource(uint32 auIndex);
1666 uint32
SetMapping(
class CINOSMatrix* apMapping);
1685 m_ActiveCallback = aCallback;
1711 friend class CINOSMovePathHelper;
1715 friend class CINOSMovePathInterpolatorPolynom;
1717 template <
typename CINOSMovePath>
friend class CINOSTaskExMsgParam::CPtrContainer;
1718 friend class CINOSMcTargetMovePath;
1719 friend void _INI_0300_CINOSMovePath();
1722 friend class CINOSMovePathHelperTest;
1732 const char* apCurveType,
1733 const char* apInterpolatorType,
1734 const char* apTrajectoryType,
1739 virtual uint32 iCircle(
bool abCw, uint8 auIndex1, uint8 auIndex2,
1740 double adEnd1,
double adEnd2,
double adMid1,
double adMid2,
1743 virtual uint32
iCircleAngle(
bool abCw, uint8 auIndex1, uint8 auIndex2,
1744 double adMid1,
double adMid2,
double adAngle,
bool abAngleAbsolute,
1747 virtual uint32
iCircleRadius(
bool abCw, uint8 auIndex1, uint8 auIndex2,
1748 double adEnd1,
double adEnd2,
double adRadius, uint32 auFlags);
1752 virtual uint32
iPrepare(
const char* apSpeedSet);
1759 virtual uint32 iRun(
const char* apSpeedSet,
CINOSSync* apSync);
1780 virtual uint32
iSetParam(uint8 auIndex,
const char* apName,
double adValue);
1782 virtual uint32
iSetParam(uint8 auIndex,
const char* apName,
const char* apValue);
1784 virtual uint32
iGetParam(uint8 auIndex,
const char* apName,
double* adValue,
double adDefault);
1786 virtual uint32
iGetParam(uint8 auIndex,
const char* apName,
char* apValue, uint32 auSize,
const char* apDefault);
1833 return m_pEventDesc;
1844 static uint32 CheckSpeedSetValues(
const char* apSpeedSet);
1863 eCmdGetPositionDelta,
1864 eCmdGetMaxConstantVelocity,
1866 eCmdSetEventDescriptor,
1884 eParamIndexGlobalInternal = 0,
1885 eParamIndexGlobal = 0xff,
1886 eParamIndexMask = 0x0000ffff,
1887 eParamTypeNumber = 0x00010000,
1888 eParamTypeString = 0x00020000,
1893 eFlgOwnerInterpolator = 0x00000001,
1894 eFlgOwnerTrajectory = 0x00000002,
1895 eFlgHasRapidSegments = 0x00000004,
1947 char m_cInterpolatorType[32];
1950 CINOSTaskQueue* m_pCmdQueue;
1960 TINOSNameBalancedBinaryTree<SINOSMovePathParam>*> m_vParams;
1965 inos_std::vector<CINOSMovePathResource*> m_vAdditionalResources;
1970 double m_dTolerance;
1977 uint32 m_uTorqueLimit;
1979 TINOSMovePathVec vVmax;
1981 TINOSMovePathVec vVtrq;
1983 TINOSMovePathVec vAmax;
1985 TINOSMovePathVec vAtrq;
1987 TINOSMovePathVec vBmax;
1989 TINOSMovePathVec vBtrq;
1991 TINOSMovePathVec vJmax;
2000 TINOSMovePathVec m_vEditBegPos;
2006 int8 m_iCallerCore = -1;
2013 struct SINOSMovePathEventDesc* m_pEventDesc;
2015 CINOSMovePathEvent* m_pFstEvent;
2025 uint32 m_uRegisterCnt = 0;
2027 CINCOObject* m_pRegister =
nullptr;
2032 static uint32 m_PathId;
2034 static const char* m_pCurveType;
2036 static const char* m_pInterpolatorType;
2038 static const char* m_pTrajectoryType;
2040 static uint32 m_uGlbLengthMask;
2052 #endif // INC_CINOSMOVEPATH_H
Definition: cinosmutex.h:35
uint32 DispatchCmd(CINOSTaskExMsg *apCmd)
dispatch command
virtual uint32 GetMaxConstantVelocity(double &adMaxConstantVelocity)
Return the max. allowed constant velocity the path can be run with without violating any axes limits ...
#define DF_INOS_NURBSCURVE_INTERPOLATION_POINTS
Definition: inosdefault.h:196
virtual uint32 iStartRun(class CINOSTaskExMsg *apMsg)
internal run
bool GetPosition(uint32 auIndex, TINOSMovePathVec &ovPos)
get position vector auIndex
Definition: cinosmovepathinterpolatorblend.h:70
The CINOSMovePathSegment class.
The CINOSMovePathSegment class.
#define DF_INOS_MOVEPATH_ID_DEFAULT
Definition: cinosmovepath.h:39
uint32 AddPart(CINOSMovePathPart *apPart, uint32 auFlags)
add part to actual segment
virtual uint32 Stop(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Stop the running path.
virtual bool GetPosition(uint32 auIndex, TINOSMovePathVec &ovPos)
get position vector at index auIndex
Definition: cinosmovepath.h:1543
class TINOSMotionFrame< DF_INOS_MOVEPATH_MAX_AXES > * GetFrame()
get currently selected frame
Definition: cinosmovepath.h:1823
virtual uint32 EditBegin(uint32 auFlags=0x00000002, double adTolerance=-1.0, double adVelocity=-1.0)
Enter into edit mode.
virtual uint32 iBreak(class CINOSTaskExMsg *apMsg)
internal break
CINOSMovePathCurve * GetPrepareCurve()
get pointer to path prepare curve
Definition: cinosmovepath.h:1624
virtual uint32 NrbEnd()
End of nurbs curve segment.
virtual uint32 GetCycleData(double &adMainCycleTime, uint8 &auMainAxisIndex, inos_std::vector< uint8 > &auMainCycleDownSampling, uint8 &auMainOversampling)
Return path cycle data.
virtual uint32 AddEvent(const char *apName, double adValue, uint32 auType)
Return the path cycle time [sec].
Definition: cinosmovepathsegmentnurbs.h:46
CMcResult PutMsg(CINOSTaskExMsg *apMsg)
put message into helpers queue
virtual uint32 Continue(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Continue paused path.
virtual uint32 iPrepareAppend(class CINOSTaskExMsg *apMsg)
internal prepare append
Provides axis functionality.
Definition: cinosbaseaxis.h:679
virtual CMcResult Cancel(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Cancel the running path.
virtual uint32 iPrepare(class CINOSTaskExMsg *apMsg)
internal prepare
virtual uint32 GetAmax(TINOSMovePathVec &aAmax)
get Amax vector
Definition: cinosmovepath.h:1582
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 GetPositionDelta(TINOSMovePathVec &vDelta)
Get position delta between end and start of path.
static CINOSBaseAxis * glbGetAxis(uint8 auIndex)
Get pointer to globally mapped axis with given index.
virtual double GetTolerance()
get path tolerance
Definition: cinosmovepath.h:1564
virtual uint32 GetAtrq(TINOSMovePathVec &aAtrq)
get Atrq vector
Definition: cinosmovepath.h:1588
ramp data
Definition: cinosbaseramp.h:601
EState GetState() const
Get move path state.
Definition: cinosmovepath.h:574
CINOSMovePathCurve * GetCurve()
get pointer to maincurve
Definition: cinosmovepath.h:1616
CINOSMovePathCurve * m_pRunCurve
pointer to run curve
Definition: cinosmovepath.h:1923
virtual uint32 iStop(class CINOSTaskExMsg *apMsg)
internal stop
virtual uint32 iSetParam(uint8 auIndex, const char *apName, double adValue)
internal set param
EState
move path states
Definition: cinosmovepath.h:556
virtual uint32 GetMoveTime(double &adMoveTime, double adDelta=0.0)
Return time [sec] the path needs until End - Delta.
virtual uint32 GetBtrq(TINOSMovePathVec &aBtrq)
get Btrq vector
Definition: cinosmovepath.h:1600
uint32 m_uFlags
flags
Definition: cinosmovepath.h:1901
CINOSMovePathTrajectory * GetTrajectory()
get pointer to path trajectory
Definition: cinosmovepath.h:1632
Definition: cinosmovepathinterpolatorclothoid.h:49
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.
CINOSMovePathCurve * GetEditCurve()
get pointer to path edit curve
Definition: cinosmovepath.h:1621
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.
virtual uint32 iCancelData(class CINOSTaskExMsg *apMsg)
internal cancel data
#define DF_INOS_ASYNCHRONOUS
Definition: inosmacro.h:337
void GetActual(SINOSRampData &aActual)
Get actual path s,v,a,j.
Definition: cinosmovepath.h:1692
virtual uint32 iGetParam(uint8 auIndex, const char *apName, double *adValue, double adDefault)
internal get param
virtual uint32 SetParam(const char *apName, double adValue)
Set movepath parameter to given value.
void GetActual(SINOSRampData &aActual)
Get actual path s,v,a,j.
Definition: cinosmovepathtrajectory.h:200
virtual uint32 AcceptError()
Accept pending error and return its code, see also INOS_MOVEPATH_ERROR_GENERAL.
Definition: cinosmovepath.h:597
EState m_eState
state
Definition: cinosmovepath.h:1899
void GetPositionLast(TINOSMovePathVec &ovLast)
get last path position vector
virtual uint32 SetEventDescriptor(struct SINOSMovePathEventDesc *apDesc)
Set event receiver.
CINOSMovePathCurve * m_pRawCurve
pointer to raw curve
Definition: cinosmovepath.h:1916
virtual CMcResult Run(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Run the path.
The CINOSMovePathPartCircle class.
#define DF_INOS_MOVEPATH_FLAG_NO
Definition: cinosmovepath.h:55
void GetActPosition(TINOSMovePathVec &ovAct)
get actual axes position vector
CINOSMovePathCurve * m_pEditCurve
pointer to edit curve
Definition: cinosmovepath.h:1914
Definition: cinosmovepathinterpolator.h:81
virtual uint32 SegBegin(uint32 auId=0xffffffff, uint32 auFlags=0x00000000, double adTolerance=-1.0, double adVelocity=-1.0)
Mark the begin of a movepath segment.
virtual uint32 Start(uint8 auIndex, double adPosition)
Set curve start position of given axis.
virtual uint32 iAppend(class CINOSTaskExMsg *apMsg)
internal append
CINOSMovePathCurve * m_pMainCurve
pointer to main curve
Definition: cinosmovepath.h:1926
struct SINOSMovePathEventDesc * GetEventDescriptor()
get event receiver
Definition: cinosmovepath.h:1830
virtual CMcResult Prepare(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Precalculate the path.
virtual uint32 SegEnd()
Exit segment mode.
uint32 INOS_OK
Definition: inoserror.h:1680
void SetTrajectory(CINOSMovePathTrajectory *apTrajectory)
set pointer to path trajectory
CMcResult PutCmd(uint32 auCommand, CINOSSync *apSync=DF_INOS_ASYNCHRONOUS)
put command to queue
#define DF_INOS_MOVEPATH_FLAG_INC
Definition: cinosmovepath.h:63
virtual uint32 iCircleRadius(bool abCw, uint8 auIndex1, uint8 auIndex2, double adEnd1, double adEnd2, double adRadius, uint32 auFlags)
internal circle radius
The CINOSMovePathSegmentNurbs class.
The CINOSMovePathPartClothoid class.
CINOSMovePathCurve * GetRunCurve()
get pointer to path run curve
Definition: cinosmovepath.h:1627
virtual uint32 Break(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Break the running path.
const char * GetName() const
Get move path name.
Definition: cinosmovepath.h:609
uint32 m_uActInvolved
temporary segment involved
Definition: cinosmovepath.h:1908
virtual uint32 GetData(uint32 &auSegmentId, TINOSMovePathVec &vPos, TINOSMovePathVec &vVel, TINOSMovePathVec &vAcc, TINOSMovePathVec &vJrk)
Get actual path data.
Definition: cinosmovepath.h:1489
The CINOSMovePathTrajectorySegment class.
CINOSMovePathCurve * m_pAppendCurve
pointer to curve to append
Definition: cinosmovepath.h:1918
Definition: cinosmovepath.h:549
virtual void SetState(EState aeState)
set move path state
Definition: cinosmovepath.h:1809
virtual uint32 GetVtrq(TINOSMovePathVec &aVtrq)
get Vtrq vector
Definition: cinosmovepath.h:1576
virtual uint32 GetMoveLength(double &adMoveLength)
Return the path length [path units].
uint32 GetAxesErrorMask()
Get axes error mask. Returns an axis on error pattern (bit set means, the corresponding axis is on er...
The CINOSMovePathPartLinearBay class.
The CINOSMovePathPartLinear class.
CINOSMutex m_MainMutex
the main mutex
Definition: cinosmovepath.h:1911
Definition: cinosmovepathsegment.h:44
virtual uint32 GetTorqueLimit()
get torque limit
Definition: cinosmovepath.h:1553
Definition: cinosmovepathcurve.h:55
virtual uint32 GetJmax(TINOSMovePathVec &aJmax)
get Jmax vector
Definition: cinosmovepath.h:1606
virtual uint32 GetData(TINOSMovePathVec &vPos, TINOSMovePathVec &vVel, TINOSMovePathVec &vAcc, TINOSMovePathVec &vJrk)
get data from trajectory buffer
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.
virtual uint32 GetVmax(TINOSMovePathVec &aVmax)
get Vmax vector
Definition: cinosmovepath.h:1570
CINOSMovePathCurve * m_pPrepareCurve
pointer to prepare curve
Definition: cinosmovepath.h:1921
Definition: cinosmovepathsegmentbase.h:47
static uint32 glbSetAxis(const char *apName, uint8 auIndex, uint32 auFlags=0x00000000, uint32 auOptions=uint32(0x00000000))
Globally map given axis name to given index.
class CINOSMovePathResourceAxis * GetAxis(uint32 auIndex)
get pointer to axis
Definition: cinosmovepath.h:1638
Definition: cinosmovepathpart.h:44
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:1681
The CINOSMovePathInterpolator class.
virtual uint32 NrbPoint(double adP0, double adP1, double adWeight=1.0)
Add a control point to the nurbs curve.
virtual uint32 CancelData()
Cancel data from running path (inform trajectory generator, that we don't need data anymore.
Definition: cinosmovepath.h:1517
uint32 GetError() const
Return current pending movepath error, see also INOS_MOVEPATH_ERROR_GENERAL.
Definition: cinosmovepath.h:589
static uint32 glbGetActPosition(const char *apName, double &adPosition, uint32 auOptions=uint32(0x00000000))
Get actual commanded position of given axis.
uint32 GetOptions() const
Get move path options.
Definition: cinosmovepath.h:617
virtual uint32 iCancel(class CINOSTaskExMsg *apMsg)
internal cancel
virtual uint32 GetMoveTicks(uint64 &adMoveTicks, double arDelta=0.0)
Return bus ticks the path needs until End - Delta.
uint32 m_uLengthMask
axes flags
Definition: cinosmovepath.h:1936
virtual uint32 CancelData()
cancel trajectory buffer data
uint32 INOS_MOVEPATH_ERROR_NO_COMMAND_QUEUE
Definition: inoserror.h:1680
bool GetBufferFillLevel(uint32 &auBufferFillLevel) const
class CINOSMovePathHelper * m_pPrepareHelper
pointer to prepare helper thread
Definition: cinosmovepath.h:1931
real64 m_rJ
jerk
Definition: cinosbaseramp.h:610
The CINOSMovePathPart class.
CINOSMovePath(const char *apName, const char *apCurveType, const char *apInterpolatorType, const char *apTrajectoryType, uint32 auOptions)
constructor (application should use CINOSMovePath::Create)
CINCOObject * RequestRegister()
return inco registration of path
virtual uint32 GetBmax(TINOSMovePathVec &aBmax)
get Bmax vector
Definition: cinosmovepath.h:1594
#define DF_INOS_MOVEPATH_VELOCITY_DEFAULT
Definition: cinosmovepath.h:51
uint32 SetMapping(class CINOSMatrix *apMapping)
Set a virtual to physical axis mapping.
virtual uint32 GetData(TINOSMovePathVec &vPos, TINOSMovePathVec &vVel, TINOSMovePathVec &vAcc, TINOSMovePathVec &vJrk)
Get actual path data.
Definition: cinosmovepath.h:1463
#define DF_INOS_SYNCHRONOUS
Definition: inosmacro.h:332
static uint32 Destroy(CINOSMovePath *apPath)
Destroy given movepath.
#define DF_INOS_MOVEPATH_TOLERANCE_DEFAULT
Definition: cinosmovepath.h:43
The CINOSMovePathTrajectoryConstant class.
CINOSMovePathTrajectory * m_pTrajectory
pointer to trajectory
Definition: cinosmovepath.h:1929
virtual uint32 GetCycleTime(double &adCycleTime)
Return the path cycle time [sec].
virtual double GetEpsilon()
get path epsilon
Definition: cinosmovepath.h:1558
uint32 m_uError
error
Definition: cinosmovepath.h:1905
Definition: cinosmovepathtrajectory.h:80
virtual uint32 Reset()
Reset the path, resets curves, interpolators and trajectories does not reset parameters of the movepa...
uint32 SetCurve(CINOSMovePathCurve *apCurve)
set pointer to path curve (deprecated)
class CINOSMovePathHelper * m_pRunHelper
pointer to run helper thread
Definition: cinosmovepath.h:1933
uint32 WaitCmd(uint32 auCommand, uint32 auError=INOS_MOVEPATH_ERROR_NO_COMMAND_QUEUE)
wait for auCommand or eCmdAbort (return auError if no command queue available)
virtual ~CINOSMovePath()
destructor (application should use CINOSMovePath::Destroy)
virtual uint32 EditEnd(bool abIncomplete=false)
Exit edit mode.
The CINOSMovePathTrajectors class.
virtual uint32 NrbKnot(double adValue, uint32 auMultiplicity=1)
Add a control point to the nurbs curve.
CINOSTaskQueue * GetCmdQueue()
get pointer to command queue
Definition: inos_syn.h:66
#define DF_INOS_MOVEPATH_MAX_AXES
Definition: inosdefault.h:152
Definition: cinostaskex.h:395
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 SetAxis(const char *apName, uint8 auIndex, uint32 auFlags=0x00000000, const char *apType="PosAxis")
Map given axis name to given index.
virtual void SetError(uint32 auError)
set move path error
Definition: cinosmovepath.h:1816
virtual uint32 AddResource(const char *apName, uint8 &auIndex, uint32 auFlags=0x00000000, const char *apType="PosAxis")
Add recource with given recource name and type.
void GetPositionFirst(TINOSMovePathVec &ovFirst)
get first path position vector
virtual uint32 Linear(uint8 auIndex, double adPosition, uint32 auFlags=0)
Add a linear part to the current segment.
void ReleaseRegister()
release inco registration of path
virtual uint32 Append(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Appends curves that have been edited to the path.
real64 m_rV
velocity
Definition: cinosbaseramp.h:606
virtual uint32 iCircleAngle(bool abCw, uint8 auIndex1, uint8 auIndex2, double adMid1, double adMid2, double adAngle, bool abAngleAbsolute, uint32 auFlags)
internal circle angle
uint32 m_uOptions
options
Definition: cinosmovepath.h:1903
virtual uint32 Fail(uint32 auError)
Cancel running path with a given error.
real64 m_rA
acceleration
Definition: cinosbaseramp.h:608
uint32 HandleCmd(uint32 auError=INOS_OK)
check command queue (return auError if no command queue available)
#define ASSERT_ALWAYS(f)
Definition: inosmacro.h:696
static uint32 Create(CINOSMovePath *&apPath, uint32 auOptions=uint32(0x00000000))
Create a movepath instance.
real64 m_rS
position
Definition: cinosbaseramp.h:604
virtual uint32 GetParam(const char *apName, double &adValue, double adDefault=0.0)
Get movepath parameter.
virtual uint32 iContinue(class CINOSTaskExMsg *apMsg)
internal continue