FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
TrawlDoorControlledLift.h
1#pragma once
2
91#include "trawl/subroutines/PidWithExternalState.h"
92
93#include <fhsim/simobject/SimObject.h>
94#include <fhsim_environment/EnvironmentProvider.h>
95#include <fhsim_environment/SeafloorForcesInterface.h>
96#include <string>
97#include <vector>
98
99class TrawlDoorControlledLift : public SimObject
100{
101public:
102 TrawlDoorControlledLift(const std::string& simObjectName, ISimObjectCreator* creator);
103
104 void OdeFcn(const double T, const double* const X, double* const XDot) const override;
105 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator) override;
106 void AcceptedStep(const double T, const double* const X) override;
107
108#ifdef FH_VISUALIZATION
109 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
110 void RenderUpdate(const double T, const double* const X);
111#endif
112
113protected:
115 struct Loads
116 {
117 double lift;
118 double drag;
119 double weight;
120 double seafloor[3];
121 double total[3];
122 double spreadError;
123 double bottomForceError;
124 };
125
127 Loads ComputeLoads(const double T, const double* const X) const;
128
129 const double* OutPos(const double T, const double* const X, const int index);
130 const double* OutVel(const double T, const double* const X, const int index);
131 const double* OutLift(const double T, const double* const X);
132 const double* OutDrag(const double T, const double* const X);
133 const double* OutWeight(const double T, const double* const X);
134 const double* OutBottomContact(const double T, const double* const X);
135
136 bool m_isPort;
138 double m_mass;
140 double m_size;
141
142 environment::SeafloorForcesInterface* m_seafloorForces = nullptr;
143 environment::EnvironmentProvider* m_environment = nullptr;
144
145 std::vector<ISignalPort*> m_inForces;
146 ISignalPort* m_inDistanceGoal;
147 ISignalPort* m_inDistance;
148 ISignalPort* m_inBottomForceGoal;
149
150 int m_IStatePos;
151 int m_IStateVel;
152 int m_IStateIntegratedSpreadError;
153 int m_IStateIntegratedBottomForceError;
154
157
158 double m_outLift = 0.0;
159 double m_outDrag = 0.0;
160 double m_outWeight = 0.0;
161 double m_outBottomContact = 0.0;
162
163#ifdef FH_VISUALIZATION
164 Ogre::SceneNode* m_renderNode = nullptr;
165#endif
166};
PID controller for use inside a SimObject, whose integral is a state that FhSim integrates.
Definition PidWithExternalState.h:22
Definition TrawlDoorControlledLift.h:100
double m_mass
The mass [kg].
Definition TrawlDoorControlledLift.h:138
PidWithExternalState m_weightController
Weight from the bottom force error.
Definition TrawlDoorControlledLift.h:156
double m_liftDragRatio
Lift divided by drag.
Definition TrawlDoorControlledLift.h:139
bool m_isPort
Is this the port door?
Definition TrawlDoorControlledLift.h:136
double m_size
The diameter of the contact sphere [m].
Definition TrawlDoorControlledLift.h:140
PidWithExternalState m_distanceController
Lift from the spread error.
Definition TrawlDoorControlledLift.h:155
Loads ComputeLoads(const double T, const double *const X) const
The loads at (T, X).
bool m_useWidthMeasurement
Is Distance a measured width, rather than a reference position?
Definition TrawlDoorControlledLift.h:137
The forces and controller errors at one time and state.
Definition TrawlDoorControlledLift.h:116