1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207 | # Copyright (c) 2024 MBARI
# MBARI Proprietary Information. Confidential. All Rights Reserved
# Unauthorized copying or distribution of this file via any medium is strictly
# prohibited.
#
# WARNING - This file contains information whose export is restricted by the
# Export Administration Act of 1979 (Title 50, U.S.C., App. 2401 et seq.), as
# amended. Violations of these export laws are subject to severe civil and/or
# criminal penalties.
mission sink {
arguments {
SinkDuration = 2 hour
"""
Overall B&T timeout, or time to sink before ascending if not running B&T.
Mission timeout will be SinkDuration + WaitToFloat.
"""
WaitToFloat = 20 minute
"""
Timeout for reaching surface threshold on float ascent, vehicle will drive up when
reached
"""
Depth = 20 meter
"""
Target depth
"""
DepthDeadband = 1 meter
"""
How much vertical drift from the specified depth is allowed during the
mission.
"""
SurfaceThreshold = 2.5 meter
"""
Surface threshold depth, relevant only to the ascent.
"""
TargetDepthTimeout = 20 minute
"""
Maximum wait time for the vehicle to reach the target depth.
"""
DoBallastAndTrim = false
"""
If true, run B&T, if false, just sit at depth.
"""
BTSettleTime = 10 minute
"""
If running B&T, how long to wait after reaching target depth before starting
"""
EstimationTimeout = 45 minute
"""
If running B&T, timeout for estimation.
"""
MinEstimationTime = 10 minute
"""
If running B&T, minimum time to run estimation before determining convergence
(must be shorter than timeout).
"""
MassEstimationErrorBound = 0.5 millimeter
"""
If running B&T, desired range of the estimated sample mean from the true
mean statistic (smaller values take longer to converge).
"""
BuoyEstimationErrorBound = 25 cubic_centimeter
"""
If running B&T, desired range of the estimated sample mean from the true
mean statistic (smaller values take longer to converge).
"""
EstimationConfidence = 98 percent
"""
If running B&T, confidence level that the estimator has reached the desired
error range (larger values take longer to converge).
"""
MinAltitude = 5 meter
"""
Minimum height above the sea floor for the entire mission.
"""
MaxDepth = 30 meter
"""
Maximum depth for the entire mission.
"""
MinOffshore = 2 kilometer
"""
Minimum offshore distance for the entire mission.
"""
SkipComms = false
"""
Skip start-of-mission GPS fix and comms if true
"""
}
output {
MissionTimeout = SinkDuration
}
timeout duration=MissionTimeout
assign in sequence MissionTimeout = SinkDuration + WaitToFloat
insert Insert/Science.tl
insert id="NeedComms" Insert/NeedComms.tl
assign in sequence NeedComms:DiveInterval = MissionTimeout
insert Insert/StandardEnvelopes.tl
assign in sequence StandardEnvelopes:MinAltitude = MinAltitude
assign in sequence StandardEnvelopes:MaxDepth = MaxDepth
assign in sequence StandardEnvelopes:MinOffshore = MinOffshore
insert Insert/BackseatDriver.tl
insert Insert/PowerOnly.tl
aggregate startComms {
run in sequence
break if ( SkipComms )
call id="StartingMission" refId="NeedComms"
}
aggregate RunSink {
run in sequence
timeout duration=SinkDuration
insert Insert/BallastAndTrim.tl {
redefineArg InsertDepthDeadband = DepthDeadband
redefineArg InsertApproachDepthTimeout = TargetDepthTimeout
redefineArg InsertSettleTime = BTSettleTime
redefineArg EstTimeout = EstimationTimeout
redefineArg MinEstTime = MinEstimationTime
redefineArg MassEstErrorBound = MassEstimationErrorBound
redefineArg BuoyEstErrorBound = BuoyEstimationErrorBound
redefineArg EstConfidence = EstimationConfidence
}
aggregate RunBallastAndTrim {
run in sequence
break if (
isNaN ( Depth )
or not DoBallastAndTrim
)
assign in sequence BallastAndTrim:InsertDepth = Depth
call refId="BallastAndTrim"
}
aggregate JustSink {
run in sequence
break if (
isNaN ( Depth )
or DoBallastAndTrim
)
assign in sequence BallastAndTrim:InsertDepth = Depth
# The B&T insert will never actually invoke the B&T behavior here.
# This is a little bit of a hack to avoid duplicating the ApproachDepth etc.
# logic the B&T insert uses.
assign in sequence BTSettleTime = SinkDuration
call refId="BallastAndTrim"
}
}
aggregate FloatUp {
"""
Float to surface instead of driving.
"""
run in sequence
break if ( Universal:depth < SurfaceThreshold )
behavior Guidance:Buoyancy {
run in parallel
set position = Control:VerticalControl.buoyancyDefault
}
behavior Guidance:Wait {
run in sequence
set duration = WaitToFloat
}
}
call id="EndingMission" refId="NeedComms"
}
|