FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
LocalConnection.h
1#ifndef LocalConnection_h__
2#define LocalConnection_h__
3
84#include <string>
85
86#include <fhsim/simobject/ISimObjectCreator.h>
87#include <Eigen/Eigen>
88
89#ifdef FH_VISUALIZATION
90 #include "sfh/ogre/C3DArrow.h"
91#endif
92
93
94class FhSimMgr;
95
96namespace Ship{
97 class LocalConnection: public SimObject
98 {
99 public:
100 LocalConnection( const std::string simObjectName, ISimObjectCreator* const creator);
102 virtual void OdeFcn(const double T, const double* const X, double* const XDot) const;
103 virtual void InitialConditionSetup(const double T, const double *const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
104 #ifdef FH_VISUALIZATION
105 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
106 virtual void RenderUpdate( const double T, const double* const X );
107 #endif
108 public:
109
111 const double * OffsetBody(const double T, const double * const X);
113 const double * RotationBody(const double T, const double * const X);
114
116 const double * PositionNED(const double T, const double * const X);
118 const double * VelocityNED(const double T, const double * const X);
120 const double * VelocityBody(const double T, const double * const X);
122 const double * OmegaNED(const double T, const double * const X);
125 const double * QuaternionNED(const double T, const double * const X);
127 const double * Axis1NED(const double T, const double * const X);
129 const double * Axis2NED(const double T, const double * const X);
131 const double * Axis3NED(const double T, const double * const X);
134 const double * ForceNED(const double T, const double * const X);
136 const double * TorqueNED(const double T, const double * const X);
138 const double * ForceBody(const double T, const double * const X);
140 const double * TorqueBody(const double T, const double * const X);
142 const double * ParentQuaterion(const double T, const double * const X);
143
144 protected:
145
146 const double * Force(const double T, const double * const X);
148 const double * Torque(const double T, const double * const X);
149
150 mutable double m_positionNED[3];
151 mutable double m_omegaNED[3];
152 mutable double m_velocityNED[3];
153 mutable double m_omegaBody[3];
154 mutable double m_velocityBody[3];
155 mutable double m_quaternionNED[4];
156
157 mutable double m_axis1NED[3];
158 mutable double m_axis2NED[3];
159 mutable double m_axis3NED[3];
160
161 mutable double m_ForceNED[3];
162 mutable double m_TorqueNED[3];
163
164 mutable double m_ForceBody[3];
165 mutable double m_TorqueBody[3];
166
167 bool m_isAzimuth;
168 double m_azimuthLoss[2];
169
171 double AzimuthLossFactor( const double angle ) const;
172
173
181 ISignalPort *m_InParentOmegaNED;
183 ISignalPort *m_InForce;
185 ISignalPort *m_InMotorAngularTarget[3];
187 ISignalPort *m_InMotorLinearTarget[3];
189 double m_Offset[3];
194
196 ISignalPort *m_InOffset;
199 ISignalPort *m_InPositionCGNED;
200
201 bool m_isLinearMotor;
202 bool m_isAngularMotor;
203 int m_stateLinearMotor[3];
204 int m_stateAngularMotor[3];
205
206 double m_linearMotorMaxChangerate[3];
207 double m_angularMotorMaxChangerate[3];
208 double m_linearMotorConstants[3];
209 double m_angularMotorConstants[3];
210
211 double m_linearStaticOffset[3];
212 double m_angularStaticOffset[3];
213
214 double m_linearForceAttackOffset[3];
215
216 ICommonComputation *m_computePosition, *m_computeForce;
217 void ComputePostition( const double T, const double * const X) const;
219 Eigen::Vector3d AngularMotorRate( const Eigen::Vector3d& target, const Eigen::Vector3d& state ) const;
220 void ComputeForce( const double T, const double * const X) const;
221
222#ifdef FH_VISUALIZATION
224 bool m_DrawConnection;
225 Ogre::Entity* m_RenderEntity;
226 Ogre::SceneNode* m_RenderNode;
227 C3DArrow *m_ForceArrow;
228
229 #endif
230 };
231}
232#endif // LocalConnection_h__
Definition LocalConnection.h:98
const double * Axis2NED(const double T, const double *const X)
double m_Offset[3]
Definition LocalConnection.h:189
double AzimuthLossFactor(const double angle) const
The factor on the force at the yaw angle angle of the connection: 1 with AzimuthLoss off,...
const double * ForceNED(const double T, const double *const X)
ISignalPort * m_InOffset
Definition LocalConnection.h:196
const double * OffsetBody(const double T, const double *const X)
const double * Axis3NED(const double T, const double *const X)
const double * TorqueNED(const double T, const double *const X)
const double * Torque(const double T, const double *const X)
ISignalPort * m_InParentOmegaNED
Definition LocalConnection.h:181
ISignalPort * m_InParentVelocityNED
Definition LocalConnection.h:179
ISignalPort * m_InPositionCGNED
Definition LocalConnection.h:199
const double * TorqueBody(const double T, const double *const X)
Eigen::Vector3d AngularMotorRate(const Eigen::Vector3d &target, const Eigen::Vector3d &state) const
The rate of the angular motor state: the angle error wrapped to [-pi,pi], divided by the motor consta...
ISignalPort * m_InMotorAngularTarget[3]
Definition LocalConnection.h:185
const double * QuaternionNED(const double T, const double *const X)
bool m_ForceInBodyFrame
Definition LocalConnection.h:193
const double * OmegaNED(const double T, const double *const X)
ISignalPort * m_InMotorLinearTarget[3]
Definition LocalConnection.h:187
const double * RotationBody(const double T, const double *const X)
ISignalPort * m_InForce
Definition LocalConnection.h:183
const double * ForceBody(const double T, const double *const X)
const double * Axis1NED(const double T, const double *const X)
const double * PositionNED(const double T, const double *const X)
ISignalPort * m_InParentQuaternionNED
Definition LocalConnection.h:177
bool m_ForceCalculator
Definition LocalConnection.h:191
const double * VelocityNED(const double T, const double *const X)
ISignalPort * m_InParentPositionNED
Definition LocalConnection.h:175
const double * VelocityBody(const double T, const double *const X)
const double * ParentQuaterion(const double T, const double *const X)
Simple waypoint object.
Definition CableAttach.h:58