# Copyright (c) 2008 Monterey Bay Aquarium Research Institute (MBARI)
# MBARI Proprietary Information. All Rights Reserved
aggregate NeedComms {
arguments {
DiveInterval = 1 hour
"""
Elapsed time after most recent surfacing when vehicle will begin to
ascend to the surface again. The timing is actually based on the
variable Universal:time_fix instead of the variable
Universal:platform_communications because the latter is not toggled
until the message queue is clear. As a result, there are situations
where the vehicle might dive for the first half of a yo, then return to
the surface to continue communications, rendering the communications
timeout useless. When adjusting this parameter, do not use "set", use
Assign in a mission, or set NeedComms:DiveInterval from the command
line.
"""
WaitForPitchUp = 10 minute
"""
Extra time to wait for the vehicle to pitch up (avoid truncating a yo).
"""
SurfacePitch = 20 degree
"""
Pitch to maintain while ascending
"""
SurfaceDepthRate = NaN meter_per_second
"""
Depth rate to maintain while ascending. Set to NaN if using pitch
"""
SurfaceSpeed = 1 meter_per_second
"""
Standard speed during surfacing. Don't reduce this too much below 1 m/s
-- the elevators can stall. (At 0.5 m/s, we have observed evidence of
stall in the past.)
"""
SurfacingTimeout = 1000 second
"""
The maximum time allowed for the ascent to surface.
"""
GPSTimeout = 7 minute
"""
Maximum amount of time to spend trying to get each GPS fix.
"""
CommsTimeout = 30 minute
"""
Maximum amount of time to spend on the surface trying to communicate
before giving up, getting another GPS fix, and diving again.
"""
}
run when (
called
or ( elapsed ( Universal:time_fix ) > ( DiveInterval + WaitForPitchUp ) )
or (
elapsed ( Universal:time_fix ) > DiveInterval
and ( Universal:platform_pitch_angle > 0 degree )
)
)
syslog info "last time_fix was: " + Universal:time_fix~epoch_second
behavior Guidance:GoToSurface {
run in progression
set pitch = SurfacePitch
set depthRate = SurfaceDepthRate
set speed = SurfaceSpeed
set surfaceTimeout = SurfacingTimeout
}
readDatum {
timeout duration=GPSTimeout {
syslog important "first GPS update timeout"
}
Universal:time_fix
}
readDatum {
timeout duration=CommsTimeout {
syslog important "Comms timed out after " + CommsTimeout~minute + "minutes"
}
Universal:platform_communications
}
readDatum {
timeout duration=GPSTimeout {
syslog important "second GPS update timeout"
}
Universal:time_fix
}
}