FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Cable6Dof.h
1#pragma once
2
92#include <Eigen/Eigen>
93
94#include <fhsim/simobject/SimObject.h>
95#include <fhsim_environment/EnvironmentProvider.h>
96
97#ifdef FH_VISUALIZATION
98# include "sfh/ogre/C3DLine.h"
99#endif
100
101namespace RbCable
102{
103class Cable6Dof : public SimObject
104{
105public:
106 Cable6Dof(const std::string& simObjectName, ISimObjectCreator* const creator);
107 ~Cable6Dof();
108 void OdeFcn(const double T, const double* const X, double* const XDot) const;
109 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
110 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator) override;
111
112 const double* forceA(const double T, const double* const X);
113 const double* forceB(const double T, const double* const X);
114
115 // const double* const energy(const double T, const double* const X);
116
117 void calculations(const double T, const double* const X);
118 void calculationsCommon(const double T, const double* const X) const;
119
120#ifdef FH_VISUALIZATION
121 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
122 void RenderUpdate(const double T, const double* const X);
123 Ogre::ColourValue tensionColor(double N);
124#endif
125
126protected:
127 typedef Eigen::Matrix<double, 3, 3> mat3;
128 typedef Eigen::Matrix<double, 3, 1> vec3;
129
130 // double m_energy[3];
131
132 int m_numElements;
133 double m_totalLength;
134 double m_radius;
135 double m_alpha;
136 double m_beta;
137 double m_epsilon;
138 double m_weight;
139 double m_rho;
140 double m_rhoWater;
141 environment::EnvironmentProvider* m_environment = nullptr;
142 double m_Ct; // tangential damping coefficient
143 double m_Cn; // normal damping coefficient
144
145 double m_L;
146 double m_M;
147 double m_Ixy;
148 double m_Iz;
149 mat3 m_baseM;
150
151 struct element
152 {
153 vec3 k;
154 vec3 LkXw;
155 mat3 Mi;
156 mat3 JMiJt;
157 int p;
158 int q;
159 int v;
160 int w;
161 };
162 element* m_el;
163
164 ISignalPort* m_posA;
165 ISignalPort* m_posB;
166 ISignalPort* m_velA;
167 ISignalPort* m_velB;
168
169 ICommonComputation* m_calcDynamics;
170 Eigen::Matrix<double, Eigen::Dynamic, 1> m_lambda;
171 Eigen::Matrix<double, Eigen::Dynamic, 1> m_F;
172 // double* m_lambda;
173
174 double m_forceA[3];
175 double m_forceB[3];
176
177#ifdef FH_VISUALIZATION
178 Ogre::ManualObject* m_ManualObject;
179 // Ogre::SceneManager* m_SceneMgr;
180 double m_scale;
181 Ogre::SceneNode* m_ManualObjectNode;
182 // C3DLine* m_line; ///< white linestrip visualization object
183#endif
184};
185} // namespace RbCable
Definition Cable6Dof.h:104
void FinalSetup(const double T, const double *const X, ISimObjectCreator *const creator) override
Takes the Environment (MARE-0315).
environment::EnvironmentProvider * m_environment
The shared resource Environment, set in FinalSetup.
Definition Cable6Dof.h:141
Cable6Dof(const std::string &simObjectName, ISimObjectCreator *const creator)
reads parameters, registers states, output and intput ports.
Definition Cable6Dof.h:152