<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D profile='Immersive' version='3.0 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation =' http://www.web3d.org/specifications/x3d-3.0.xsd '>
<head>
<meta name='titlecontent='AriesPrototype.x3d'/>
<meta name='descriptioncontent='Model of the Acoustic Radio Interactive Exploratory Server (ARIES), an operational NPS-designed Unmanned Underwater Vehicle (AUV). Expose position, rotation, sonars, thrusters, fins, etc. as a reusable prototype.'/>
<meta name='creatorcontent='Don Brutzman NPS, aboard RV Gyre in Gulf of Mexico off Gulfport MS 1999; Jane Wu Rolands and Associates 2001, Duane Davis NPS 2003'/>
<meta name='createdcontent='30 July 2000'/>
<meta name='modifiedcontent='26 December 2014'/>
<meta name='photocontent='AriesHoistCloseup.jpg'/>
<meta name='referencecontent='AriesFlyerMarch2001.pdf'/>
<meta name='referencecontent='organic_mcmONR2002.pdf'/>
<meta name='referencecontent='AriesSchematic.png'/>
<meta name='referencecontent='AriesSchematic.ppt'/>
<meta name='identifiercontent=' https://savage.nps.edu/Savage/Robots/UnmannedUnderwaterVehicles/AriesPrototype.x3d '/>
<meta name='generatorcontent='X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../../license.html'/>
</head>
<!-- -->
<Scene>
<!-- Produce wireframe or transparent beam cones. -->
<ExternProtoDeclare name='BeamConeappinfo='Produce wireframe or transparent beam cones. Typical uses include propeller/thruster water flow or line-of-sight sonar/radar/light beams. Negative range values invert base and apex at same relative location. Default: beam with apex at (0 0 0) and base of radius 1 in x-z plane at (1 0 0).'
  url=' "../../CommunicationsAndSensors/Beam/BeamConePrototype.x3d#BeamCone" "https://savage.nps.edu/Savage/CommunicationsAndSensors/Beam/BeamConePrototype.x3d#BeamCone" "../../CommunicationsAndSensors/Beam/BeamConePrototype.wrl#BeamCone" "https://savage.nps.edu/Savage/CommunicationsAndSensors/Beam/BeamConePrototype.wrl#BeamCone" '>
<field name='nametype='SFStringaccessType='initializeOnly'
 appinfo='BeamCone name aids tracing'/>

<field name='contacttype='SFBoolaccessType='inputOnly'
 appinfo='(communications) is transmitted signal in contact with receiver or (sensor) is a target return detected?'/>

<field name='rangetype='SFFloataccessType='inputOnly'
 appinfo='distance in meters along x axis'/>

<field name='defaultRangetype='SFFloataccessType='initializeOnly'
 appinfo='distance in meters used until eventIn range sent'/>

<field name='wireframetype='SFBoolaccessType='initializeOnly'
 appinfo='whether wireframe beam is drawn'/>

<field name='solidtype='SFBoolaccessType='initializeOnly'
 appinfo='whether solid beam is drawn'/>

<field name='beamHeightDegreestype='SFFloataccessType='initializeOnly'
 appinfo='degrees across vertical y axis'/>

<field name='beamWidthDegreestype='SFFloataccessType='initializeOnly'
 appinfo='degrees across horizontal z axis'/>

<field name='contactColortype='SFColoraccessType='initializeOnly'
 appinfo='rendering color when contact=true'/>

<field name='noContactColortype='SFColoraccessType='initializeOnly'
 appinfo='rendering color when contact=false'/>

<field name='transparencytype='SFFloataccessType='inputOutput'
 appinfo='1 = fully transparent wireframe only'/>

<field name='traceEnabledtype='SFBoolaccessType='initializeOnly'
 appinfo='flag to turn on Script tracing'/>
</ExternProtoDeclare>
<ProtoDeclare name='Ariesappinfo='Acoustic Radio Interactive Exploratory Server (ARIES) is an operational NPS-designed Unmanned Underwater Vehicle (AUV)'>
<ProtoInterface>
<field name='hullNametype='SFStringvalue='AriesaccessType='inputOutput'
 appinfo='can be overridden at instantiation time only'/>

<field name='hullColortype='SFColorvalue='.9 .9 .9accessType='inputOutput'
 appinfo='hull color for this UUV instance'/>

<field name='planeColortype='SFColorvalue='.1 .1 .8accessType='inputOutput'
 appinfo='plane color for this UUV instance'/>

<field name='translationtype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='rotationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='set_portRpmtype='SFFloataccessType='inputOnly'/>
<field name='set_stbdRpmtype='SFFloataccessType='inputOnly'/>
<field name='set_forwardRudderstype='SFFloataccessType='inputOnly'/>
<field name='set_afterRudderstype='SFFloataccessType='inputOnly'/>
<field name='set_forwardPlanestype='SFFloataccessType='inputOnly'/>
<field name='set_afterPlanestype='SFFloataccessType='inputOnly'/>
<field name='set_forwardVerticalThrustertype='SFFloataccessType='inputOnly'/>
<field name='set_afterVerticalThrustertype='SFFloataccessType='inputOnly'/>
<field name='set_forwardLateralThrustertype='SFFloataccessType='inputOnly'/>
<field name='set_afterLateralThrustertype='SFFloataccessType='inputOnly'/>
<field name='set_ST725Rangetype='SFFloataccessType='inputOnly'
 appinfo='meters along sonar axis'/>

<field name='set_ST725Bearingtype='SFFloataccessType='inputOnly'
 appinfo='degrees about vertical axis'/>

<field name='set_ST725Intensitytype='SFFloataccessType='inputOnly'
 appinfo='signal-to-noise ratio decibels'/>

<field name='set_ST1000Rangetype='SFFloataccessType='inputOnly'
 appinfo='meters along sonar axis'/>

<field name='set_ST1000Bearingtype='SFFloataccessType='inputOnly'
 appinfo='degrees about vertical axis'/>

