FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
AuvUndulateMissionControl.h
1#pragma once
2
191#include "SampleClock.h"
192
193#include <fhsim/simobject/SimObject.h>
194#include <string>
195#include <vector>
196
197class PrintDuringExec;
198
199class AuvUndulateMissionControl : public SimObject
200{
201public:
209
211 struct Settings
212 {
213 std::vector<double> waypointsX;
214 std::vector<double> waypointsY;
215 double recoveryX = 0.0;
216 double recoveryY = 0.0;
217 double waypointRadius = 15.0;
218 double cruiseSpeed = 1.5;
219 double batteryAtEndOfMission = 2.7e5;
220 bool loopWaypoints = false;
221 };
222
229 struct Command
230 {
231 double speed = 0.0;
232 double heading = 0.0;
233 double distanceToWaypoint = 0.0;
236 bool endMission = false;
237 };
238
244 AuvUndulateMissionControl(std::string simObjectName, ISimObjectCreator* creator);
245
256 AuvUndulateMissionControl(std::string simObjectName, const Settings& settings, double updatePeriod = 1.0);
257
263 static double WrapToPi(double angle);
264
274 static std::string WaypointListError(int numX, int numY);
275
286 static bool CanReachRecovery(const Settings& settings, double posX, double posY,
287 double battery, double metresPerJoule);
288
304 static Command CommandOf(const Settings& settings, const Command& previous,
305 double posX, double posY, double battery, double headingMeasured, double metresPerJoule);
306
308 void OdeFcn(const double dT, const double* const adX, double* const adXDot) const override;
309
315 void AcceptedStep(const double dT, const double* const adX) override;
316
317#ifdef FH_VISUALIZATION
318 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator) override { }
319 void RenderUpdate(const double dT, const double* const adX) override { }
320#endif
321
329 void Update(double posX, double posY, double battery, double headingMeasured);
330
332 const Command& HeldCommand() const { return m_command; }
333
335 double MetresPerJoule() const;
336
337protected:
339 const double* OutSpeed(const double dT, const double* const adX);
340
342 const double* OutHeading(const double dT, const double* const adX);
343
345 const double* OutEndMission(const double dT, const double* const adX);
346
348 const double* OutWaypointIndex(const double dT, const double* const adX);
349
351 const double* OutDistanceToWaypoint(const double dT, const double* const adX);
352
354 const double* OutPhase(const double dT, const double* const adX);
355
356private:
358 void AccumulateProgress(double posX, double posY, double battery);
359
361 void ReportPhaseChange(EPhase_t previousPhase);
362
364 void RefreshPortValues();
365
366 ISignalPort* m_inPos = nullptr;
367 ISignalPort* m_inBattery = nullptr;
368 ISignalPort* m_inHeading = nullptr;
369
370 PrintDuringExec* m_print = nullptr;
371
372 std::string m_name;
373 Settings m_settings;
374 SampleClock m_clock;
375
376 Command m_command;
377
378 double m_outEndMission = 0.0;
379 double m_outWaypointIndex = 0.0;
380 double m_outPhase = 0.0;
381
382 bool m_progressStarted = false;
383 double m_startBattery = 0.0;
384 double m_energyUsed = 0.0;
385 double m_distanceTravelled = 0.0;
386 double m_lastX = 0.0;
387 double m_lastY = 0.0;
388};
Definition AuvUndulateMissionControl.h:200
const Command & HeldCommand() const
The held command.
Definition AuvUndulateMissionControl.h:332
double MetresPerJoule() const
The measured distance made good per joule spent, or zero before anything is known.
AuvUndulateMissionControl(std::string simObjectName, const Settings &settings, double updatePeriod=1.0)
static bool CanReachRecovery(const Settings &settings, double posX, double posY, double battery, double metresPerJoule)
static std::string WaypointListError(int numX, int numY)
void OdeFcn(const double dT, const double *const adX, double *const adXDot) const override
This SimObject has no states, so it has no derivatives.
void AcceptedStep(const double dT, const double *const adX) override
const double * OutDistanceToWaypoint(const double dT, const double *const adX)
The horizontal distance to the point being flown towards, m.
const double * OutPhase(const double dT, const double *const adX)
Zero while transiting, one while returning, two once finished.
static double WrapToPi(double angle)
EPhase_t
Where the mission has got to.
Definition AuvUndulateMissionControl.h:204
@ Phase_Transit
Flying the waypoint list.
Definition AuvUndulateMissionControl.h:205
@ Phase_Return
Flying to the recovery position.
Definition AuvUndulateMissionControl.h:206
@ Phase_Finished
Home. Speed zero and EndMission latched.
Definition AuvUndulateMissionControl.h:207
const double * OutSpeed(const double dT, const double *const adX)
The commanded forward speed, m/s.
const double * OutHeading(const double dT, const double *const adX)
The commanded heading, rad, unwrapped against the measurement.
AuvUndulateMissionControl(std::string simObjectName, ISimObjectCreator *creator)
const double * OutWaypointIndex(const double dT, const double *const adX)
The index of the waypoint being flown towards.
void Update(double posX, double posY, double battery, double headingMeasured)
const double * OutEndMission(const double dT, const double *const adX)
One once the vehicle is home, zero before that.
static Command CommandOf(const Settings &settings, const Command &previous, double posX, double posY, double battery, double headingMeasured, double metresPerJoule)
Definition SampleClock.h:40
Definition AuvUndulateMissionControl.h:230
double distanceToWaypoint
The horizontal distance to the point being flown towards, m.
Definition AuvUndulateMissionControl.h:233
double speed
The commanded forward speed, m/s.
Definition AuvUndulateMissionControl.h:231
int waypointIndex
The index of the waypoint being flown towards.
Definition AuvUndulateMissionControl.h:234
EPhase_t phase
Where the mission has got to.
Definition AuvUndulateMissionControl.h:235
bool endMission
True once the vehicle is home. Latches.
Definition AuvUndulateMissionControl.h:236
double heading
The commanded heading, rad, unwrapped against the measurement.
Definition AuvUndulateMissionControl.h:232
The track and the budget the mission law is evaluated against.
Definition AuvUndulateMissionControl.h:212
double recoveryX
The north coordinate returned to, m.
Definition AuvUndulateMissionControl.h:215
double cruiseSpeed
The commanded forward speed, m/s.
Definition AuvUndulateMissionControl.h:218
double batteryAtEndOfMission
The energy required on arriving home, J.
Definition AuvUndulateMissionControl.h:219
std::vector< double > waypointsX
The north coordinates of the waypoints, m.
Definition AuvUndulateMissionControl.h:213
bool loopWaypoints
True to restart the list instead of returning.
Definition AuvUndulateMissionControl.h:220
double waypointRadius
The distance at which a waypoint counts as reached, m.
Definition AuvUndulateMissionControl.h:217
std::vector< double > waypointsY
The east coordinates of the waypoints, m.
Definition AuvUndulateMissionControl.h:214
double recoveryY
The east coordinate returned to, m.
Definition AuvUndulateMissionControl.h:216