|
LRAUV
revA
|
This is the primary "control" for the vehicle's heading. More...
#include <HorizontalControl.h>


Public Member Functions | |
| HorizontalControl (const Module *module) | |
| virtual | ~HorizontalControl () |
| void | initialize (void) |
| Initialize function. More... | |
| void | run () |
| The actual "payload" of the component. More... | |
| void | uninitialize (void) |
| Uninit function. More... | |
Public Member Functions inherited from SyncComponent | |
| CycleOrder | getCycleOrder (void) |
| Getter function for controlThreadOrderPreference. More... | |
| void | setRepeating (bool repeating) |
| int | getDivisor () const |
| int | getModulo () const |
| bool | isRepeater () |
| bool | isRepeating () |
Public Member Functions inherited from Component | |
| virtual | ~Component () |
| Destructor cleans up readers_ and writers_. More... | |
| void | registerReader (DataReader *reader) |
| void | unregisterReader (DataReader *reader) |
| void | registerWriter (DataWriter *writer) |
| void | unregisterWriter (DataWriter *writer) |
| void | disableMetering (void) |
| FlexArray< DataReader * > & | getReaderList (void) |
| FlexArray< DataWriter * > & | getWriterList (void) |
| const Module * | getModule () |
| virtual void | configure () |
| Read (or re-read!) configuration settings. More... | |
| virtual void | execute (void) |
| bool | isActive () const |
| Indicates if the component is active. More... | |
| const CodedStr & | getName (void) const |
| Returns the name. More... | |
| const Timestamp & | getTimeOfLastRun (void) const |
| ComponentState | getState (void) |
| Return the component's current state. More... | |
| void | setState (ComponentState state) |
| RunState | getRunState (void) |
| Return the component's run state. More... | |
| bool | isUsingRunState () |
| Return true if using runState. More... | |
| void | requestData (bool requestingData) |
| Tell the component to start (or stop) sending data. More... | |
| void | requestStart () |
| Tell the component to start runnning. More... | |
| void | requestPause (const Timespan expectedPauseTime) |
| Tell the component to pause runnning. More... | |
| void | requestResume () |
| Tell the component resume from pause. More... | |
| void | requestStop () |
| Tell the component to stop runnning. More... | |
| virtual RunState | start () |
| Do what needs to be done to run Similar to initialize, in old init/run/uninit sequence. More... | |
| virtual RunState | starting () |
| Might follow a STOP...START sequence Subseqent. More... | |
| virtual RunState | runnable () |
| Should eventually follow a START request or RESETTING. More... | |
| virtual RunState | satisfied () |
| Possible return value of a Behavior. More... | |
| virtual RunState | pause () |
| Pause for a short period (indicated by pauseTime) More... | |
| virtual RunState | pausing () |
| Might follow a PAUSE request. More... | |
| virtual RunState | paused () |
| Should eventually follow a PAUSE request: should set continueTime. More... | |
| virtual RunState | resume () |
| Resume from PAUSE. More... | |
| virtual RunState | resuming () |
| Might follow a PAUSE...RESUME sequence. More... | |
| virtual RunState | resetting () |
| Might occur in case of Error. More... | |
| virtual RunState | stop () |
| Initial state – can be later followed by START. More... | |
| virtual RunState | stopping () |
| Might follow a STOP request. More... | |
| virtual RunState | stopped () |
| Should eventually follow a STOP request. More... | |
| void | setCriticalFailureReported (bool boolVal) |
| void | setRecoveringFromCritical (bool boolVal) |
| void | setFailureReported (bool boolVal) |
| bool | isFailureUninitialized () |
| void | setFailureUninitialized (bool boolVal) |
| void | setRetryTimeout (const Timespan &timeout) |
| virtual bool | isCompleted (void) |
| Query if this component is completed. More... | |
| void | setPeriod (const Timespan &period) |
| Set the period of this component... used if it is periodic. More... | |
| const Timespan & | getPeriod (void) |
| Returns the component's period (regardless of whether it is periodic) More... | |
| ComponentType | getComponentType () |
| Getter function for ComponentType. More... | |
| virtual bool | isFailed (void) const |
| virtual FailureMode::FailType | getFailureType (void) const |
| virtual bool | getCriticalFailureReported (void) const |
| virtual bool | getFailureReported (void) const |
| virtual Timespan | getRetryTimeout (void) const |
| virtual FailureMode::FailType | setFailure (FailureMode::FailType failureType) |
| virtual int | getFailCount (void) const |
| virtual bool | isFailureMissionCritical () |
| virtual int | getAllowableFailures (void) const |
| virtual void | setAllowableFailures (int fails) |
| Logger & | getLogger (void) |
| virtual int | incrementFailCount (void) |
| virtual void | resetFailCount (void) |
| virtual int | getSkippedRunsSinceFail (void) const |
| virtual int | incrementSkippedRunsSinceFail (void) |
| virtual void | logVoltage (float voltage, float averageVoltage) |
| virtual void | logCurrent (float current, float averageCurrent) |
| const Timestamp & | getWriteTimestamp (void) |
| void | setWriteTimestamp (const Timestamp &writeTimestamp) |
| BlobReader * | newBlobReader (const BlobURI &blobURI) |
| BlobReader * | newBlobReaderFromUniversal (const Str &componentName, const UniversalBlobURI &blobURI) |
| BlobWriter * | newBlobWriter (const BlobURI &blobURI, Logger::TimePrecisionType timePrecision=Logger::TIME_PRECISION_MILLIS) |
| ConfigReader * | newConfigReader (const ConfigURI &configURI) |
| DataReader * | newDataReader (const DataURI &dataURI) |
| DataReader * | newDataReaderFromUniversal (const Str &componentName, const UniversalURI &universalURI) |
| DataWriter * | newDataWriter (const DataURI &dataURI, Logger::TimePrecisionType timePrecision=Logger::TIME_PRECISION_MILLIS) |
| UniversalBlobReader * | newUniversalBlobReader (const UniversalBlobURI &universalURI) |
| UniversalBlobWriter * | newUniversalBlobWriter (const UniversalBlobURI &universalURI, const Unit &accuracyUnit=Units::NONE, const float accuracy=DataElement::NO_ACCURACY, Logger::TimePrecisionType timePrecision=Logger::TIME_PRECISION_MILLIS) |
| UniversalDataReader * | newUniversalReader (const UniversalURI &universalURI) |
| UniversalDataWriter * | newUniversalWriter (const UniversalURI &universalURI, const Unit &accuracyUnit=Units::NONE, const float accuracy=DataElement::NO_ACCURACY, Logger::TimePrecisionType timePrecision=Logger::TIME_PRECISION_MILLIS) |
Protected Attributes | |
| float | headingIntegral_ |
| float | xteIntegral_ |
Protected Attributes inherited from Component | |
| Logger | logger_ |
| Syslog::Severity | debugLevel_ |
| ComponentState | state_ |
| Keep track of whether the component has "completed" or should be run again. More... | |
| Timespan | desiredPeriod_ |
| CodedStr & | name_ |
| Store the component's name (used for logging purposes) More... | |
| Timestamp | timeOfRun_ |
| Timestamp | timeOfLastRun_ |
| Timespan | durationOfLastRun_ |
| Timespan | dt_ |
| Timespan | retryTimeout_ |
| bool | enabled_ |
| bool | failureReported_ |
| Indicates if the failure has been reported – cuts down on syslog. More... | |
| bool | criticalFailureReported_ |
| Indicates if a "Critical" failure has been reported – cuts down on syslog. More... | |
| bool | recoveringFromCritical_ |
| Indicates that a component had a previous critical failure that has been cleared temporarily awaiting final word from the component itself. More... | |
| bool | failureUninitialized_ |
| Indicates if the failure has resulted in an uninitialize call. More... | |
| int | failCount_ |
| Number of failures logged by PCaller. More... | |
| bool | failureMissionCritical_ |
| If true (default), complete failure ends mission. More... | |
| int | allowableFailures_ |
| Number of failures allowed to occur. More... | |
| int | skippedRunsSinceFail_ |
| Number of skipped runs since failureMode_ set by failCount_. More... | |
| FailureMode::FailType | failureType_ |
| Failed status. If failCount_ > 0, then this may be reset. More... | |
| Timestamp | timeOfFailure_ |
| Time of last failure. Relevant only if failed=true. More... | |
| Timestamp | writeTimestamp_ |
| Time of last write. More... | |
| FlexArray< DataReader * > | readers_ |
| FlexArray< DataWriter * > | writers_ |
| const Module * | module_ |
| Timespan | pauseTime_ |
| bool | meteringEnabled_ |
| If true, metering is enabled. More... | |
| DataWriter * | durationOfLastRunWriter_ |
| Writer for durationOfLastRun. More... | |
| DataWriter * | voltageWriter_ |
| DataWriter * | avgVoltageWriter_ |
| DataWriter * | currentWriter_ |
| DataWriter * | avgCurrentWriter_ |
| bool | persistentPause_ |
| True if data is persistent while component is paused. More... | |
Private Member Functions | |
| HorizontalControl (const HorizontalControl &old) | |
| bool | readConfig (void) |
| read vehicle config variables More... | |
| void | controlHeading () |
| control heading More... | |
| void | setHeading (float desiredHeading, bool useInt=true) |
| attempts to achieve the desired heading More... | |
| void | setHeadingRate (float desiredheadingRate) |
| attempts to achieve the desired heading rate More... | |
| void | setRudderAngle (float desiredRudderAngle) |
| attempts to achieve the desired rudder angle More... | |
| float | headingControl (float heading, float headingCmd, float yawRate, bool useInt=true) |
| returns rudder angle More... | |
Additional Inherited Members | |
Public Types inherited from Component | |
| enum | ComponentState { BLOCK_CONTINUOUS, BLOCK_PERIODIC, BLOCK_NORMAL, BLOCK_COMPLETED, BLOCK_UNKNOWN } |
| In this model, the component has basically two states: wanting to run, and completed (no longer needing to run). More... | |
| enum | ComponentType { COMPONENT_ASYNC, COMPONENT_CONFIG, COMPONENT_BEHAVIOR, COMPONENT_SYNC } |
| Components can indicate how they want to be handled by their type. More... | |
| enum | RunState { NO_RUN_STATE = 0, START, STARTING, RUNNABLE, SATISFIED, PAUSE, PAUSING, PAUSED, RESUME, RESUMING, RESETTING, STOP, STOPPING, STOPPED } |
Static Public Attributes inherited from SyncComponent | |
| static const int | CYCLE_INCREMENT |
| static const int | CYCLE_REPEAT_OFFSET |
| static const CycleOrder | CYCLE_STARTER |
| static const CycleOrder | CYCLE_SIMULATOR |
| static const CycleOrder | CYCLE_SENSOR |
| static const CycleOrder | CYCLE_DERIVATION |
| static const CycleOrder | CYCLE_ESTIMATION |
| static const CycleOrder | CYCLE_NAVIGATION |
| static const CycleOrder | CYCLE_MISSION_MANAGER |
| static const CycleOrder | CYCLE_MISSION |
| static const CycleOrder | CYCLE_CONTROL |
| static const CycleOrder | CYCLE_SERVO |
| static const CycleOrder | CYCLE_TEST |
| static const CycleOrder | CYCLE_REPORTER |
| static const CycleOrder | CYCLE_LOGGER |
Protected Types inherited from Component | |
| enum | ConfigOption { CONFIG_SIMULATE_HARDWARE, CONFIG_POWER, CONFIG_FREQUENCY, CONFIG_LATENCY } |
Protected Member Functions inherited from SyncControlComponent | |
| SyncControlComponent (const Str &name, const Module *module, int divisor=1, int modulo=0) | |
Protected Member Functions inherited from SyncComponent | |
| void | setRepeater (bool repeater) |
Protected Member Functions inherited from Component | |
| virtual ConfigURI | getConfigURI (ConfigOption configOption) const |
| Should return [myNamespace]::SIMULATE_HARDWARE, or [myNamespace]::POWER, etc. More... | |
| virtual ConfigURI | getConfigURI (ConfigOption configOption, ElementURI forElement) const |
| Should return [myNamespace]::POWER_[forElement], [myNamespace]::LATENCY_[forElement], etc. More... | |
| virtual void | setDurationOfLastRun (const Timespan &span) |
| virtual void | setTimeOfRun (const Timestamp &time) |
| virtual void | setTimeOfLastRun (const Timestamp &time) |
| virtual void | setDt (const Timespan &dt) |
| virtual bool | setEnabled (bool enabled=true) |
| void | setRunState (const RunState runState) |
| const Timespan | getPauseTime () const |
| virtual void | setFailureMissionCritical (bool failureMissionCritical) |
| bool | simulateHardware () |
This is the primary "control" for the vehicle's heading.
It accepts a number of inputs that specify the desired heading or waypoint for the vehicle, and combined with heading and rudder sensor inputs, converts the settings to commands that are ultimately relayed to devices via RudderServo.
HorizontalControl.h should only be included by HorizontalControl.cpp Other classes should include HorizontalControlIF.h
| HorizontalControl::HorizontalControl | ( | const Module * | module | ) |
References bearingCmdReader_, bearingInternalWriter_, headingCmdReader_, headingIntegralInternalWriter_, headingInternalWriter_, headingRateCmdReader_, headingRateReader_, headingReader_, horizontalModeReader_, kdHeadingCfgReader_, kiHeadingCfgReader_, kiwpHeadingCfgReader_, kpHeadingCfgReader_, kwpHeadingCfgReader_, kxteInternalWriter_, UniversalURI::LATITUDE, latitudeCmdReader_, latitudeReader_, Component::logger_, UniversalURI::LONGITUDE, longitudeCmdReader_, longitudeReader_, maxHdgAccelCfgReader_, maxHdgIntCfgReader_, maxHdgRateCfgReader_, maxKxteCfgReader_, Component::newConfigReader(), Component::newDataReader(), Component::newDataWriter(), Component::newUniversalReader(), UniversalURI::PLATFORM_ORIENTATION, UniversalURI::PLATFORM_RUDDER_ANGLE, UniversalURI::PLATFORM_YAW_RATE, rudDeadbandCfgReader_, rudderAngleActionReader_, rudderAngleActionWriter_, rudderAngleCmdReader_, rudderAngleReader_, rudLimitCfgReader_, smoothHeadingInternalWriter_, Logger::syslog(), xteIntegralInternalWriter_, and xteInternalWriter_.
|
virtual |
|
private |
|
private |
control heading
References Timespan::asDouble(), bearingCmdReader_, bearingInternalWriter_, dt, Component::dt_, Location::EARTH_RADIUS, Units::ENUM, Syslog::ERROR, HorizontalControlIF::HEADING, HorizontalControlIF::HEADING_RATE, headingCmdReader_, headingRate_, headingRateCmdReader_, horizontalModeReader_, DataReader::isActive(), kiwpHeading_, kwpHeading_, kxteInternalWriter_, latitudeCmdReader_, latitudeReader_, AuvMath::Limit(), Component::logger_, longitudeCmdReader_, longitudeReader_, maxHeadingRateCfg_, maxKxte_, Units::METER, AuvMath::ModPi(), AuvMath::NanZero(), HorizontalControlIF::NONE, Units::RADIAN, Units::RADIAN_PER_SECOND, DataReader::read(), HorizontalControlIF::RUDDER_ANGLE, rudderAngleCmdReader_, setHeading(), setHeadingRate(), setRudderAngle(), Logger::syslog(), DataReader::wasTouchedSinceLastRun(), HorizontalControlIF::WAYPOINT, DataWriter::write(), xte_, xteIntegral_, xteIntegralInternalWriter_, and xteInternalWriter_.
Referenced by run().
|
private |
returns rudder angle
References Timespan::asDouble(), dt, Component::dt_, Trajectory::getXDot(), headingIntegral_, headingIntegralInternalWriter_, headingRate_, headingTrajectory_, kdHeading_, kiHeading_, kpHeading_, AuvMath::Limit(), maxHdgAccel_, maxHeadingInt_, AuvMath::ModPi(), AuvMath::NanZero(), Trajectory::project(), Units::RADIAN, DataReader::read(), rudderAngleReader_, rudderLimit_, AuvMath::Sign(), smoothHeadingInternalWriter_, and DataWriter::write().
Referenced by setHeading().
|
virtual |
Initialize function.
Reimplemented from Component.
References Syslog::CRITICAL, latitudeCmdReader_, latitudeReader_, Component::logger_, longitudeCmdReader_, longitudeReader_, ok_, Units::RADIAN, DataReader::read(), readConfig(), and Logger::syslog().
Referenced by run().
|
private |
read vehicle config variables
Load HorizontalControl parameters.
References kdHeading_, kdHeadingCfgReader_, kiHeading_, kiHeadingCfgReader_, kiwpHeading_, kiwpHeadingCfgReader_, kpHeading_, kpHeadingCfgReader_, kwpHeading_, kwpHeadingCfgReader_, maxHdgAccel_, maxHdgAccelCfgReader_, maxHdgIntCfgReader_, maxHdgRateCfgReader_, maxHeadingInt_, maxHeadingRateCfg_, maxKxte_, maxKxteCfgReader_, Units::NONE, Units::RADIAN, Units::RADIAN_PER_METER, Units::RADIAN_PER_SECOND, Units::RADIAN_PER_SECOND_PER_METER, Units::RADIAN_PER_SECOND_SQUARED, DataReader::read(), Units::RECIPROCAL_SECOND, rudDeadband_, rudDeadbandCfgReader_, rudderLimit_, rudLimitCfgReader_, and Units::SECOND.
Referenced by initialize(), and run().
|
virtual |
The actual "payload" of the component.
Reimplemented from Component.
References controlHeading(), Syslog::ERROR, horizontalModeReader_, initialize(), DataReader::isActive(), Component::logger_, ok_, readConfig(), setRudderAngle(), and Logger::syslog().
|
private |
attempts to achieve the desired heading
References headingControl(), headingInternalWriter_, headingRateReader_, headingReader_, Units::RADIAN, Units::RADIAN_PER_SECOND, DataReader::read(), rudDeadband_, rudderAngleActionReader_, rudderAngleActionWriter_, rudderLimit_, AuvMath::Sign(), and DataWriter::write().
Referenced by controlHeading(), and setHeadingRate().
|
private |
attempts to achieve the desired heading rate
References Timespan::asDouble(), dt, Component::dt_, headingReader_, AuvMath::NanZero(), Units::RADIAN, DataReader::read(), and setHeading().
Referenced by controlHeading().
|
private |
attempts to achieve the desired rudder angle
References Units::RADIAN, rudderAngleActionWriter_, and DataWriter::write().
Referenced by controlHeading(), and run().
|
virtual |
|
private |
Bearing to the Desired waypoint.
Only applies if horizontalModeReader_'s value is WAYPOINT Default is current location (no change).
Referenced by controlHeading(), and HorizontalControl().
|
private |
Commanded bearing, radians. In UTM coordinates, this should be a constant.
Referenced by controlHeading(), and HorizontalControl().
|
private |
Desired heading (radian) of the vehicle.
Zero corresponds to true North, and PI/2 true East. (-PI <= Range < PI). Only applies if HorizontalMode value is HEADING Default is zero.
Referenced by controlHeading(), and HorizontalControl().
|
protected |
Referenced by headingControl().
|
private |
Heading integral in radians.
Referenced by headingControl(), and HorizontalControl().
|
private |
Commanded heading angle in radians.
Referenced by HorizontalControl(), and setHeading().
|
private |
Referenced by controlHeading(), and headingControl().
|
private |
Desired yaw / heading change rate (radian/second).
Positive values correspond to positive changes in heading Applies to both waypoint and specified heading modes Default is 0.2 (to allow a ~15 second about-face)
Referenced by controlHeading(), and HorizontalControl().
|
private |
Current yaw / heading change rate (radian/second).
Positive values correspond to positive changes in heading
Referenced by HorizontalControl(), and setHeading().
|
private |
Current heading (radian) of the vehicle.
Zero corresponds to true North, and PI/2 true East. (-PI <= Range < PI).
Referenced by HorizontalControl(), setHeading(), and setHeadingRate().
|
private |
Referenced by headingControl().
|
private |
Desired heading mode (none, waypoint, specified).
Default is NONE.
Referenced by controlHeading(), HorizontalControl(), and run().
|
private |
*----------------— vehicle parameters -----------------------—*/
Referenced by headingControl(), and readConfig().
|
private |
Referenced by HorizontalControl(), and readConfig().
|
private |
Referenced by headingControl(), and readConfig().
|
private |
Referenced by HorizontalControl(), and readConfig().
|
private |
Referenced by controlHeading(), and readConfig().
|
private |
Referenced by HorizontalControl(), and readConfig().
|
private |
Referenced by headingControl(), and readConfig().
|
private |
Referenced by HorizontalControl(), and readConfig().
|
private |
Referenced by controlHeading(), and readConfig().
|
private |
Referenced by HorizontalControl(), and readConfig().
|
private |
Cross-track error correction, radian.
Referenced by controlHeading(), and HorizontalControl().
|
private |
Desired waypoint latitude to head towards.
Only applies if horizontalModeReader_'s value is WAYPOINT Default is current location (no change).
Referenced by controlHeading(), HorizontalControl(), and initialize().
|
private |
Current latitude.
Referenced by controlHeading(), HorizontalControl(), and initialize().
|
private |
Desired waypoint longitude to head towards.
Only applies if horizontalModeReader_'s value is WAYPOINT Default is current location (no change).
Referenced by controlHeading(), HorizontalControl(), and initialize().
|
private |
Current latitude.
Referenced by controlHeading(), HorizontalControl(), and initialize().
|
private |
Referenced by headingControl(), and readConfig().
|
private |
Referenced by HorizontalControl(), and readConfig().
|
private |
Referenced by HorizontalControl(), and readConfig().
|
private |
Referenced by HorizontalControl(), and readConfig().
|
private |
Referenced by headingControl(), and readConfig().
|
private |
Referenced by controlHeading(), and readConfig().
|
private |
Referenced by controlHeading(), and readConfig().
|
private |
Referenced by HorizontalControl(), and readConfig().
|
private |
indicates whether things are ok to run
Referenced by initialize(), and run().
|
private |
Referenced by readConfig(), and setHeading().
|
private |
Referenced by HorizontalControl(), and readConfig().
|
private |
Used to read last action, even if from another source.
Referenced by HorizontalControl(), and setHeading().
|
private |
Angle (in radian) of Elevator.
Zero corresponds to aligned with major axis of vehicle. Nominal range is -PI/4 to PI/4.
Referenced by HorizontalControl(), setHeading(), and setRudderAngle().
|
private |
Desired rudder angle (radian).
Positive values correspond to negative changes in heading Applies only to rudder angle heading mode
Referenced by controlHeading(), and HorizontalControl().
|
private |
Referenced by headingControl(), and HorizontalControl().
|
private |
Referenced by headingControl(), readConfig(), and setHeading().
|
private |
Referenced by HorizontalControl(), and readConfig().
|
private |
Smoothed commanded heading angle in radians.
Referenced by headingControl(), and HorizontalControl().
|
private |
Referenced by controlHeading().
|
protected |
Referenced by controlHeading().
|
private |
Referenced by controlHeading(), and HorizontalControl().
|
private |
Cross-track error, meter.
Referenced by controlHeading(), and HorizontalControl().