FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
C6DBody.h
1#ifndef C_6D_BODY_H
2#define C_6D_BODY_H
3
146#include "BodyKinematics6Dof.h"
147#include <string>
148
149#include <fhsim/simobject/SimObject.h>
150
151class C6DBody : public SimObject
152{
153 public:
154 C6DBody(std::string sSimObjectName, ISimObjectCreator* pCreator);
155
156#ifdef FH_VISUALIZATION
158 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
159
161 virtual void RenderUpdate(const double T, const double* const X);
162
163#endif
164
166 virtual void OdeFcn(const double dT, const double* const adX,
167 double* const adXDot) const;
168
169 bool HasJacobians() const override;
170 void OdeJacobian(double T, const double* X, double* J, int nStates) override;
171 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
172
174 virtual void CalcDerivatives(const double adLocalForces[3],
175 const double adLocalMoments[3],
176 const double adGlobalForces[3],
177 const double adGlobalMoments[3],
178 const double adVelLocal[3],
179 const double adOmegaLocal[3],
180 const double adQuater[4],
181 double adVelLocalDot[3],
182 double adOmegaLocalDot[3]) const;
183
184#ifdef USE_FULL_MASS_MATRIX
185 void CalcDerivatives(const double adSumForces[6],
186 const double adXVel_d[3],
187 const double adXOmega[3],
188 const double adXQuater[4],
189 const double R[3][3],
190 double adXPos_n_DotOut[3],
191 double adXVel_d_DotOut[3],
192 double adXOmega_DotOut[3],
193 double adXQuater_DotOut[4]);
194#endif
195
196 protected:
197 ISignalPort* m_pInMoment;
198 ISignalPort* m_pInForce;
199 virtual const double* Position(const double dT, const double* const adX);
200 virtual const double* Velocity(const double dT, const double* const adX);
201 virtual const double* Quater(const double dT, const double* const adX);
202 virtual const double* LocalVel(const double dT, const double* const adX);
203 virtual const double* AngVel(const double dT, const double* const adX);
204
205 double m_dMass;
206 double m_dGravity;
207 double m_adVelGlobal[3];
214
215 double m_adBodySize[3];
216#ifdef USE_FULL_MASS_MATRIX
217 bool m_bHasFullMassMatrix;
218 double m_mdMassInverse[6][6];
219#endif
220
221#ifdef FH_VISUALIZATION
222 std::string m_sMaterial;
223 std::string m_sMeshName;
224
225 double m_adMeshScale[3];
226 double m_adMeshOrigin[3];
227 double m_dVisScale;
228 double m_dLengthScale;
229 double m_dHeightScale;
230 double m_dCurvatureScale;
231 Ogre::Quaternion m_InitOrientation;
232 Ogre::Entity* m_pRenderEntity;
233 Ogre::SceneNode* m_pRenderNode;
234 Ogre::SceneManager* m_pSceneMgr;
235#endif
236};
237
238
239#endif
Definition BodyKinematics6Dof.h:42
Definition C6DBody.h:152
int m_IStatePos
Index of the global position in the state std::vector.
Definition C6DBody.h:210
double m_adDiagonalMass[6]
The diagonal of the mass matrix, assuming all cross coupling terms to be zero.
Definition C6DBody.h:208
double m_dMass
The mass of the object.
Definition C6DBody.h:205
ISignalPort * m_pInForce
A pointer to the input force.
Definition C6DBody.h:198
double m_dGravity
The gravitational acceleration.
Definition C6DBody.h:206
BodyKinematics6Dof m_kinematics
The states Pos, Quater, LocalVel and AngVel and their kinematics.
Definition C6DBody.h:209
virtual void OdeFcn(const double dT, const double *const adX, double *const adXDot) const
Calculates the state derivatives.
double m_adVelGlobal[3]
The global velocity.
Definition C6DBody.h:207
double m_adBodySize[3]
The size of the body along x-, y- and z-axis.
Definition C6DBody.h:215
ISignalPort * m_pInMoment
A pointer to the input moment.
Definition C6DBody.h:197
int m_IStateQuater
Index of the quaternions in the state std::vector.
Definition C6DBody.h:211
int m_IStateLocalVel
Index of the local velocity in the state std::vector.
Definition C6DBody.h:212
virtual void CalcDerivatives(const double adLocalForces[3], const double adLocalMoments[3], const double adGlobalForces[3], const double adGlobalMoments[3], const double adVelLocal[3], const double adOmegaLocal[3], const double adQuater[4], double adVelLocalDot[3], double adOmegaLocalDot[3]) const
Calculates the derivatives of the velocities when the forces and moments are known.
int m_IStateOmega
Index of the local angular velocity in the state std::vector.
Definition C6DBody.h:213