<field name='set_ST1000Intensitytype='SFFloataccessType='inputOnly'
 appinfo='signal-to-noise ratio decibels'/>
</ProtoInterface>
<ProtoBody>
<Transform DEF='AriesTransform'>
<IS>
<connect nodeField='translationprotoField='translation'/>
<connect nodeField='rotationprotoField='rotation'/>
</IS>
<!-- ROUTE information for ST725 node:  [from SONAR_STEERING_AND_DETECTS.ST725Rotation to rotation ] -->
<Transform DEF='ST725translation='.9 -0.12 -0.03'>
<!-- ROUTE information for ST725BeamCone node:  [from SONAR_STEERING_AND_DETECTS.ST725Contact to contact ] [from SONAR_STEERING_AND_DETECTS.ST725Range_changed to range ] [from SONAR_STEERING_AND_DETECTS.ST725Intensity to transparency ] -->
<ProtoInstance name='BeamConeDEF='ST725BeamCone'>
<fieldValue name='namevalue='ST725BeamCone'/>
<fieldValue name='defaultRangevalue='1'/>
<fieldValue name='beamHeightDegreesvalue='24'/>
<fieldValue name='beamWidthDegreesvalue='1'/>
<fieldValue name='solidvalue='true'/>
<fieldValue name='wireframevalue='false'/>
<fieldValue name='contactColorvalue='1 0 0'/>
<fieldValue name='noContactColorvalue='.3 .05 .05'/>
<fieldValue name='transparencyvalue='.2'/>
<fieldValue name='traceEnabledvalue='false'/>
</ProtoInstance>
</Transform>
<!-- ROUTE information for ST1000 node:  [from SONAR_STEERING_AND_DETECTS.ST1000Rotation to rotation ] -->
<Transform DEF='ST1000translation='.7 .12 .05'>
<!-- ROUTE information for ST1000BeamCone node:  [from SONAR_STEERING_AND_DETECTS.ST1000Contact to contact ] [from SONAR_STEERING_AND_DETECTS.ST1000Range_changed to range ] [from SONAR_STEERING_AND_DETECTS.ST1000Intensity to transparency ] -->
<ProtoInstance name='BeamConeDEF='ST1000BeamCone'>
<fieldValue name='namevalue='ST1000BeamCone'/>
<fieldValue name='defaultRangevalue='1'/>
<fieldValue name='beamHeightDegreesvalue='1'/>
<fieldValue name='beamWidthDegreesvalue='1'/>
<fieldValue name='solidvalue='true'/>
<fieldValue name='wireframevalue='false'/>
<fieldValue name='contactColorvalue='1 .8 0'/>
<fieldValue name='noContactColorvalue='.4 .3 .05'/>
<fieldValue name='transparencyvalue='.2'/>
<fieldValue name='traceEnabledvalue='false'/>
</ProtoInstance>
</Transform>
<!-- ROUTE information for SONAR_STEERING_AND_DETECTS node:  [from ST725Rotation to ST725.rotation ] [from ST1000Rotation to ST1000.rotation ] [from ST725Contact to ST725BeamCone.contact ] [from ST1000Contact to ST1000BeamCone.contact ] [from ST725Range_changed to ST725BeamCone.range ] [from ST1000Range_changed to ST1000BeamCone.range ] [from ST725Intensity to ST725BeamCone.transparency ] [from ST1000Intensity to ST1000BeamCone.transparency ] -->
<Script DEF='SONAR_STEERING_AND_DETECTS'>
<field name='set_ST725Rangetype='SFFloataccessType='inputOnly'/>
<field name='set_ST725Bearingtype='SFFloataccessType='inputOnly'/>
<field name='set_ST725Intensitytype='SFFloataccessType='inputOnly'/>
<field name='set_ST1000Rangetype='SFFloataccessType='inputOnly'/>
<field name='set_ST1000Bearingtype='SFFloataccessType='inputOnly'/>
<field name='set_ST1000Intensitytype='SFFloataccessType='inputOnly'/>
<field name='ST725Rotationtype='SFRotationaccessType='outputOnly'/>
<field name='ST1000Rotationtype='SFRotationaccessType='outputOnly'/>
<field name='ST725Contacttype='SFBoolaccessType='outputOnly'/>
<field name='ST1000Contacttype='SFBoolaccessType='outputOnly'/>
<field name='ST725Range_changedtype='SFFloataccessType='outputOnly'/>
<field name='ST1000Range_changedtype='SFFloataccessType='outputOnly'/>
<field name='ST725Intensitytype='SFFloataccessType='outputOnly'/>
<field name='ST1000Intensitytype='SFFloataccessType='outputOnly'/>
<IS>
<connect nodeField='set_ST725RangeprotoField='set_ST725Range'/>
<connect nodeField='set_ST725BearingprotoField='set_ST725Bearing'/>
<connect nodeField='set_ST725IntensityprotoField='set_ST725Intensity'/>
<connect nodeField='set_ST1000RangeprotoField='set_ST1000Range'/>
<connect nodeField='set_ST1000BearingprotoField='set_ST1000Bearing'/>
<connect nodeField='set_ST1000IntensityprotoField='set_ST1000Intensity'/>
</IS>
<![CDATA[
            
ecmascript:

function degreeToRadian( value )
{
   return value * Math.PI / 180;
}

function set_ST725Range (value, timeStamp)
{
   if ((value > 0) && (value < 30.0))
   {
      ST725Contact = true;
      ST725Range_changed = value;
   }
   else
   {
      ST725Contact = false;
      if ( value < 0 )
         ST725Range_changed = 0.0;
      else
         ST725Range_changed = 30.0;
   }
}
function set_ST725Bearing (value, timeStamp)
{
   ST725Rotation = new SFRotation(0, 1, 0, degreeToRadian(value));
}
function set_ST725Intensity (value, timeStamp)
{
   ST725Intensity = new SFFloat(value);
}

function set_ST1000Range (value, timeStamp)
{
   if ((value > 0) && (value < 30.0))
   {
      ST1000Contact = true;
      ST1000Range_changed = value;
   }
   else
   {
      ST1000Contact = false;
      if ( value < 0 )
         ST1000Range_changed = 0.0;
      else
         ST1000Range_changed = 30.0;
   }
}
function set_ST1000Bearing (value, timeStamp)
{
   ST1000Rotation = new SFRotation(0, 1, 0, degreeToRadian(value));
}
function set_ST1000Intensity (value, timeStamp)
{
   ST1000Intensity = new SFFloat(value);
}

          
]]>
</Script>
<Group>
<ROUTE fromNode='SONAR_STEERING_AND_DETECTSfromField='ST725RotationtoNode='ST725toField='rotation'/>
<ROUTE fromNode='SONAR_STEERING_AND_DETECTSfromField='ST1000RotationtoNode='ST1000toField='rotation'/>
<ROUTE fromNode='SONAR_STEERING_AND_DETECTSfromField='ST725ContacttoNode='ST725BeamConetoField='contact'/>
<ROUTE fromNode='SONAR_STEERING_AND_DETECTSfromField='ST1000ContacttoNode='ST1000BeamConetoField='contact'/>
<ROUTE fromNode='SONAR_STEERING_AND_DETECTSfromField='ST725Range_changedtoNode='ST725BeamConetoField='range'/>
<ROUTE fromNode='SONAR_STEERING_AND_DETECTSfromField='ST1000Range_changedtoNode='ST1000BeamConetoField='range'/>
<ROUTE fromNode='SONAR_STEERING_AND_DETECTSfromField='ST725IntensitytoNode='ST725BeamConetoField='transparency'/>
<ROUTE fromNode='SONAR_STEERING_AND_DETECTSfromField='ST1000IntensitytoNode='ST1000BeamConetoField='transparency'/>
</Group>
<LOD range='400'>
<!-- ### hack job! need to update actual numbers instead of scaling -->
<Transform DEF='PRIMARY_AUV_GEOMETRYscale='1 1.3 1'>
<!-- positive rotation about y-axis rotates rudders to port -->
<!-- ROUTE information for FORWARD_RUDDERS node:  [from PLANE_SURFACES.forwardRuddersRotation to rotation ] -->
<Transform DEF='FORWARD_RUDDERStranslation='.6223 0 0'>
<Transform translation='0 .13335 0'>
<Shape DEF='PLANE_SHAPE'>
<Appearance>
<Material DEF='PlaneMaterial'>
<IS>
<connect nodeField='diffuseColorprotoField='planeColor'/>
</IS>
</Material>
</Appearance>
<!-- creaseAngle for sharp edges -->
<IndexedFaceSet creaseAngle='3.14159coordIndex='0 3 2 1 -1 4 5 6 7 -1 0 1 5 4 -1 1 2 6 5 -1 2 3 7 6 -1 0 3 7 4 -1'>
<!-- indices for point values range [0..7] -->
<Coordinate point='.0635 0 -0.0127 .0381 .1778 -0.0127 -0.0381 .1778 -0.0127 -0.0889 0 -0.0127 .0635 0 .0127 .0381 .1778 .0127 -0.0381 .1778 .0127 -0.0889 0 .0127'/>
</IndexedFaceSet>
</Shape>
</Transform>
<Transform rotation='1 0 0 3.14159267translation='0 -0.13335 0'>
<Shape USE='PLANE_SHAPE'/>
</Transform>
</Transform>
<!-- positive rotation about y-axis rotates rudder to port -->
<!-- ROUTE information for AFTER_RUDDERS node:  [from PLANE_SURFACES.afterRuddersRotation to rotation ] -->
<Transform DEF='AFTER_RUDDERStranslation='-0.7747 0 0'>
<Transform translation='0 .13335 0'>
<Shape USE='PLANE_SHAPE'/>
</Transform>
<Transform rotation='1 0 0 3.14159267translation='0 -0.13335 0'>
<Shape USE='PLANE_SHAPE'/>
</Transform>
</Transform>
<!-- ROUTE information for FORWARD_PLANES node:  [from PLANE_SURFACES.forwardPlanesRotation to rotation ] -->
<Transform DEF='FORWARD_PLANEStranslation='.6223 0 0'>
<Transform rotation='1 0 0 1.57079translation='0 0 .20955'>
<Shape USE='PLANE_SHAPE'/>
</Transform>
<Transform rotation='1 0 0 -1.57079translation='0 0 -0.20955'>
<Shape USE='PLANE_SHAPE'/>
</Transform>
</Transform>
<!-- ROUTE information for AFTER_PLANES node:  [from PLANE_SURFACES.afterPlanesRotation to rotation ] -->
<Transform DEF='AFTER_PLANEStranslation='-0.7747 0 0'>
<Transform rotation='1 0 0 1.57079translation='0 0 .20955'>
<Shape USE='PLANE_SHAPE'/>
</Transform>
<Transform rotation='1 0 0 -1.57079translation='0 0 -0.20955'>
<Shape USE='PLANE_SHAPE'/>
</Transform>
</Transform>
<!-- ROUTE information for PLANE_SURFACES node:  [from forwardRuddersRotation to FORWARD_RUDDERS.rotation ] [from afterRuddersRotation to AFTER_RUDDERS.rotation ] [from forwardPlanesRotation to FORWARD_PLANES.rotation ] [from afterPlanesRotation to AFTER_PLANES.rotation ] -->
<Script DEF='PLANE_SURFACES'>
<field name='set_forwardRudderstype='SFFloataccessType='inputOnly'/>
<field name='set_afterRudderstype='SFFloataccessType='inputOnly'/>
<field name='set_forwardPlanestype='SFFloataccessType='inputOnly'/>
<field name='set_afterPlanestype='SFFloataccessType='inputOnly'/>
<field name='forwardRuddersRotationtype='SFRotationaccessType='outputOnly'/>
<field name='afterRuddersRotationtype='SFRotationaccessType='outputOnly'/>
<field name='forwardPlanesRotationtype='SFRotationaccessType='outputOnly'/>
<field name='afterPlanesRotationtype='SFRotationaccessType='outputOnly'/>
<IS>
<connect nodeField='set_forwardRuddersprotoField='set_forwardRudders'/>
<connect nodeField='set_afterRuddersprotoField='set_afterRudders'/>
<connect nodeField='set_forwardPlanesprotoField='set_forwardPlanes'/>
<connect nodeField='set_afterPlanesprotoField='set_afterPlanes'/>
</IS>
<![CDATA[
                
ecmascript:

function set_forwardRudders (value, timeStamp) {
   forwardRuddersRotation = new SFRotation(0, 1, 0, value);
}

function set_afterRudders (value, timeStamp) {
   afterRuddersRotation = new SFRotation(0, 1, 0, value);
}

function set_forwardPlanes (value, timeStamp) {
   forwardPlanesRotation = new SFRotation(0, 0, 1, value);
}

function set_afterPlanes (value, timeStamp) {
   afterPlanesRotation = new SFRotation(0, 0, 1, value);
}

              
]]>
</Script>
<Group>
<ROUTE fromNode='PLANE_SURFACESfromField='forwardRuddersRotationtoNode='FORWARD_RUDDERStoField='rotation'/>
<ROUTE fromNode='PLANE_SURFACESfromField='afterRuddersRotationtoNode='AFTER_RUDDERStoField='rotation'/>
<ROUTE fromNode='PLANE_SURFACESfromField='forwardPlanesRotationtoNode='FORWARD_PLANEStoField='rotation'/>
<ROUTE fromNode='PLANE_SURFACESfromField='afterPlanesRotationtoNode='AFTER_PLANEStoField='rotation'/>
</Group>
<Transform DEF='FORWARD_VERTICAL_THRUSTERtranslation='.3302 0 0'>
<Shape DEF='VERTICAL_THRUSTER_SHAPE'>
<Appearance DEF='THRUSTER_APPEARANCE'>
<Material diffuseColor='.2 .2 .2'/>
</Appearance>
<Cylinder height='.29radius='.0635side='false'/>
</Shape>
<!-- ROUTE information for FORWARD_VERTICAL_BEAMCONE node:  [from THRUSTER_CONES.forwardVerticalThrusterBeamTranslation to translation ] -->
<Transform DEF='FORWARD_VERTICAL_BEAMCONErotation='0 0 1 1.57079translation='0 .145 0'>
<!-- ROUTE information for ForwardVerticalBeamCone node:  [from THRUSTER_CONES.forwardVerticalThrusterBeamRange to range ] -->
<ProtoInstance name='BeamConeDEF='ForwardVerticalBeamCone'>
<fieldValue name='namevalue='ForwardVerticalBeamCone'/>
<!-- range -1.0..0..1.0m <==> -24V..0..24V -->
<fieldValue name='defaultRangevalue='1'/>
<fieldValue name='beamHeightDegreesvalue='8'/>
<fieldValue name='beamWidthDegreesvalue='8'/>
<fieldValue name='solidvalue='false'/>
<fieldValue name='wireframevalue='true'/>
<fieldValue name='noContactColorvalue='0 .8 .4'/>
<fieldValue name='transparencyvalue='0'/>
<fieldValue name='traceEnabledvalue='false'/>
</ProtoInstance>
</Transform>
</Transform>
<Transform DEF='AFTER_VERTICAL_THRUSTERtranslation='-0.4953 0 0'>
<Shape USE='VERTICAL_THRUSTER_SHAPE'/>
<!-- ROUTE information for AFTER_VERTICAL_BEAMCONE node:  [from THRUSTER_CONES.afterVerticalThrusterBeamTranslation to translation ] -->
<Transform DEF='AFTER_VERTICAL_BEAMCONErotation='0 0 1 1.57079translation='0 .145 0'>
<!-- ROUTE information for AfterVerticalBeamCone node:  [from THRUSTER_CONES.afterVerticalThrusterBeamRange to range ] -->
<ProtoInstance name='BeamConeDEF='AfterVerticalBeamCone'>
<fieldValue name='namevalue='AfterVerticalBeamCone'/>
<!-- range -1.0..0..1.0m <==> -24V..0..24V -->
<fieldValue name='defaultRangevalue='1'/>
<fieldValue name='beamHeightDegreesvalue='8'/>
<fieldValue name='beamWidthDegreesvalue='8'/>
<fieldValue name='solidvalue='false'/>
<fieldValue name='wireframevalue='true'/>
<fieldValue name='noContactColorvalue='0 .8 .4'/>
<fieldValue name='transparencyvalue='0'/>
<fieldValue name='traceEnabledvalue='false'/>
</ProtoInstance>
</Transform>
</Transform>
<Transform DEF='FORWARD_LATERAL_THRUSTERrotation='1 0 0 1.57079translation='.4699 0 0'>
<Shape DEF='LATERAL_THRUSTER_SHAPE'>
<Appearance USE='THRUSTER_APPEARANCE'/>
<Cylinder height='.44radius='.0635side='false'/>
</Shape>
<!-- ROUTE information for FORWARD_LATERAL_BEAMCONE node:  [from THRUSTER_CONES.forwardLateralThrusterBeamTranslation to translation ] -->
<Transform DEF='FORWARD_LATERAL_BEAMCONErotation='0 0 1 1.57079translation='0 .145 0'>
<!-- ROUTE information for ForwardLateralBeamCone node:  [from THRUSTER_CONES.forwardLateralThrusterBeamRange to range ] -->
<ProtoInstance name='BeamConeDEF='ForwardLateralBeamCone'>
<fieldValue name='namevalue='ForwardLateralBeamCone'/>
<!-- range -1.0..0..1.0m <==> -24V..0..24V -->
<fieldValue name='defaultRangevalue='1'/>
<fieldValue name='beamHeightDegreesvalue='8'/>
<fieldValue name='beamWidthDegreesvalue='8'/>
<fieldValue name='solidvalue='false'/>
<fieldValue name='wireframevalue='true'/>
<fieldValue name='noContactColorvalue='0 .8 .4'/>
<fieldValue name='transparencyvalue='0'/>
<fieldValue name='traceEnabledvalue='false'/>
</ProtoInstance>
</Transform>
</Transform>
<Transform DEF='AFTER_LATERAL_THRUSTERrotation='1 0 0 1.57079translation='-0.6223 0 0'>
<Shape USE='LATERAL_THRUSTER_SHAPE'/>
<!-- ROUTE information for AFTER_LATERAL_BEAMCONE node:  [from THRUSTER_CONES.afterLateralThrusterBeamTranslation to translation ] -->
<Transform DEF='AFTER_LATERAL_BEAMCONErotation='0 0 1 1.57079translation='0 .145 0'>
<!-- ROUTE information for AfterLateralBeamCone node:  [from THRUSTER_CONES.afterLateralThrusterBeamRange to range ] -->
<ProtoInstance name='BeamConeDEF='AfterLateralBeamCone'>
<fieldValue name='namevalue='AfterLateralBeamCone'/>
<!-- range -1.0..0..1.0m <==> -24V..0..24V -->
<fieldValue name='defaultRangevalue='1'/>
<fieldValue name='beamHeightDegreesvalue='8'/>
<fieldValue name='beamWidthDegreesvalue='8'/>
<fieldValue name='solidvalue='false'/>
<fieldValue name='wireframevalue='true'/>
<fieldValue name='noContactColorvalue='0 .8 .4'/>
<fieldValue name='transparencyvalue='0'/>
<fieldValue name='traceEnabledvalue='false'/>
</ProtoInstance>
</Transform>
</Transform>
<!-- ROUTE information for THRUSTER_CONES node:  [from forwardVerticalThrusterBeamTranslation to FORWARD_VERTICAL_BEAMCONE.translation ] [from forwardVerticalThrusterBeamRange to ForwardVerticalBeamCone.range ] [from afterVerticalThrusterBeamTranslation to AFTER_VERTICAL_BEAMCONE.translation ] [from afterVerticalThrusterBeamRange to AfterVerticalBeamCone.range ] [from forwardLateralThrusterBeamTranslation to FORWARD_LATERAL_BEAMCONE.translation ] [from forwardLateralThrusterBeamRange to ForwardLateralBeamCone.range ] [from afterLateralThrusterBeamTranslation to AFTER_LATERAL_BEAMCONE.translation ] [from afterLateralThrusterBeamRange to AfterLateralBeamCone.range ] -->
<Script DEF='THRUSTER_CONES'>
<field name='set_forwardVerticalThrustertype='SFFloataccessType='inputOnly'/>
<field name='set_afterVerticalThrustertype='SFFloataccessType='inputOnly'/>
<field name='set_forwardLateralThrustertype='SFFloataccessType='inputOnly'/>
<field name='set_afterLateralThrustertype='SFFloataccessType='inputOnly'/>
<field name='forwardVerticalThrusterBeamTranslationtype='SFVec3faccessType='outputOnly'/>
<field name='forwardVerticalThrusterBeamRangetype='SFFloataccessType='outputOnly'/>
<field name='afterVerticalThrusterBeamTranslationtype='SFVec3faccessType='outputOnly'/>
<field name='afterVerticalThrusterBeamRangetype='SFFloataccessType='outputOnly'/>
<field name='forwardLateralThrusterBeamTranslationtype='SFVec3faccessType='outputOnly'/>
<field name='forwardLateralThrusterBeamRangetype='SFFloataccessType='outputOnly'/>
<field name='afterLateralThrusterBeamTranslationtype='SFVec3faccessType='outputOnly'/>
<field name='afterLateralThrusterBeamRangetype='SFFloataccessType='outputOnly'/>
<IS>
<connect nodeField='set_forwardVerticalThrusterprotoField='set_forwardVerticalThruster'/>
<connect nodeField='set_afterVerticalThrusterprotoField='set_afterVerticalThruster'/>
<connect nodeField='set_forwardLateralThrusterprotoField='set_forwardLateralThruster'/>
<connect nodeField='set_afterLateralThrusterprotoField='set_afterLateralThruster'/>
</IS>
<![CDATA[
                
ecmascript:

function set_forwardVerticalThruster (value, timeStamp) {
   if (value >= 0)
      forwardVerticalThrusterBeamTranslation = new SFVec3f(0, .145, 0);
   else
      forwardVerticalThrusterBeamTranslation = new SFVec3f(0, -0.145 + value, 0);

   forwardVerticalThrusterBeamRange = value;
}

function set_afterVerticalThruster (value, timeStamp) {
   if (value >= 0)
      afterVerticalThrusterBeamTranslation = new SFVec3f(0, .145, 0);
   else
      afterVerticalThrusterBeamTranslation = new SFVec3f(0, -0.145 + value, 0);

   afterVerticalThrusterBeamRange = value;
}

function set_forwardLateralThruster (value, timeStamp) {
   if (value >= 0)
      forwardLateralThrusterBeamTranslation = new SFVec3f(0, .21, 0);
   else
      forwardLateralThrusterBeamTranslation = new SFVec3f(0, -0.21 + value, 0);

   forwardLateralThrusterBeamRange = value;
}

function set_afterLateralThruster (value, timeStamp) {
   if (value >= 0)
      afterLateralThrusterBeamTranslation = new SFVec3f(0, .21, 0);
   else
      afterLateralThrusterBeamTranslation = new SFVec3f(0, -0.21 + value, 0);

   afterLateralThrusterBeamRange = value;
}

              
]]>
</Script>
<Group>
<ROUTE fromNode='THRUSTER_CONESfromField='forwardVerticalThrusterBeamTranslationtoNode='FORWARD_VERTICAL_BEAMCONEtoField='translation'/>
<ROUTE fromNode='THRUSTER_CONESfromField='forwardVerticalThrusterBeamRangetoNode='ForwardVerticalBeamConetoField='range'/>
<ROUTE fromNode='THRUSTER_CONESfromField='afterVerticalThrusterBeamTranslationtoNode='AFTER_VERTICAL_BEAMCONEtoField='translation'/>
<ROUTE fromNode='THRUSTER_CONESfromField='afterVerticalThrusterBeamRangetoNode='AfterVerticalBeamConetoField='range'/>
<ROUTE fromNode='THRUSTER_CONESfromField='forwardLateralThrusterBeamTranslationtoNode='FORWARD_LATERAL_BEAMCONEtoField='translation'/>
<ROUTE fromNode='THRUSTER_CONESfromField='forwardLateralThrusterBeamRangetoNode='ForwardLateralBeamConetoField='range'/>
<ROUTE fromNode='THRUSTER_CONESfromField='afterLateralThrusterBeamTranslationtoNode='AFTER_LATERAL_BEAMCONEtoField='translation'/>
<ROUTE fromNode='THRUSTER_CONESfromField='afterLateralThrusterBeamRangetoNode='AfterLateralBeamConetoField='range'/>
</Group>
<Shape DEF='HULL'>
<Appearance DEF='HULL_APPEARANCE'>
<Material DEF='HullMaterial'>
<IS>
<connect nodeField='diffuseColorprotoField='hullColor'/>
</IS>
</Material>
</Appearance>
<IndexedFaceSet creaseAngle='2.2coordIndex='0 26 34 33 32 31 25 1 -1 1 25 31 32 33 34 26 0 -1 1 25 29 28 2 -1 2 28 29 25 1 -1 2 28 35 36 37 38 27 3 -1 3 27 38 37 36 35 28 2 -1 3 27 30 26 0 -1 0 26 30 27 3 -1 0 4 1 -1 0 1 4 -1 1 5 2 -1 1 2 5 -1 2 6 3 -1 2 3 6 -1 3 7 0 -1 3 0 7 -1 7 0 8 -1 7 8 0 -1 8 0 9 -1 8 9 0 -1 9 0 4 -1 9 4 0 -1 4 1 10 -1 4 10 1 -1 10 1 11 -1 10 11 1 -1 11 1 5 -1 11 5 1 -1 5 2 12 -1 5 12 2 -1 12 2 13 -1 12 13 2 -1 13 2 6 -1 13 6 2 -1 6 3 14 -1 6 14 3 -1 14 3 15 -1 14 15 3 -1 15 3 7 -1 15 7 3 -1 4 10 16 -1 10 4 16 -1 10 11 16 -1 11 10 16 -1 11 5 17 -1 5 11 17 -1 5 12 18 -1 12 5 18 -1 12 13 19 -1 13 12 19 -1 13 6 19 -1 6 13 19 -1 6 14 20 -1 14 6 20 -1 14 15 20 -1 15 14 20 -1 15 7 21 -1 7 15 21 -1 7 8 22 -1 8 7 22 -1 8 9 23 -1 9 8 23 -1 9 4 23 -1 4 9 23 -1 4 16 23 -1 16 4 23 -1 11 17 16 -1 17 11 16 -1 5 18 17 -1 18 5 17 -1 12 19 18 -1 19 12 18 -1 6 20 19 -1 20 6 19 -1 20 15 21 -1 15 20 21 -1 21 7 22 -1 7 21 22 -1 22 8 23 -1 8 22 23 -1 23 16 24 -1 16 23 24 -1 16 17 24 -1 17 16 24 -1 17 18 24 -1 18 17 24 -1 18 19 24 -1 19 18 24 -1 19 20 24 -1 20 19 24 -1 20 21 24 -1 21 20 24 -1 21 22 24 -1 22 21 24 -1 22 23 24 -1 23 22 24 -1 25 26 30 29 -1 29 30 26 25 -1 27 28 29 30 -1 30 29 28 27 -1 31 32 36 35 -1 35 36 32 31 -1 32 33 37 36 -1 36 37 33 32 -1 34 38 37 33 -1 33 37 38 34 -1'>
<!-- Bow Cowling [0..24], Stern Cowling [25..30], Rudder Post [31..38] -->
<Coordinate point='.6985 .13335 -0.20955 .6985 .13335 .20955 .6985 -0.13335 .20955 .6985 -0.13335 -0.20955 1.05 .085 0 1.05 0 .1143 1.05 -0.085 0 1.05 0 -0.1143 1.05 .04572 -0.098985 1.05 .079188 -0.05715 1.05 .079188 .05715 1.05 .04572 .098985 1.05 -0.04572 .098985 1.05 -0.079188 .05715 1.05 -0.079188 -0.05715 1.05 -0.04572 -0.098985 1.1 .04064 .02032 1.1 .02032 .06096 1.1 -0.02032 .06096 1.1 -0.04064 .02032 1.1 -0.04064 -0.02032 1.1 -0.02032 -0.06096 1.1 .02032 -0.06096 1.1 .04064 -0.02032 1.11 0 0 -0.6985 .13335 .20955 -0.6985 .13335 -0.20955 -0.6985 -0.13335 -0.20955 -0.6985 -0.13335 .20955 -1.1303 0 .20955 -1.1303 0 -0.20955 -0.6985 .13335 .0635 -0.8509 .13335 .0635 -0.8509 .13335 -0.0635 -0.6985 .13335 -0.0635 -0.6985 -0.13335 .0635 -0.8509 -0.13335 .0635 -0.8509 -0.13335 -0.0635 -0.6985 -0.13335 -0.0635'/>
</IndexedFaceSet>
</Shape>
<!-- original translation -1.1557 0 .09525 -->
<Transform DEF='STARTBOARD_SCREW_BEAMCONE_AND_SHAFTtranslation='-1.3 0 .3'>
<Transform DEF='STARTBOARD_THRUSTER_BODYrotation='0 0 1 1.57translation='.15 0 0'>
<Shape>
<Appearance DEF='THRUSTER_BODY_APPEARANCE'>
<Material diffuseColor='.9 .9 .9'/>
</Appearance>
<Cylinder height='.16radius='.08'/>
</Shape>
<Shape>
<Appearance DEF='THRUSTER_INNERBODY_APPEARANCE'>
<Material diffuseColor='.2 .2 .2'/>
</Appearance>
<Cylinder height='.22radius='.06'/>
</Shape>
</Transform>
<Transform DEF='STARBOARD_THRUSTER_BRACKETrotation='0 0 1 1.57translation='.2 0 -0.05'>
<Shape>
<Appearance>
<Material diffuseColor='.9 .9 .9'/>
</Appearance>
<Box size='.02 .05 .2'/>
</Shape>
</Transform>
<Transform DEF='STARBOARD_SCREW_BEAMCONErotation='0 1 0 3.14'>
<ProtoInstance name='BeamConeDEF='StarboardScrewBeamCone'>
<fieldValue name='namevalue='StarboardScrewBeamCone'/>
<!-- range values -1..0..1m <==> -700..0..700 RPM -->
<fieldValue name='defaultRangevalue='1'/>
<fieldValue name='beamHeightDegreesvalue='8'/>
<fieldValue name='beamWidthDegreesvalue='8'/>
<fieldValue name='solidvalue='false'/>
<fieldValue name='wireframevalue='true'/>
<fieldValue name='noContactColorvalue='0 .8 .4'/>
<fieldValue name='transparencyvalue='0'/>
<fieldValue name='traceEnabledvalue='false'/>
<IS>
<connect nodeField='rangeprotoField='set_stbdRpm'/>
</IS>
</ProtoInstance>
</Transform>
<Group DEF='SHAFT'>
<Transform rotation='0 0 1 1.57079translation='.0281 0 0'>
<Shape DEF='SCREW_SHAFT'>
<Appearance DEF='SCREW_APPEARANCE'>
<Material diffuseColor='.226 .197 0'/>
</Appearance>
<Cylinder bottom='falseheight='.0762radius='.008top='false'/>
</Shape>
</Transform>
<Transform rotation='0 0 1 1.57079translation='-0.015 0 0'>
<Shape DEF='SHAFT_END_CAP'>
<Appearance USE='SCREW_APPEARANCE'/>
<Cone bottom='falsebottomRadius='.008height='.01'/>
</Shape>
</Transform>
</Group>
</Transform>
<!-- original translation -1.1557 0 .09525 -->
<Transform DEF='STARBOARD_SCREWtranslation='-1.3 0 .3'>
<Transform DEF='STARBOARD_BLADE'>
<Transform rotation='0 1 0 -0.39'>
<Shape>
<Appearance USE='SCREW_APPEARANCE'/>
<IndexedFaceSet coordIndex='0 1 2 3 4 5 6 7 -1 0 7 6 5 4 3 2 1 -1'>
<Coordinate DEF='BLADE_COORDINATESpoint='0 0 -0.00508 0 .02540 -0.02032 0 .04572 -0.01524 0 .05080 -0.00508 0 .05080 .00508 0 .04572 .01524 0 .02540 .02032 0 0 .00508'/>
</IndexedFaceSet>
</Shape>
</Transform>
</Transform>
<Transform rotation='1 0 0 1.57079'>
<Transform USE='STARBOARD_BLADE'/>
</Transform>
<Transform rotation='1 0 0 3.14159267'>
<Transform USE='STARBOARD_BLADE'/>
</Transform>
<Transform rotation='1 0 0 -1.57079'>
<Transform USE='STARBOARD_BLADE'/>
</Transform>
</Transform>
<!-- original translation -1.1557 0 -0.09525 -->
<Transform DEF='PORT_SCREW_BEAMCONE_AND_SHAFTtranslation='-1.3 0 -0.3'>
<Transform DEF='PORT_THRUSTER_BODYrotation='0 0 1 1.57translation='.15 0 0'>
<Shape>
<Appearance USE='THRUSTER_BODY_APPEARANCE'/>
<Cylinder height='.16radius='.08'/>
</Shape>
<Shape>
<Appearance USE='THRUSTER_INNERBODY_APPEARANCE'/>
<Cylinder height='.22radius='.05'/>
</Shape>
</Transform>
<Transform DEF='PORT_THRUSTER_BRACKETrotation='0 0 1 1.57translation='.2 0 .05'>
<Shape>
<Appearance>
<Material diffuseColor='.9 .9 .9'/>
</Appearance>
<Box size='.02 .05 .2'/>
</Shape>
</Transform>
<Transform DEF='PORT_SCREW_BEAMCONErotation='0 1 0 3.14'>
<ProtoInstance name='BeamConeDEF='PortScrewBeamCone'>
<fieldValue name='namevalue='PortScrewBeamCone'/>
<!-- range values -1..0..1 m <==> -700..0..700 RPM -->
<fieldValue name='defaultRangevalue='1'/>
<fieldValue name='beamHeightDegreesvalue='8'/>
<fieldValue name='beamWidthDegreesvalue='8'/>
<fieldValue name='solidvalue='false'/>
<fieldValue name='wireframevalue='true'/>
<!-- Greenish blue for sea water flow -->
<fieldValue name='noContactColorvalue='0 .8 .4'/>
<fieldValue name='transparencyvalue='0'/>
<fieldValue name='traceEnabledvalue='false'/>
<IS>
<connect nodeField='rangeprotoField='set_portRpm'/>
</IS>
</ProtoInstance>
</Transform>
<Group USE='SHAFT'/>
</Transform>
<!-- original translation -1.1557 0 -0.09525 -->
<Transform DEF='PORT_SCREWtranslation='-1.3 0 -0.3'>
<Group DEF='PORT_BLADE'>
<Transform rotation='0 1 0 .39'>
<Shape>
<Appearance USE='SCREW_APPEARANCE'/>
<IndexedFaceSet coordIndex='0 1 2 3 4 5 6 7 -1 0 7 6 5 4 3 2 1 -1'>
<!-- This blade has reversed pitch -->
<Coordinate USE='BLADE_COORDINATES'/>
</IndexedFaceSet>
</Shape>
</Transform>
</Group>
<Transform rotation='1 0 0 1.57079'>
<Group USE='PORT_BLADE'/>
</Transform>
<Transform rotation='1 0 0 3.14159267'>
<Group USE='PORT_BLADE'/>
</Transform>
<Transform rotation='1 0 0 -1.57079'>
<Group USE='PORT_BLADE'/>
</Transform>
</Transform>
</Transform>
<Shape>
<!-- Medium-resolution LOD level -->
<Appearance USE='HULL_APPEARANCE'/>
<!-- size is full length, height, width -->
<Box size='2.2 .26 .42'/>
</Shape>
</LOD>
<Group>
<Viewpoint DEF='HULLNAME_VIEWPOINTdescription='Aries Prototypeposition='0 0 4'>
<IS>
<connect nodeField='descriptionprotoField='hullName'/>
</IS>
</Viewpoint>
<Viewpoint description='Port Boworientation='0 1 0 2.356position='8 0 -8'/>
<Viewpoint description='Boworientation='0 1 0 1.572position='10 0 0'/>
<Viewpoint description='Starboard Boworientation='0 1 0 0.785position='8 0 8'/>
<Viewpoint description='Port Beamorientation='0 1 0 3.14159267position='0 0 -10'/>
<Viewpoint description='Port Asternorientation='0 1 0 3.926position='-8 0 -8'/>
<Viewpoint description='Asternorientation='0 1 0 -1.4position='-10 0 0'/>
<Viewpoint description='Starboard Asternorientation='0 1 0 -0.783position='-10 0 10'/>
<Viewpoint description='Looking down from 25m above Ariesorientation='1 0 0 -1.57position='0 25 0'/>
</Group>
</Transform>
</ProtoBody>
</ProtoDeclare>
<Viewpoint description='Aries AUV'/>
<Group>
<ProtoInstance name='Aries'>
<fieldValue name='translationvalue='0 0.4 0'/>
</ProtoInstance>
</Group>
<!-- Viewable geometry is anchored text that links to an example that showing the usage of AriesPrototype -->
<Anchor description='AriesExampleparameter='"target=_blank"'
  url=' "AriesExample.x3d" "https://savage.nps.edu/Savage/Robots/UnmannedUnderwaterVehicles/AriesExample.x3d" "AriesExample.wrl" "https://savage.nps.edu/Savage/Robots/UnmannedUnderwaterVehicles/AriesExample.wrl" '>
