FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
WaypointRefGenTracker.h
1#ifndef WaypointRefGenTracker_h__
2#define WaypointRefGenTracker_h__
3
46#include <string>
47#include <vector>
48
49#include <Eigen/Eigen>
50#include <Eigen/StdVector>
51
52#include <fhsim/simobject/SimObject.h>
53
54#ifdef FH_VISUALIZATION
55 #include "sfh/ogre/C3DLine.h"
56#endif
57namespace Ship{
58 class WaypointRefGenTracker: public SimObject
59 {
60 public:
61
62 EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
63 WaypointRefGenTracker(const std::string& simObjectName, ISimObjectCreator* const creator);
64
65 const double * DesiredPosition(const double T, const double*const X);
66 const double * DesiredVelocity(const double T, const double *const X);
67 const double * DesiredHeading(const double T, const double *const X);
68 const double * DesiredYawRate(const double T, const double *const X);
69
70 void OdeFcn(const double T, const double *const X, double *const XDot) const;
71
72 void InitialConditionSetup(const double T, const double *const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
73
74 std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d> > m_waypoints;
75 std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d> > straightStart;
76 std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d> > straightEnd;
77
78 std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d> > circleCenter;
79 std::vector<double> circleRadius;
80 std::vector<double> circleArcRadians;
81
82 std::vector<double> cummulativeLength;
83 std::vector<double> segmentLength;
84 std::vector<double> straightSegmentSpeed;
85 private:
86 unsigned int GetSegmentNumber(const double T,const double *const X) const;
87
88 Eigen::Vector3d GetCurrentTrackDirection(const double T,const double *const X) const;
89 Eigen::Vector3d GetCurrentTrackNormal(const double T,const double *const X) const;
90 double GetCurrentYawDesired(const double T,const double *const X) const;
91 double GetCurrentYawRateDesired(const double T,const double *const X) const;
92
93 Eigen::Vector3d GetCurrentTargetPoint(const double T,const double *const X) const;
94
95 ISignalPort *m_currentPosition;
96 ISignalPort *m_currentVelocity;
97
98 double m_desiredPosition[3];
99 double m_desiredHeading;
100 double m_desiedVelocity;
101 double m_desiredYawRate;
102
103 unsigned int m_trackState;
104 double m_lookaheadDistance;
105
106 int circleNoFromSegmentNo(int no)const {return no/2-1;}
107 int straightNoFromSegmentNo(int no)const {return (no-1)/2;}
108
109 #ifdef FH_VISUALIZATION
110 public:
111
112 C3DLine *sightline;
113 C3DLine *radline;
114 C3DLine *pathline;
115 C3DLine *removedlines;
116
117 Ogre::SceneNode ** m_legNodes;
118 Ogre::SceneNode ** m_circleNodes;
119 Ogre::SceneNode *m_targetNode;
120 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
121 void RenderUpdate(const double T, const double* const X);
122 #endif
123
124
125 };
126}
127#endif // WaypointRefGenTracker_h__
Definition WaypointRefGenTracker.h:59
Simple waypoint object.
Definition CableAttach.h:58