Skip to content

Science/spiralSample.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
#   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 spiralSample {
  """
  This mission drives in a circle while sampling at the designated depth.
  """

  arguments {
    MissionTimeout = 120 minute
      """
      How long to let the mission run.
      """

    NeedCommsTime = 120 minute
      """
      How often to surface for commumications
      """

    Depth = 50 meter
      """
      Depth to sample at.
      """

    NumberOfSamples = 1 count
      """
      Number of samples to take.
      """

    Speed = 1 meter_per_second
      """
      Vehicle speed. Initialized to zero.
      """

    RudderAngle = 12 degree
      """
      Rudder angle. Initialized to zero.
      """

    WaitBeforeSample = 1 minute
      """
      How long to wait between samples. This starts *before* the first sample
      to exercise the SettleTime setting in the insert aggregate.
      """

    MinAltitude = 5 meter
      """
      Minimum height above the sea floor for the entire mission.
      """

    MaxDepth = 205 meter
      """
      Maximum depth for the entire mission.
      """

    MinOffshore = 2 kilometer
      """
      Minimum offshore distance for the entire mission.
      """
  }

  timeout duration=MissionTimeout

  insert Insert/Science.tl {
    """
    Most missions will run the science sensors. If you don't place this
    aggregate above NeedComms, science instruments get turned off on the
    last upcast and while floating on the surface.
    """

    redefineArg PeakDetectChlActive = true
  }

  # Most missions should use the NeedComms aggregate.

  insert id="NeedComms" Insert/NeedComms.tl

  assign in sequence NeedComms:DiveInterval = NeedCommsTime

  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

  assign in sequence StandardEnvelopes:MinOffshore = MinOffshore

  behavior Guidance:Pitch {
    run in parallel

    set massPosition = Control:VerticalControl.massDefault
  }

  behavior Guidance:SetSpeed {
    run in parallel

    set speed = Speed
  }

  behavior Guidance:Point {
    run in parallel

    set rudderAngle = RudderAngle
  }

  insert Insert/SampleAtDepth.tl

  assign in sequence SampleAtDepth:TargetDepth = Depth

  assign in sequence SampleAtDepth:SettleTime = WaitBeforeSample

  aggregate SampleRepeater {
    run in sequence repeat=NumberOfSamples

    call id="Sample" refId="SampleAtDepth"
  }

  call id="MissionComplete" refId="NeedComms"
}