LRAUV  revA
Simulator.h
Go to the documentation of this file.
1 
9 #ifndef SIMULATOR_H_
10 #define SIMULATOR_H_
11 
12 #include "SimInitStruct.h"
13 #include "SimResultStruct.h"
14 #include "SimRunStruct.h"
15 
16 #include "data/Location.h"
17 #include "data/Matrix6x6.h"
18 #include "data/Point3D.h"
19 #include "data/Point6D.h"
20 #include "ActuatorModel.h"
21 #include "ThrusterModel.h"
22 #include "utils/AuvMath.h"
23 
56 class Simulator
57 {
58 
59 public:
61  Simulator( bool simulateSensors, int nSteps );
62 
64  virtual ~Simulator();
65 
67  void initialize( const SimInitStruct& initParams, SimResultStruct& results );
68 
70  void run( const SimRunStruct& runParams, SimResultStruct& results );
71 
73  virtual void uninitialize() {}
74 
76  void motion( float propOmegaAction, float rudderAngleAction,
77  float elevatorAngleAction, float massPositionAction,
78  float buoyancyAction, int dropWeightState,
79  float density, float dt,
80  SimResultStruct& results );
81 
85  long setLocation( const double& latitude, const double& longitude );
86 
88  void setDepth( float depth );
89 
91  void setHeading( float heading );
92 
94  void setPitch( float pitch );
95 
97  void setRoll( float roll );
98 
100  void setPropOmega( float propOmega );
101 
103  void setRudderAngle( float rudderAngle );
104 
106  void setElevatorAngle( float elevatorAngle );
107 
109  void setMassPosition( float massPosition );
110 
112  void setBuoyancyPosition( float buoyancyPosition );
113 
114 private:
115  // Note that the copy constructor below is private and not given a body.
116  // Any attempt to call it will return a compiler error.
117  Simulator( const Simulator& old ); // disallow copy constructor
118 
119 protected:
120 
121  virtual void publishState( SimResultStruct& results );
122 
123  virtual void configureSensors() {}
124 
125  virtual void simulateSensors( double latDeg, double lonDeg, SimResultStruct& results ) {}
126 
129  bool loadParams( const SimInitStruct& initParams, SimResultStruct& results );
130 
132  //ReturnMatrix invertMass( void );
133  void invertMass( SimResultStruct& results );
134 
136  void calcForce( Point6D &rate, Point6D &pos, float propOmegaAction,
137  float rudderAngleAction, float elevatorAngleAction,
138  float massPositionAction, float buoyancyAction,
139  int dropWeightState, float density, float dt, float smallDt );
140 
141  //------------------ Helper functions --------------------------------
142 
145  void calcFinForces( Point6D &rate, float ruddAngleProj, float elevAngleProj,
146  Point3D finForces[], Point3D finMoments[], float density );
147 
148  //*------------------- static constant variables ----------------------------*/
149 
151  enum
152  {
153  LO_RUDD, // Lower Rudder
154  PO_ELEV, // Port Elevator
155  UP_RUDD, // Upper Rudder
156  ST_ELEV, // Starboard Elevator
157  };
158 
160 #define EFF_FACTOR 0.90
161 
162  //*------------------- other member variables ----------------------------*/
163 
166 
169 
173 
175  float maxDt_;
176 
178  bool ok_;
179 
186 
189 
191  float netBuoy_;
192 
195 
198 
202 
206 
208  //unsigned int utmZone_;
209  //bool northernHemi_;
210 
211  // WGS84 position
212  double latitude_;
213  double longitude_;
214 
217 
219  float eastCurrent_;
220  float vertCurrent_;
221  float magneticVariation_; // Overrides value calculated from lat & lon
222  float soundSpeed_; // Overrides value calculated from density, pressure
223  float density_; // Overrides sea water density from ocean model.
224  float sst_; // Overrides sea surface temperature from ocean model
225  float tMixed_; // Overrides mixed layer depth temperature from ocean model
226  float t300_; // Overrides temperature at 300 meters from ocean model
227  float sss_; // Overrides sea surface salinity from ocean model
228  float sMixed_; // Overrides mixed layer depth salinity from ocean model
229  float s300_; // Overrides salinity at 300 meters from ocean model
230  float mixedLayerDepth_; // Overrides mixed layer depth from ocean model
231 
234 
235  // Variable buoyancy setting
236  float buoyancyNeutral_; // cc // volume in buoyancy "bag" at neutral tri,.
237 
240 
242  //
243  // x is fwd, y stbd, z down.
244  //
245 
246  //
248  //
249  float mass_;
251  float volume_;
256 
257  // Dropweight1 parameters
258  float dropWt1Volume_; /* volume of drop weight #1 */
259  float dropWt1Mass_; /* mass of drop weight #1 */
260  float dropWt1X_; /* location of drop weight #1 */
261  float dropWt1Y_;
262  float dropWt1Z_;
263 
264  // Simple geometry model of vehicle
267 
268  //
270  //
271  //
272  /* added mass */
273  float kpDot_;
274  float mqDot_;
275  float nrDot_;
276  float xuDot_;
277  float yvDot_;
278  float zwDot_;
279 
280  /* added mass cross terms */
281  float kvDot_;
282  float mwDot_;
283  float nvDot_;
284  float yrDot_;
285  float ypDot_;
286  float zqDot_;
287 
288  // /* quadratic drag */
289  float kpabp_; // Kp|p| , kg-m^2
290  float mqabq_; // Mq|q| , kg-m^2
291  float nrabr_; // Nr|r| , kg-m^2
292  float xuabu_;
293  float yvabv_; // Yv|v| , kg/m
294  float zwabw_; // Zw|w| , kg/m
295  //
296  // /* quadratic drag cross terms */
297  float mwabw_; // Mw|w| , kg
298  float nvabv_; // Nv|v| , kg
299  float yrabr_; // Yr|r| , ?
300  float zqabq_; // Zq|q| , ?
301  //
302  // /* in-line lift and drag */
303  float muq_; // Muq , kg-m
304  float muw_; // Muw , kg
305  float mpr_; // Mpr , kg-m^2
306  //
307  float nur_; // Nur , kg-m
308  float nuv_; // Nuv , kg
309  float npq_; // Npq , kg-m^2
310  //
311  float xvv_; // Xvv , kg/m
312  float xww_; // Xww , kg/m
313  float xvr_; // Xvr , kg
314  float xwq_; // Xwq , kg
315  float xrr_; // Xrr , kg-m
316  float xqq_; // Xqq , kg-m
317 
318  float yur_; // Yur , kg
319  float yuv_; // Yuv , kg/m
320  float ywp_; // Ywp , kg-m
321 
322  float zuq_; // Zuq , kg
323  float zuw_; // Zuw , kg/m
324  float zvp_; // Zvp , kg
325 
326  float kvt2_; // ? , ?
327 
328  float aspectRatio_; // , Unitless
329  float stallAngle_; // , Deg.
330 
331  float finArea_; // , m^2
332  float coeffDrag_; // Coef. of Drag , Unitless
333  float coeffLift_; // Coef. of Lift , Unitless
334 
335  //
337  // upper rudder, #4 is stbd elevator. This fin model is taken
338  // directly from PNA, which cites Whicker and Fehlner, 1958. */
339  //
341 
342 };
343 
344 #endif /*SIMULATOR_H_*/
void calcForce(Point6D &rate, Point6D &pos, float propOmegaAction, float rudderAngleAction, float elevatorAngleAction, float massPositionAction, float buoyancyAction, int dropWeightState, float density, float dt, float smallDt)
Calculate the RHS of the equation (the "force" in ma = F).
Definition: Simulator.cpp:607
void setPitch(float pitch)
Set the current pitch to the indicated value.
Definition: Simulator.cpp:467
float nur_
Definition: Simulator.h:307
float buoyancyNeutral_
Definition: Simulator.h:236
virtual ~Simulator()
Destructor.
Definition: Simulator.cpp:138
float coeffLift_
Definition: Simulator.h:333
double latitude_
UTM zone gathered from initial position.
Definition: Simulator.h:212
float npq_
Definition: Simulator.h:309
float mass_
*-------------—— vehicle parameters --------------------——*/
Definition: Simulator.h:249
Contains the Matrix6x6 class definition.
virtual void simulateSensors(double latDeg, double lonDeg, SimResultStruct &results)
Definition: Simulator.h:125
float sMixed_
Definition: Simulator.h:228
float s300_
Definition: Simulator.h:229
float cylinderRadius_
Definition: Simulator.h:266
virtual void uninitialize()
Uninitialize the simulation.
Definition: Simulator.h:73
float xqq_
Definition: Simulator.h:316
float ypDot_
Definition: Simulator.h:285
float nrDot_
Definition: Simulator.h:275
Simulator(bool simulateSensors, int nSteps)
Constructor.
Definition: Simulator.cpp:37
virtual void publishState(SimResultStruct &results)
Definition: Simulator.cpp:1239
void setHeading(float heading)
Set the current heading to the indicated value.
Definition: Simulator.cpp:461
int minNSteps_
The simulator actually runs minNSteps_ times per "timestep" (i.e.
Definition: Simulator.h:172
float yrDot_
Definition: Simulator.h:284
float netBuoy_
buoyancy force
Definition: Simulator.h:191
Contains the ActuatorModel class declaration.
ActuatorModel buoyancyModel_
Definition: Simulator.h:184
Point6D moment_
Definition: Simulator.h:255
float t300_
Definition: Simulator.h:226
float soundSpeed_
Definition: Simulator.h:222
A simulator "evolved" from the Altex and Odyssey sims.
Definition: Simulator.h:56
Wraps six double precision (8-byte) floating point numbers.
Definition: Point6D.h:31
virtual void configureSensors()
Definition: Simulator.h:123
float dropWt1Z_
Definition: Simulator.h:262
ThrusterModel thrusterModel_
Definition: Simulator.h:185
float kpabp_
Definition: Simulator.h:289
float zwabw_
Definition: Simulator.h:294
Definition: Simulator.h:154
float lastDensity_
Last measured density.
Definition: Simulator.h:239
void run(const SimRunStruct &runParams, SimResultStruct &results)
Run the simulation.
Definition: Simulator.cpp:172
Contains the Point3D class definition.
float propThrust_
Thruster outputs.
Definition: Simulator.h:197
float dropWt1Y_
Definition: Simulator.h:261
Definition: Simulator.h:155
float mpr_
Definition: Simulator.h:305
float finArea_
Definition: Simulator.h:331
ActuatorModel elevatorModel_
Actuator and thruster models.
Definition: Simulator.h:181
long setLocation(const double &latitude, const double &longitude)
Set the current location to the indicated values in radians Returns error code conversion to UTM is u...
Definition: Simulator.cpp:429
bool ok_
indicates whether things are ok to run the simulation
Definition: Simulator.h:178
float maxDt_
Largest allowable timestep.
Definition: Simulator.h:175
float defaultDensity_
Default density to use in calculating buoyancy if none is measured.
Definition: Simulator.h:233
float xvr_
Definition: Simulator.h:313
float kpDot_
Definition: Simulator.h:273
float mqDot_
Definition: Simulator.h:274
Though far simpler than ActuatorModel, the intent is the same, to encapsulate some of the complexity ...
Definition: ThrusterModel.h:23
float sss_
Definition: Simulator.h:227
bool loadParams(const SimInitStruct &initParams, SimResultStruct &results)
Load the hydrodynamic properties from the slate and initialize some variables.
Definition: Simulator.cpp:1001
Point6D pos_
6-dimensional position vector, body coordinates
Definition: Simulator.h:200
float vertCurrent_
Static eastward current.
Definition: Simulator.h:220
float nvabv_
Definition: Simulator.h:298
float nrabr_
Definition: Simulator.h:291
Contains the AuvMath class declaration.
Wraps three double precision (8-byte) floating point numbers.
Definition: Point3D.h:28
Point3D fins_[4]
Definition: Simulator.h:340
float aspectRatio_
Definition: Simulator.h:328
double longitude_
Definition: Simulator.h:213
void setRoll(float roll)
Set the current roll to the indicated value.
Definition: Simulator.cpp:473
float mqabq_
Definition: Simulator.h:290
Point6D posDot_
Definition: Simulator.h:201
ActuatorModel movableMassModel_
Definition: Simulator.h:183
float kvt2_
Definition: Simulator.h:326
void setBuoyancyPosition(float buoyancyPosition)
Set the current mass position to the indicated value.
Definition: Simulator.cpp:503
float dropWt1Mass_
Definition: Simulator.h:259
Point6D rate_
6-dimensional rate vector, earth coordinates
Definition: Simulator.h:204
void setRudderAngle(float rudderAngle)
Set the current rudder angle to the indicated value.
Definition: Simulator.cpp:485
bool simulateSensors_
indicates whether to simulate sensors (salinity, temp, u, v)
Definition: Simulator.h:165
float muq_
Definition: Simulator.h:303
Point3D cOfMass_
Definition: Simulator.h:252
void calcFinForces(Point6D &rate, float ruddAngleProj, float elevAngleProj, Point3D finForces[], Point3D finMoments[], float density)
Given the vehicle state (rate) and fin angles, computes the forces and moments from the fins in body ...
Definition: Simulator.cpp:846
float nuv_
Definition: Simulator.h:308
float movableMass_
Definition: Simulator.h:250
Replacement for standard template class string.
Definition: Str.h:12
float volume_
Definition: Simulator.h:251
float propTorque_
Definition: Simulator.h:197
float ywp_
Definition: Simulator.h:320
float dropWt1Volume_
Definition: Simulator.h:258
A struct of values that is passed from the LRAUV to the Simulator, to run one timestep of the simulat...
Definition: SimRunStruct.h:18
float eastCurrent_
Static northward current.
Definition: Simulator.h:219
Definition: Simulator.h:156
float yuv_
Definition: Simulator.h:319
void setElevatorAngle(float elevatorAngle)
Set the current elevator angle to the indicated value.
Definition: Simulator.cpp:491
float zvp_
Definition: Simulator.h:324
Matrix6x6 massInvert_
Inverse of "mass" matrix. Calculated just once in invertMass() called from initialize() ...
Definition: Simulator.h:188
void setMassPosition(float massPosition)
Set the current mass position to the indicated value.
Definition: Simulator.cpp:497
float magneticVariation_
Static vertical current (positive downward)
Definition: Simulator.h:221
Contains the ThrusterModel class declaration.
A struct of values that is passed from the Simulator to the LRAUV, with the results from one timestep...
Definition: SimResultStruct.h:18
float kvDot_
Definition: Simulator.h:281
float xwq_
Definition: Simulator.h:314
Contains the SimRunStruct class declaration.
float yrabr_
Definition: Simulator.h:299
Contains the SimResultStruct class declaration.
float xww_
Definition: Simulator.h:312
void initialize(const SimInitStruct &initParams, SimResultStruct &results)
Initialize the simulator.
Definition: Simulator.cpp:144
float stallAngle_
Definition: Simulator.h:329
float mwDot_
Definition: Simulator.h:282
float density_
Definition: Simulator.h:223
float zqDot_
Definition: Simulator.h:286
float zwDot_
Definition: Simulator.h:278
float tMixed_
Definition: Simulator.h:225
Definition: Simulator.h:153
void setDepth(float depth)
Set the current depth to the indicated value.
Definition: Simulator.cpp:455
float cylinderLength_
Definition: Simulator.h:265
float northCurrent_
Definition: Simulator.h:218
float zuw_
Definition: Simulator.h:323
float yvabv_
Definition: Simulator.h:293
Point3D cOfMovableMass_
Definition: Simulator.h:253
float nvDot_
Definition: Simulator.h:283
float coeffDrag_
Definition: Simulator.h:332
float yur_
Definition: Simulator.h:318
float xuabu_
Definition: Simulator.h:292
Contains a 6x6 array of double precision floating point numbers, along with methods for performing co...
Definition: Matrix6x6.h:27
float xvv_
Definition: Simulator.h:311
Str oceanModelData_
filename of file that contains ocean model run
Definition: Simulator.h:168
void setPropOmega(float propOmega)
Set the current prop omega to the indicated value.
Definition: Simulator.cpp:479
void motion(float propOmegaAction, float rudderAngleAction, float elevatorAngleAction, float massPositionAction, float buoyancyAction, int dropWeightState, float density, float dt, SimResultStruct &results)
The "take one timestep" function for the simulator.
Definition: Simulator.cpp:321
Point6D force_
6-dimensional force vector
Definition: Simulator.h:194
float mixedLayerDepth_
Definition: Simulator.h:230
Point3D cOfBuoy_
Definition: Simulator.h:254
Encapsulates the actuator model.
Definition: ActuatorModel.h:37
Contains the SimInitStruct class declaration.
Point3D current_
Ocean current (m/s north, east,down)
Definition: Simulator.h:216
float zuq_
Definition: Simulator.h:322
ActuatorModel rudderModel_
Definition: Simulator.h:182
*uLong * dt
Definition: ZipEncoder.cpp:36
Contains the Location class definition.
float muw_
Definition: Simulator.h:304
float sst_
Definition: Simulator.h:224
Point6D rateDot_
Definition: Simulator.h:205
float yvDot_
Definition: Simulator.h:277
float xrr_
Definition: Simulator.h:315
A struct of values that is passed from the LRAUV to the Simulator, to initialize the simulator...
Definition: SimInitStruct.h:22
float zqabq_
Definition: Simulator.h:300
float mwabw_
Definition: Simulator.h:297
float dropWt1X_
Definition: Simulator.h:260
float xuDot_
Definition: Simulator.h:276
void invertMass(SimResultStruct &results)
Calculate the LHS of the equation (the "1/mass" for solving a in ma = F).
Definition: Simulator.cpp:527
Contains the Point6D class definition.