<Shape>
<Appearance>
<Material diffuseColor='0 1 1emissiveColor='0 1 1'/>
</Appearance>
<Text string='"AriesPrototype" "is a prototype definition file" "" "click on text to view" "AriesExample"'>
<FontStyle justify='"MIDDLE" "MIDDLE"'/>
</Text>
</Shape>
</Anchor>
</Scene>
</X3D>
<!--

Index for ExternProtoDeclare definition : BeamCone

Index for ProtoDeclare definition : Aries

Index for DEF nodes : AFTER_LATERAL_BEAMCONE, AFTER_LATERAL_THRUSTER, AFTER_PLANES, AFTER_RUDDERS, AFTER_VERTICAL_BEAMCONE, AFTER_VERTICAL_THRUSTER, AfterLateralBeamCone, AfterVerticalBeamCone, AriesTransform, BLADE_COORDINATES, FORWARD_LATERAL_BEAMCONE, FORWARD_LATERAL_THRUSTER, FORWARD_PLANES, FORWARD_RUDDERS, FORWARD_VERTICAL_BEAMCONE, FORWARD_VERTICAL_THRUSTER, ForwardLateralBeamCone, ForwardVerticalBeamCone, HULL, HULL_APPEARANCE, HullMaterial, HULLNAME_VIEWPOINT, LATERAL_THRUSTER_SHAPE, PLANE_SHAPE, PLANE_SURFACES, PlaneMaterial, PORT_BLADE, PORT_SCREW, PORT_SCREW_BEAMCONE, PORT_SCREW_BEAMCONE_AND_SHAFT, PORT_THRUSTER_BODY, PORT_THRUSTER_BRACKET, PortScrewBeamCone, PRIMARY_AUV_GEOMETRY, SCREW_APPEARANCE, SCREW_SHAFT, SHAFT, SHAFT_END_CAP, SONAR_STEERING_AND_DETECTS, ST1000, ST1000BeamCone, ST725, ST725BeamCone, STARBOARD_BLADE, STARBOARD_SCREW, STARBOARD_SCREW_BEAMCONE, STARBOARD_THRUSTER_BRACKET, StarboardScrewBeamCone, STARTBOARD_SCREW_BEAMCONE_AND_SHAFT, STARTBOARD_THRUSTER_BODY, THRUSTER_APPEARANCE, THRUSTER_BODY_APPEARANCE, THRUSTER_CONES, THRUSTER_INNERBODY_APPEARANCE, VERTICAL_THRUSTER_SHAPE

Index for Viewpoint images : Viewpoint_1, Viewpoint_2, Viewpoint_3, Viewpoint_4, Viewpoint_5, Viewpoint_6, Viewpoint_7, Viewpoint_8, Viewpoint_9, HULLNAME_VIEWPOINT
-->

<!-- Color key: <X3dNode DEF='idName' field='value'/> matches <XmlElement DEF='idName' attribute='value'/>
(Light blue background: behavior node) (Grey background: inserted documentation) (Magenta background: X3D Extensibility)
    <Prototype name='ProtoName'> <field name='fieldName'/> </Prototype> -->

<!-- Additional help information about X3D scenes: X3D Resources, X3D Scene Authoring Hints and X3D Tooltips -->