Skip to content

Engineering/circle_test.tl

  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
#   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 circle_test {
  """
  Vehicle circles at a specified depth and rudder angle
  """

  arguments {
    # Almost every mission should start with an overall timeout and a NeedCommsTime.

    MissionTimeout = 1 hour
      """
      Maximum duration of mission
      """

    Depth01 = 50 meter
      """
      Depth of circle 1.
      """

    Depth02 = 50 meter
      """
      Depth of circle 2.
      """

    RudderAngle01 = 5 degree
      """
      Rudder angle to use while performing the first circle.
      """

    RudderAngle02 = 14 degree
      """
      Rudder angle to use while performing the second circle.
      """

    WaitDuration = 5 minute
      """
      How long to circle.
      """

    # You probably do not need to change these.

    Speed = 1 meter_per_second
      """
      Speed while performing the spiral cast.
      """

    # You are even less likely to need to change these.

    MinAltitude = 5 meter
      """
      Minimum altitude for the entire mission.
      """

    MaxDepth = 225 meter
      """
      Maximum depth for the entire mission.
      """
  }

  # Missions should almost always start with a timeout.

  timeout duration=MissionTimeout

  # Most missions will run the science sensors.

  insert Insert/Science.tl {
    redefineArg PeakDetectChlActive = true
  }

  # Most missions will use the NeedComms aggregate. In this case, we use NeedComms for the start of the mission and for the upcast, but set the dive interval to be the same as the mission timeout.

  insert id="NeedComms" Insert/NeedComms.tl

  assign in sequence NeedComms:DiveInterval = MissionTimeout

  assign in sequence NeedComms:SurfaceSpeed = Speed

  # Missions should almost always start with standard safety envelopes; most missions should not expose the parameters of these envelopes.

  insert Insert/StandardEnvelopes.tl

  assign in sequence StandardEnvelopes:MinAltitude = MinAltitude

  assign in sequence StandardEnvelopes:MaxDepth = MaxDepth

  # Check for additional instructions first.

  call id="StartingMission" refId="NeedComms"

  # Many missions will keep mass position and buoyancy volume fixed at defaults.

  behavior Guidance:Pitch {
    run in parallel

    set massPosition = Control:VerticalControl.massDefault
  }

  behavior Guidance:Buoyancy {
    run in parallel

    set position = Control:VerticalControl.buoyancyNeutral
  }

  behavior Guidance:SetSpeed {
    run in parallel

    set speed = Speed
  }

  aggregate Circle_1 {
    run in sequence

    behavior Guidance:Point {
      run in parallel

      set rudderAngle = RudderAngle01
    }

    behavior Guidance:Pitch {
      run in progression

      set depth = Depth01
    }

    behavior Guidance:Wait {
      run in sequence

      set duration = WaitDuration
    }
  }

  aggregate Circle_2 {
    run in sequence

    behavior Guidance:Point {
      run in parallel

      set rudderAngle = RudderAngle02
    }

    behavior Guidance:Pitch {
      run in progression

      set depth = Depth02
    }

    behavior Guidance:Wait {
      run in sequence

      set duration = WaitDuration
    }
  }

  call id="CirclesComplete" refId="NeedComms"
}