missionlineCaptureHoming{""" Home to transponder while maintaining altitude. The mission sequence: (*) Start (1) Midcourse guidance: nav to target WP while querying transponder (2) Terminal guidance: home to target using DUSBL tracking data, fire up SCPI when in range (4) Dock: final approach using fixed heading (5) Rollout: break off from dock, then nav back to start wp or move away from the target at the last commanded heading (*) repeat Note: since there's a possibility that no altitude reading will be available form the surface (e.g., when the bottom is out of DVL range), the vehicle first descends from the surface to a commanded depth and then starts following the commanded altitude. """arguments{# Define mission argumentsMissionTimeout=4hour""" Maximum length of mission """NeedCommsTime=60minute""" How often to surface for commumications """Repeat=1count""" Number of times the vehicle should try to cycle through the homing sequence. """DockLat=36.7436degree""" Latitude of docking station waypoint. """DockLon=-121.8800degree""" Longitude of docking station waypoint. """StartLat=NaNdegree""" Latitude of docking sequance start waypoint. The vehicle navigates back to this waypoint at the end of each homing attempt. If set to NaN, the vehicle moves away from the target at the last commanded heading until *RolloutTimeout* has passed. """StartLon=NaNdegree""" Longitude of docking sequance start waypoint. The vehicle navigates back to this waypoint at the end of each homing attempt. If set to NaN, the vehicle moves away from the target at the last commanded heading until *RolloutTimeout* has passed. """TerminalRange=650.0meter""" Range at which the vehicle should switch from navigating to the dock wp and start homing to the target using DUSBL tracking data. Max is ?? meters due to DUSBL ???. """CameraRange=25.0meter""" Range to activate the camera payload. """DockRange=4.0meter""" Minimum range to continue to update heading being driven. """UpdateNav=falsebool""" When true, the mission updates the vehicle's position to DockLat/Lon when it comes within *DockRange* from the transponder. """AcousticContactTimeout=15minute""" If the vehicle does not receive an acoustic signal for more than this length of time, it will boot out of the homing sequance. """TerminalGuidanceTimeout=30minute""" Maximum time duration for running in terminal guidance mode. """DockTimeout=60second""" Time duration for running in Dock mode. """RolloutTimeout=12minute""" Drive on your last heading for this long after approaching within minimum (dock) range. """HoldAltitude=7meter""" Desired vehicle altitude to maintain. """InvalidAltitudeTimeout=NaNminute""" The mission will abort if no valid altitude readings are received within this specified time duration. Set this variable to NaN to disable this timeout functionality. """InitDepth=30meter""" Initial depth. The vehicle will dive to this depth when leaving the surface. Necessary if no altitude reading is available form the surface (e.g., when the bottom is out of DVL range). """InitDepthTimeout=30minute""" Maximum time duration for the vehicle to reach the initial depth. The vehicle will switch over to altitude following after the timeout is expired. """TransponderCode=2count""" Transponder Address. """TrackingUpdatePeriod=0.1second""" How long to wait between acoustic queries """NumberOfPings=1count""" Number of pings requested each time. """Speed=1meter_per_second""" Thruster speed for the entier mission. """DepthDeadband=0.0meterMinAltitude=5meter""" Minimum height above the sea floor for the entire mission. """MaxDepth=205meter""" Maximum depth for the entire mission. """MinOffshore=2kilometer""" Minimum offshore distance for the entire mission. """}output{HomingActive=true""" Mission variable (don't change). The mission sets this to true when the vehicle is homing. """CameraRequested=false""" Mission variable (don't change). The mission sets this to true after camera is requested (prevents multipul req). """DiveMode=0count""" Mission variable (don't change). The mission sets this variable to switch between dive modes. """DoingComms=0count""" Mission variable (don't change). The mission will run in this to mode when running surface comms. """InitialDive=1count""" Mission variable (don't change). The mission will run in this mode when surface comms are done to dive the vehicle to DVL bottom range. """MaintainAltitude=2count""" Mission variable (don't change). The mission will run in this mode to dive the vehicle at a commanded altitude. """DetachFromDock=3count""" Mission variable (don't change). The mission will run in this mode to drift away from the dock after is unlatches. """}# Mission timeouttimeoutduration=MissionTimeout# Safety nets and surfacing behaviorsinsertInsert/StandardEnvelopes.tlassigninsequenceStandardEnvelopes:MinAltitude=MinAltitudeassigninsequenceStandardEnvelopes:MaxDepth=MaxDepthassigninsequenceStandardEnvelopes:MinOffshore=MinOffshoreinsertInsert/NeedComms.tlid="NeedComms"assigninsequenceNeedComms:DiveInterval=MissionTimeoutassigninsequenceNeedComms:WaitForPitchUp=0minuteaggregateSurfaceComms{runwhen(calledor(elapsed(Universal:time_fix)>NeedCommsTime))assigninsequenceDiveMode=DoingCommscallrefId="NeedComms"assigninsequenceDiveMode=InitialDive}# Add track acoustic contact directive high in the stack.aggregateTrackTransponder{runwhile(HomingActive)behaviorEstimation:TrackAcousticContact{runinparallelsetEstimation:TrackAcousticContact.contactLabelSetting=TransponderCodesetEstimation:TrackAcousticContact.numberOfSamplesSetting=NumberOfPingssetEstimation:TrackAcousticContact.updatePeriodSetting=TrackingUpdatePeriod}}# Set default mass positionbehaviorGuidance:Mass{runinparallelsetGuidance:Mass.position=Control:VerticalControl.massDefault}# Callable aggregates (priority matters, so these are done below important safety directivesaggregateDiveCmd{""" Called when the vehicle should be underwater. Arbitrates between 3 dive modes: 1) descend from the surface to initial depth. 2) follow commanded altitude. 3) drift away from dock to initial depth. """runwhen(called)aggregateInitialDive{""" Descend from the surface to initial depth. Necessary when no altitude reading is available form the surface. """runwhile(DiveMode==InitialDive)aggregatedive{runinsequencebehaviorGuidance:Buoyancy{runinparallelsetGuidance:Buoyancy.position=Control:VerticalControl.buoyancyNeutral}behaviorGuidance:SetSpeed{runinparallelsetGuidance:SetSpeed.speed=Speed}behaviorGuidance:Pitch{runinsequencetimeoutduration=InitDepthTimeout{syslogimportant"Timed out at current depth of "+Universal:depth~meter+". Switching to altitude servo."}setGuidance:Pitch.depth=InitDepth}assigninsequenceDiveMode=MaintainAltitude}}aggregateAltitudeServo{""" Follow commanded altitude. """runwhile(DiveMode==MaintainAltitude)aggregatedive{runinparallelassigninparallelControl:VerticalControl.depthDeadband=DepthDeadbandbehaviorGuidance:Buoyancy{runinparallelsetGuidance:Buoyancy.position=Control:VerticalControl.buoyancyNeutral}behaviorGuidance:SetSpeed{runinparallelsetGuidance:SetSpeed.speed=Speed}behaviorGuidance:AltitudeServo{runinparallelsetGuidance:AltitudeServo.targetAltitude=HoldAltitudesetGuidance:AltitudeServo.invalidAltitudeTimeout=InvalidAltitudeTimeout}}}aggregateDriftAwayFromDock{""" Drift away from the dock after vehicle unlatches. """runwhile(DiveMode==DetachFromDock)aggregatedive{runinsequencebehaviorGuidance:SetSpeed{runinparallelsetGuidance:SetSpeed.speed=0meter_per_second}behaviorGuidance:Pitch{runinsequencetimeoutduration=InitDepthTimeout{syslogimportant"Timed out while trying to detach from dock at current depth of "+Universal:depth~meter+"."behaviorGuidance:Execute{runinsequencesetGuidance:Execute.command="stop"}}setGuidance:Pitch.depth=InitDepth}assigninsequenceDiveMode=MaintainAltitude}}}# Start mission sequence.callid="StartingMission"refId="SurfaceComms"aggregateLap{runinsequencerepeat=RepeataggregateDive{runwhile(not(DiveMode==DoingComms))callrefId="DiveCmd"}syslogimportant"Initiating homing sequence."assigninsequenceHomingActive=trueaggregateMidcourseGuidance{""" Navigate toward the dock waypoint while querying the dock transponder. Continue until you approach within *TerminalRange*, then move on to the next aggregate. """runinsequencebreakif(Estimation:TrackAcousticContact.range_to_contact<TerminalRange)behaviorGuidance:Waypoint{runinsequencesetGuidance:Waypoint.latitude=DockLatsetGuidance:Waypoint.longitude=DockLon}}sysloginfo"Transition to TerminalGuidance at range: "+Estimation:TrackAcousticContact.range_to_contact~meter+"."aggregateTerminalGuidance{""" Move toward the target using DUSBL tracking data and update the commanded heading with each cycle, activate SCPI when in range. Continue until you're within *DockRange*, then move on to the next aggregate. """runinsequencebreakif(Estimation:TrackAcousticContact.range_to_contact<DockRange)# Even if we're getting acoustic contact, let's not just do this forevertimeoutduration=TerminalGuidanceTimeoutsyslogimportant"Terminal guidance at range: "+Estimation:TrackAcousticContact.range_to_contact~meter+"."behaviorGuidance:Point{runinparallelsetGuidance:Point.forceUpdate=true# keep adjusting the headingsetGuidance:Point.heading=Estimation:TrackAcousticContact.heading_to_contact}aggregateActivateCamera{runwhen(not(CameraRequested)and(Estimation:TrackAcousticContact.range_to_contact<=CameraRange))syslogimportant"Lights, Camera on at range: "+Estimation:TrackAcousticContact.range_to_contact~meter+"."readDatastrategy="MinError"{Sensor:PowerOnly.samplePowerOnly}assigninsequenceCameraRequested=true}# Keep running terminal guidance until we're within dock range (or until we time out)behaviorGuidance:Wait{runinsequencesetGuidance:Wait.duration=TerminalGuidanceTimeout}}sysloginfo"Transition to dock at range: "+Estimation:TrackAcousticContact.range_to_contact~meter+"."aggregateDock{""" Final approach. Close in on the target at the last commanded heading until *DockTimeout* has passed. No DUSBL heading updates. """runinsequence# No reson to dock if we haven't come within camara rangebreakif(not(CameraRequested))syslogimportant"Final approach. Range: "+Estimation:TrackAcousticContact.range_to_contact~meter+"."aggregateUpdateNav{runinsequencebreakif(not(UpdateNav))behaviorDock:SetNav{runinsequencesetDock:SetNav.latitude=DockLatsetDock:SetNav.longitude=DockLon}}behaviorGuidance:Wait{runinsequencesetGuidance:Wait.duration=DockTimeout}aggregateBreakOffDock{runinsequencesysloginfo"Breaking off. Range: "+Estimation:TrackAcousticContact.range_to_contact~meter+"."assigninsequenceDiveMode=DetachFromDockaggregateWaitForBreakOff{runwhen(DiveMode==DetachFromDock)behaviorGuidance:Wait{runinsequencesetGuidance:Wait.duration=InitDepthTimeout}}}}sysloginfo"Rollout at range: "+Estimation:TrackAcousticContact.range_to_contact~meter+"."# Homing sequance completeaggregateRollout{""" Navigate back to the start waypoint or move away from the target at the last commanded heading until *RolloutTimeout* has passed. """runinsequenceassigninsequenceCameraRequested=falseassigninsequenceHomingActive=false# Let's make sure we're in the right dive modeassigninsequenceDiveMode=MaintainAltitudeaggregateNavToStart{runinsequencebreakif(isNaN(StartLat)or(isNaN(StartLon)))behaviorGuidance:Waypoint{runinsequencesetGuidance:Waypoint.latitude=StartLatsetGuidance:Waypoint.longitude=StartLon}}aggregateMaintainHeading{runinsequencebreakif(not(isNaN(StartLat))or(not(isNaN(StartLon))))behaviorGuidance:Wait{runinsequencesetGuidance:Wait.duration=RolloutTimeout}}}}callid="PhoneHome"refId="SurfaceComms"}
<?xml version="1.0" encoding="UTF-8"?><Missionxmlns="Tethys"xmlns:Control="Tethys/Control"xmlns:Estimation="Tethys/Estimation"xmlns:Guidance="Tethys/Guidance"xmlns:Sensor="Tethys/Sensor"xmlns:Units="Tethys/Units"xmlns:Universal="Tethys/Universal"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="Tethys http://okeanids.mbari.org/tethys/Xml/Tethys.xsd Tethys/Control http://okeanids.mbari.org/tethys/Xml/Control.xsd Tethys/Estimation http://okeanids.mbari.org/tethys/Xml/Estimation.xsd Tethys/Guidance http://okeanids.mbari.org/tethys/Xml/Guidance.xsd Tethys/Sensor http://okeanids.mbari.org/tethys/Xml/Sensor.xsd Tethys/Units http://okeanids.mbari.org/tethys/Xml/Units.xsd Tethys/Universal http://okeanids.mbari.org/tethys/Xml/Universal.xsd"Id="lineCaptureHoming"><Description>
Home to transponder while maintaining altitude. The mission sequence:
(*) Start (1) Midcourse guidance: nav to target WP while querying
transponder (2) Terminal guidance: home to target using DUSBL tracking
data, fire up SCPI when in range (4) Dock: final approach using fixed
heading (5) Rollout: break off from dock, then nav back to start wp or
move away from the target at the last commanded heading (*) repeat Note:
since there's a possibility that no altitude reading will be available
form the surface (e.g., when the bottom is out of DVL range), the
vehicle first descends from the surface to a commanded depth and then
starts following the commanded altitude.
</Description><!-- Define mission arguments --><DefineArgName="MissionTimeout"><Description>
Maximum length of mission
</Description><Units:hour/><Value>4</Value></DefineArg><DefineArgName="NeedCommsTime"><Description>
How often to surface for commumications
</Description><Units:minute/><Value>60</Value></DefineArg><DefineArgName="Repeat"><Description>
Number of times the vehicle should try to cycle through the homing
sequence.
</Description><Units:count/><Value>1</Value></DefineArg><DefineArgName="DockLat"><Description>
Latitude of docking station waypoint.
</Description><Units:degree/><Value>36.7436</Value></DefineArg><DefineArgName="DockLon"><Description>
Longitude of docking station waypoint.
</Description><Units:degree/><Value>-121.8800</Value></DefineArg><DefineArgName="StartLat"><Description>
Latitude of docking sequance start waypoint. The vehicle navigates back
to this waypoint at the end of each homing attempt. If set to NaN, the
vehicle moves away from the target at the last commanded heading until
*RolloutTimeout* has passed.
</Description><Units:degree/><Value>NaN</Value></DefineArg><DefineArgName="StartLon"><Description>
Longitude of docking sequance start waypoint. The vehicle navigates back
to this waypoint at the end of each homing attempt. If set to NaN, the
vehicle moves away from the target at the last commanded heading until
*RolloutTimeout* has passed.
</Description><Units:degree/><Value>NaN</Value></DefineArg><DefineArgName="TerminalRange"><Description>
Range at which the vehicle should switch from navigating to the dock wp
and start homing to the target using DUSBL tracking data. Max is ??
meters due to DUSBL ???.
</Description><Units:meter/><Value>650.0</Value></DefineArg><DefineArgName="CameraRange"><Description>
Range to activate the camera payload.
</Description><Units:meter/><Value>25.0</Value></DefineArg><DefineArgName="DockRange"><Description>
Minimum range to continue to update heading being driven.
</Description><Units:meter/><Value>4.0</Value></DefineArg><DefineArgName="UpdateNav"><Description>
When true, the mission updates the vehicle's position to DockLat/Lon
when it comes within *DockRange* from the transponder.
</Description><Units:bool/><Value><False/></Value></DefineArg><DefineArgName="AcousticContactTimeout"><Description>
If the vehicle does not receive an acoustic signal for more than this
length of time, it will boot out of the homing sequance.
</Description><Units:minute/><Value>15</Value></DefineArg><DefineArgName="TerminalGuidanceTimeout"><Description>
Maximum time duration for running in terminal guidance mode.
</Description><Units:minute/><Value>30</Value></DefineArg><DefineArgName="DockTimeout"><Description>
Time duration for running in Dock mode.
</Description><Units:second/><Value>60</Value></DefineArg><DefineArgName="RolloutTimeout"><Description>
Drive on your last heading for this long after approaching within
minimum (dock) range.
</Description><Units:minute/><Value>12</Value></DefineArg><DefineArgName="HoldAltitude"><Description>
Desired vehicle altitude to maintain.
</Description><Units:meter/><Value>7</Value></DefineArg><DefineArgName="InvalidAltitudeTimeout"><Description>
The mission will abort if no valid altitude readings are received within
this specified time duration. Set this variable to NaN to disable this
timeout functionality.
</Description><Units:minute/><Value>NaN</Value></DefineArg><DefineArgName="InitDepth"><Description>
Initial depth. The vehicle will dive to this depth when leaving the
surface. Necessary if no altitude reading is available form the surface
(e.g., when the bottom is out of DVL range).
</Description><Units:meter/><Value>30</Value></DefineArg><DefineArgName="InitDepthTimeout"><Description>
Maximum time duration for the vehicle to reach the initial depth. The
vehicle will switch over to altitude following after the timeout is
expired.
</Description><Units:minute/><Value>30</Value></DefineArg><DefineArgName="TransponderCode"><Description>
Transponder Address.
</Description><Units:count/><Value>2</Value></DefineArg><DefineArgName="TrackingUpdatePeriod"><Description>
How long to wait between acoustic queries
</Description><Units:second/><Value>0.1</Value></DefineArg><DefineArgName="NumberOfPings"><Description>
Number of pings requested each time.
</Description><Units:count/><Value>1</Value></DefineArg><DefineArgName="Speed"><Description>
Thruster speed for the entier mission.
</Description><Units:meter_per_second/><Value>1</Value></DefineArg><DefineArgName="DepthDeadband"><Units:meter/><Value>0.0</Value></DefineArg><DefineArgName="MinAltitude"><Description>
Minimum height above the sea floor for the entire mission.
</Description><Units:meter/><Value>5</Value></DefineArg><DefineArgName="MaxDepth"><Description>
Maximum depth for the entire mission.
</Description><Units:meter/><Value>205</Value></DefineArg><DefineArgName="MinOffshore"><Description>
Minimum offshore distance for the entire mission.
</Description><Units:kilometer/><Value>2</Value></DefineArg><DefineOutputName="HomingActive"><Description>
Mission variable (don't change). The mission sets this to true when the
vehicle is homing.
</Description><True/></DefineOutput><DefineOutputName="CameraRequested"><Description>
Mission variable (don't change). The mission sets this to true after
camera is requested (prevents multipul req).
</Description><False/></DefineOutput><DefineOutputName="DiveMode"><Description>
Mission variable (don't change). The mission sets this variable to
switch between dive modes.
</Description><Units:count/><Value>0</Value></DefineOutput><DefineOutputName="DoingComms"><Description>
Mission variable (don't change). The mission will run in this to mode
when running surface comms.
</Description><Units:count/><Value>0</Value></DefineOutput><DefineOutputName="InitialDive"><Description>
Mission variable (don't change). The mission will run in this mode when
surface comms are done to dive the vehicle to DVL bottom range.
</Description><Units:count/><Value>1</Value></DefineOutput><DefineOutputName="MaintainAltitude"><Description>
Mission variable (don't change). The mission will run in this mode to
dive the vehicle at a commanded altitude.
</Description><Units:count/><Value>2</Value></DefineOutput><DefineOutputName="DetachFromDock"><Description>
Mission variable (don't change). The mission will run in this mode to
drift away from the dock after is unlatches.
</Description><Units:count/><Value>3</Value></DefineOutput><!-- Mission timeout --><TimeoutDuration="MissionTimeout"/><!-- Safety nets and surfacing behaviors --><InsertFilename="Insert/StandardEnvelopes.tl"/><Assign><Sequence/><ArgName="StandardEnvelopes:MinAltitude"/><ArgName="MinAltitude"/></Assign><Assign><Sequence/><ArgName="StandardEnvelopes:MaxDepth"/><ArgName="MaxDepth"/></Assign><Assign><Sequence/><ArgName="StandardEnvelopes:MinOffshore"/><ArgName="MinOffshore"/></Assign><InsertFilename="Insert/NeedComms.tl"Id="NeedComms"/><Assign><Sequence/><ArgName="NeedComms:DiveInterval"/><ArgName="MissionTimeout"/></Assign><Assign><Sequence/><ArgName="NeedComms:WaitForPitchUp"/><Units:minute/><Value>0</Value></Assign><AggregateId="SurfaceComms"><When><Called/><Or><Elapsed><Universal:time_fix/></Elapsed><Gt><ArgName="NeedCommsTime"/></Gt></Or></When><Assign><Sequence/><ArgName="DiveMode"/><ArgName="DoingComms"/></Assign><CallRefId="NeedComms"/><Assign><Sequence/><ArgName="DiveMode"/><ArgName="InitialDive"/></Assign></Aggregate><!-- Add track acoustic contact directive high in the stack. --><AggregateId="TrackTransponder"><While><ArgName="HomingActive"/></While><Estimation:TrackAcousticContact><Parallel/><Setting><Estimation:TrackAcousticContact.contactLabelSetting/><ArgName="TransponderCode"/></Setting><Setting><Estimation:TrackAcousticContact.numberOfSamplesSetting/><ArgName="NumberOfPings"/></Setting><Setting><Estimation:TrackAcousticContact.updatePeriodSetting/><ArgName="TrackingUpdatePeriod"/></Setting></Estimation:TrackAcousticContact></Aggregate><!-- Set default mass position --><Guidance:Mass><Parallel/><Setting><Guidance:Mass.position/><Control:VerticalControl.massDefault/></Setting></Guidance:Mass><!-- Callable aggregates (priority matters, so these are done below important safety directives --><AggregateId="DiveCmd"><Description>
Called when the vehicle should be underwater. Arbitrates between 3
dive modes: 1) descend from the surface to initial depth. 2) follow
commanded altitude. 3) drift away from dock to initial depth.
</Description><When><Called/></When><AggregateId="InitialDive"><Description>
Descend from the surface to initial depth. Necessary when no
altitude reading is available form the surface.
</Description><While><ArgName="DiveMode"/><Eq><ArgName="InitialDive"/></Eq></While><AggregateId="dive"><Sequence/><Guidance:Buoyancy><Parallel/><Setting><Guidance:Buoyancy.position/><Control:VerticalControl.buoyancyNeutral/></Setting></Guidance:Buoyancy><Guidance:SetSpeed><Parallel/><Setting><Guidance:SetSpeed.speed/><ArgName="Speed"/></Setting></Guidance:SetSpeed><Guidance:Pitch><Sequence/><TimeoutDuration="InitDepthTimeout"><SyslogSeverity="Important">Timed out at current depth of <Universal:depth/><Units:meter/>. Switching to altitude servo.</Syslog></Timeout><Setting><Guidance:Pitch.depth/><ArgName="InitDepth"/></Setting></Guidance:Pitch><Assign><Sequence/><ArgName="DiveMode"/><ArgName="MaintainAltitude"/></Assign></Aggregate></Aggregate><AggregateId="AltitudeServo"><Description>
Follow commanded altitude.
</Description><While><ArgName="DiveMode"/><Eq><ArgName="MaintainAltitude"/></Eq></While><AggregateId="dive"><Parallel/><Assign><Parallel/><Control:VerticalControl.depthDeadband/><ArgName="DepthDeadband"/></Assign><Guidance:Buoyancy><Parallel/><Setting><Guidance:Buoyancy.position/><Control:VerticalControl.buoyancyNeutral/></Setting></Guidance:Buoyancy><Guidance:SetSpeed><Parallel/><Setting><Guidance:SetSpeed.speed/><ArgName="Speed"/></Setting></Guidance:SetSpeed><Guidance:AltitudeServo><Parallel/><Setting><Guidance:AltitudeServo.targetAltitude/><ArgName="HoldAltitude"/></Setting><Setting><Guidance:AltitudeServo.invalidAltitudeTimeout/><ArgName="InvalidAltitudeTimeout"/></Setting></Guidance:AltitudeServo></Aggregate></Aggregate><AggregateId="DriftAwayFromDock"><Description>
Drift away from the dock after vehicle unlatches.
</Description><While><ArgName="DiveMode"/><Eq><ArgName="DetachFromDock"/></Eq></While><AggregateId="dive"><Sequence/><Guidance:SetSpeed><Parallel/><Setting><Guidance:SetSpeed.speed/><Units:meter_per_second/><Value>0</Value></Setting></Guidance:SetSpeed><Guidance:Pitch><Sequence/><TimeoutDuration="InitDepthTimeout"><SyslogSeverity="Important">Timed out while trying to detach from dock at current depth of <Universal:depth/><Units:meter/>.</Syslog><Guidance:Execute><Sequence/><Setting><Guidance:Execute.command/><String>stop</String></Setting></Guidance:Execute></Timeout><Setting><Guidance:Pitch.depth/><ArgName="InitDepth"/></Setting></Guidance:Pitch><Assign><Sequence/><ArgName="DiveMode"/><ArgName="MaintainAltitude"/></Assign></Aggregate></Aggregate></Aggregate><!-- Start mission sequence. --><CallId="StartingMission"RefId="SurfaceComms"/><AggregateId="Lap"><SequenceRepeat="Repeat"/><AggregateId="Dive"><While><Not><ArgName="DiveMode"/><Eq><ArgName="DoingComms"/></Eq></Not></While><CallRefId="DiveCmd"/></Aggregate><SyslogSeverity="Important">Initiating homing sequence.</Syslog><Assign><Sequence/><ArgName="HomingActive"/><True/></Assign><AggregateId="MidcourseGuidance"><Description>
Navigate toward the dock waypoint while querying the dock
transponder. Continue until you approach within *TerminalRange*,
then move on to the next aggregate.
</Description><Sequence/><Break><Estimation:TrackAcousticContact.range_to_contact/><Lt><ArgName="TerminalRange"/></Lt></Break><Guidance:Waypoint><Sequence/><Setting><Guidance:Waypoint.latitude/><ArgName="DockLat"/></Setting><Setting><Guidance:Waypoint.longitude/><ArgName="DockLon"/></Setting></Guidance:Waypoint></Aggregate><SyslogSeverity="Info">Transition to TerminalGuidance at range: <Estimation:TrackAcousticContact.range_to_contact/><Units:meter/>.</Syslog><AggregateId="TerminalGuidance"><Description>
Move toward the target using DUSBL tracking data and update the
commanded heading with each cycle, activate SCPI when in range.
Continue until you're within *DockRange*, then move on to the
next aggregate.
</Description><Sequence/><Break><Estimation:TrackAcousticContact.range_to_contact/><Lt><ArgName="DockRange"/></Lt></Break><!-- Even if we're getting acoustic contact, let's not just do this forever --><TimeoutDuration="TerminalGuidanceTimeout"/><SyslogSeverity="Important">Terminal guidance at range: <Estimation:TrackAcousticContact.range_to_contact/><Units:meter/>.</Syslog><Guidance:Point><Parallel/><Setting><Guidance:Point.forceUpdate/><True/></Setting><!-- keep adjusting the heading --><Setting><Guidance:Point.heading/><Estimation:TrackAcousticContact.heading_to_contact/></Setting></Guidance:Point><AggregateId="ActivateCamera"><When><Not><ArgName="CameraRequested"/></Not><And><Estimation:TrackAcousticContact.range_to_contact/><Le><ArgName="CameraRange"/></Le></And></When><SyslogSeverity="Important">Lights, Camera on at range: <Estimation:TrackAcousticContact.range_to_contact/><Units:meter/>.</Syslog><ReadDataStrategy="MinError"><Sensor:PowerOnly.samplePowerOnly/></ReadData><Assign><Sequence/><ArgName="CameraRequested"/><True/></Assign></Aggregate><!-- Keep running terminal guidance until we're within dock range (or until we time out) --><Guidance:Wait><Sequence/><Setting><Guidance:Wait.duration/><ArgName="TerminalGuidanceTimeout"/></Setting></Guidance:Wait></Aggregate><SyslogSeverity="Info">Transition to dock at range: <Estimation:TrackAcousticContact.range_to_contact/><Units:meter/>.</Syslog><AggregateId="Dock"><Description>
Final approach. Close in on the target at the last commanded
heading until *DockTimeout* has passed. No DUSBL heading
updates.
</Description><Sequence/><!-- No reson to dock if we haven't come within camara range --><Break><Not><ArgName="CameraRequested"/></Not></Break><SyslogSeverity="Important">Final approach. Range: <Estimation:TrackAcousticContact.range_to_contact/><Units:meter/>.</Syslog><AggregateId="UpdateNav"><Sequence/><Break><Not><ArgName="UpdateNav"/></Not></Break><Dock:SetNav><Sequence/><Setting><Dock:SetNav.latitude/><ArgName="DockLat"/></Setting><Setting><Dock:SetNav.longitude/><ArgName="DockLon"/></Setting></Dock:SetNav></Aggregate><Guidance:Wait><Sequence/><Setting><Guidance:Wait.duration/><ArgName="DockTimeout"/></Setting></Guidance:Wait><AggregateId="BreakOffDock"><Sequence/><SyslogSeverity="Info">Breaking off. Range: <Estimation:TrackAcousticContact.range_to_contact/><Units:meter/>.</Syslog><Assign><Sequence/><ArgName="DiveMode"/><ArgName="DetachFromDock"/></Assign><AggregateId="WaitForBreakOff"><When><ArgName="DiveMode"/><Eq><ArgName="DetachFromDock"/></Eq></When><Guidance:Wait><Sequence/><Setting><Guidance:Wait.duration/><ArgName="InitDepthTimeout"/></Setting></Guidance:Wait></Aggregate></Aggregate></Aggregate><SyslogSeverity="Info">Rollout at range: <Estimation:TrackAcousticContact.range_to_contact/><Units:meter/>.</Syslog><!-- Homing sequance complete --><AggregateId="Rollout"><Description>
Navigate back to the start waypoint or move away from the target
at the last commanded heading until *RolloutTimeout* has passed.
</Description><Sequence/><Assign><Sequence/><ArgName="CameraRequested"/><False/></Assign><Assign><Sequence/><ArgName="HomingActive"/><False/></Assign><!-- Let's make sure we're in the right dive mode --><Assign><Sequence/><ArgName="DiveMode"/><ArgName="MaintainAltitude"/></Assign><AggregateId="NavToStart"><Sequence/><Break><IsNaN><ArgName="StartLat"/></IsNaN><Or><IsNaN><ArgName="StartLon"/></IsNaN></Or></Break><Guidance:Waypoint><Sequence/><Setting><Guidance:Waypoint.latitude/><ArgName="StartLat"/></Setting><Setting><Guidance:Waypoint.longitude/><ArgName="StartLon"/></Setting></Guidance:Waypoint></Aggregate><AggregateId="MaintainHeading"><Sequence/><Break><Not><IsNaN><ArgName="StartLat"/></IsNaN></Not><Or><Not><IsNaN><ArgName="StartLon"/></IsNaN></Not></Or></Break><Guidance:Wait><Sequence/><Setting><Guidance:Wait.duration/><ArgName="RolloutTimeout"/></Setting></Guidance:Wait></Aggregate></Aggregate></Aggregate><CallId="PhoneHome"RefId="SurfaceComms"/></Mission>