/* File: TelemetryPlayback.java Compiler: jdk1.3 */ package demo.auv; import java.io.*; import java.text.DecimalFormat; import java.util.*; /** * Generates VRML scenes which visualize and play back AUV mission telemetry files. *

* *

Invocation: *
mv -f mission.output.telemetry.wrl mission.output.telemetry.wrl.bak * java demo.auv.TelemetryPlayback mission.output.telemetry >> mission.output.telemetry.wrl * vorlon mission.output.telemetry.wrl -url *

*

java demo.auv.TelemetryPlayback d1103_01.d *

* *@version 1.0 *

* *@author Don Brutzman (web.nps.navy.mil/~brutzman) *brutzman@nps.navy.mil *

* *

Source Code: *
TelemetryPlayback.java *

* *

History: * * * * * * * * * * * * *
1 December 98 * Don Brutzman * Initial version *
17 January 99 * Don Brutzman * Added URLs and autogenerated invocation *
21 January 99, 21 March 99, 15 May 1999 * Don Brutzman * Change package and directory names *
9 May 2000 * Don Brutzman * Fixed file-read exception handling *
16 August 2000 * Don Brutzman * Calendar month off-by-one bug workaround *
*

* *@see TelemetryState */ public class TelemetryPlayback { // no more than 1m between position interpolations static final float maxKeyValueDistance = 0.1f; // 0 will print all values // no more than 10 degrees = .1745 radians between orientation interpolations static final float maxKeyValueOrientation = 10.0f; // ?? verify telemetry units static final float maxDeltaRpm = 10.0f; static final float maxDeltaRudderPlane = 1.0f; // degrees static final float maxDeltaSonarBearing = 1.0f; // degrees static final float maxDeltaSonarRange = 0.1f; // m static final float maxDeltaThruster = 1.0f; // +/- 24 volts full force static DecimalFormat precision = new DecimalFormat ("##.00"); static DecimalFormat precision5 = new DecimalFormat ("##.00000"); static File telemetryFile; static String telemetryFileName; static Calendar telemetryFileCalendar = new GregorianCalendar ();; static BufferedReader telemetryStream; static Date fileDate = new Date (); static String nextLine; static String telemetryLine; static TelemetryState priorTelemetry = new TelemetryState (); static TelemetryState priorOrientationTelemetry = new TelemetryState (); static TelemetryState priorPortRpmTelemetry = new TelemetryState (); static TelemetryState priorStbdRpmTelemetry = new TelemetryState (); static TelemetryState priorForwardRuddersTelemetry = new TelemetryState (); static TelemetryState priorAfterRuddersTelemetry = new TelemetryState (); static TelemetryState priorForwardPlanesTelemetry = new TelemetryState (); static TelemetryState priorAfterPlanesTelemetry = new TelemetryState (); static TelemetryState priorST725BearingTelemetry = new TelemetryState (); static TelemetryState priorST725RangeTelemetry = new TelemetryState (); static TelemetryState priorST1000BearingTelemetry = new TelemetryState (); static TelemetryState priorST1000RangeTelemetry = new TelemetryState (); static TelemetryState priorForwardVerticalThrusterTelemetry = new TelemetryState (); static TelemetryState priorAfterVerticalThrusterTelemetry = new TelemetryState (); static TelemetryState priorForwardLateralThrusterTelemetry = new TelemetryState (); static TelemetryState priorAfterLateralThrusterTelemetry = new TelemetryState (); static TelemetryState currentTelemetry = new TelemetryState (); static float startTime, finishTime, duration, dt; /** * VRML interpolators (key & keyValue arrays) */ static StringBuffer positionKey, positionKeyValue, orientationKey, orientationKeyValue, portRpmKey, portRpmKeyValue, stbdRpmKey, stbdRpmKeyValue, forwardRuddersKey, forwardRuddersKeyValue, afterRuddersKey, afterRuddersKeyValue, forwardPlanesKey, forwardPlanesKeyValue, afterPlanesKey, afterPlanesKeyValue, ST725BearingKey, ST725BearingKeyValue, ST725RangeKey, ST725RangeKeyValue, ST1000BearingKey, ST1000BearingKeyValue, ST1000RangeKey, ST1000RangeKeyValue, forwardVerticalThrusterKey, forwardVerticalThrusterKeyValue, afterVerticalThrusterKey, afterVerticalThrusterKeyValue, forwardLateralThrusterKey, forwardLateralThrusterKeyValue, afterLateralThrusterKey, afterLateralThrusterKeyValue; static boolean printEXTERNPROTO = false; static BufferedReader PROTOFile; static boolean DEBUG = false; public static void debug (String message) { if (DEBUG) System.out.println ("# " + message); } public static void trace (String message) { System.out.println ("# " + message); } public static float radians (float x) { return x * 3.141592653f / 180.0f; } /** * Verify telemetry file existence and then open for reading */ public static void TelemetryFileOpen () { telemetryFile = new File (telemetryFileName); if (telemetryFile.exists() && telemetryFile.isFile()) { debug ("Telemetry file found: " + telemetryFile.getAbsolutePath()); // (absolute path includes telemetryFileName) } else { trace (telemetryFileName + ": not found or not a file."); System.exit (1); } // Open the file try { telemetryStream = new BufferedReader (new InputStreamReader ( new FileInputStream ( telemetryFileName ))); // beware stream classes with deprecated String methods! // telemetryStream = new DataInputStream ( // new FileInputStream ( telemetryFileName ) ); } catch ( IOException e ) { trace ( "telemetry file not opened properly:\n" + e.toString() ); System.exit( 1 ); } fileDate.setTime (telemetryFile.lastModified()); telemetryFileCalendar.setTime (fileDate); return; } /** * Verify telemetry file existence and then open for reading */ public static void TelemetryFileClose () { if (telemetryFile != null) try { telemetryStream.close (); } catch ( Exception e ) { trace ( "Error during stream close: " + e.toString() ); } else trace ( "Error during TelemetryFileClose() : no file"); return; } /** * Read a telemetry state vector from the telemetry file */ public static String readNextTelemetryState () { try { do // ignore comments and blank lines { nextLine = new String (telemetryStream.readLine ()); debug (nextLine); } while ((nextLine.equals("") == true) || // blank line found, loop again (nextLine.charAt(0) == '#')); // comment line found, loop again return nextLine; } catch ( NullPointerException npe ) { debug ( "NullPointerException " + npe.toString() ); TelemetryFileClose (); } catch ( EOFException eof ) { debug ( "EOFException " + eof.toString() ); TelemetryFileClose (); } catch ( IOException e ) { // trace ( "Error during read from file\n" + e.toString() ); System.exit( 1 ); } return ""; } /** * Build VRML file headers, print to screen */ public static void GenerateVrmlSceneHeaders () { Calendar calendar = new GregorianCalendar (); // Date deprecated in JDK 1.2 System.out.println ("#VRML V2.0 utf8"); System.out.println ("#"); System.out.println ("# Summary: Autogenerated AUV mission from telemetry data file"); System.out.println ("# \'" + telemetryFileName + "\' dated " + (new Integer(telemetryFileCalendar.get(Calendar.MONTH) + 1)).toString() + "/" + telemetryFileCalendar.get(Calendar.DATE) + "/" + telemetryFileCalendar.get(Calendar.YEAR)); System.out.println ("#"); System.out.println ("# Purpose: Playback results of an AUV mission using standalone VRML files"); System.out.println ("#"); System.out.println ("# Author: Don Brutzman"); System.out.println ("#"); System.out.println ("# Generated: " + // off by one error? use DateFormat? (new Integer(calendar.get(Calendar.MONTH) + 1)).toString() + "/" + calendar.get(Calendar.DATE) + "/" + calendar.get(Calendar.YEAR)); System.out.println ("#"); System.out.println ("# Related: TelemetryPlayback.java, TelemetryState.java, AuvFestExerciseSite.wrl"); System.out.println ("# PhoenixPROTO.wrl, BeamConePrototype.wrl, BeamConeEXAMPLE.wrl, MineTargetRig.wrl"); System.out.println ("# Surface_GulfOfMexico_AuvDiveSite.wrl, Bottom_GulfOfMexico_AuvDiveSite.wrl"); System.out.println ("#"); System.out.println ("# Created by: demo.auv.TelemetryPlayback.java"); System.out.println ("#"); System.out.println ("# URL: http://web.nps.navy.mil/~brutzman/vrtp/demo/auv/TelemetryPlayback.java"); System.out.println ("# http://www.web3D.org/WorkingGroups/vrtp/demo/auv/TelemetryPlayback.java"); System.out.println ("#"); System.out.println ("# Invocation: c:\\vrtp\\demo\\auv> java demo.auv.TelemetryPlayback " + telemetryFileName); System.out.println ("#"); System.out.println (); // PhoenixPROTO try { PROTOFile = new BufferedReader (new InputStreamReader (new FileInputStream ("PhoenixPROTO.wrl"))); debug ( "... PROTOFile open"); } catch (IOException e) { trace ("PhoenixPROTO.wrl file not opened properly: " + e); trace ("... printing PhoenixPROTO's EXTERNPROTO instead\n"); printEXTERNPROTO = true; } try { if (PROTOFile.ready() == false) printEXTERNPROTO = true; while (PROTOFile.ready()) // print the PhoenixPROTO file, line by line { nextLine = new String (PROTOFile.readLine ()); if (nextLine == null) break; System.out.println (nextLine); } PROTOFile.close (); } catch ( NullPointerException e ) { debug ( "reached end of file " + e.toString() ); telemetryLine = ""; } catch ( Exception e ) { debug ( "Error during PROTOFile read/close: " + e.toString() ); telemetryLine = ""; } if (printEXTERNPROTO) { System.out.println ("EXTERNPROTO Phoenix ["); System.out.println (" eventIn SFVec3f translation"); System.out.println (" eventIn SFRotation rotation"); System.out.println (" eventIn SFFloat portRpm"); System.out.println (" eventIn SFFloat stbdRpm"); System.out.println (" eventIn SFFloat forwardRudders"); System.out.println (" eventIn SFFloat afterRudders"); System.out.println (" eventIn SFFloat forwardPlanes"); System.out.println (" eventIn SFFloat afterPlanes"); System.out.println (" eventIn SFFloat forwardVerticalThruster"); System.out.println (" eventIn SFFloat afterVerticalThruster"); System.out.println (" eventIn SFFloat forwardLateralThruster"); System.out.println (" eventIn SFFloat afterLateralThruster"); System.out.println (" eventIn SFFloat ST725Bearing"); System.out.println (" eventIn SFFloat ST1000Bearing"); System.out.println (" eventIn SFFloat ST725Range"); System.out.println (" eventIn SFFloat ST1000Range"); System.out.println (" eventIn SFFloat ST725Intensity"); System.out.println (" eventIn SFFloat ST1000Intensity"); System.out.println (" field SFColor hullColor"); System.out.println (" field SFString hullName"); System.out.println ("] [ \"PhoenixPROTO.wrl#Phoenix\""); System.out.println (" \"file:///C|/vrtp/demo/auv/PhoenixPROTO.wrl#Phoenix # default PC installation\""); System.out.println (" \"file:///D|/vrtp/demo/auv/PhoenixPROTO.wrl#Phoenix # alternate PC installation\""); System.out.println (" \"http://web.nps.navy.mil/~brutzman/vrtp/demo/auv/PhoenixPROTO.wrl#Phoenix\""); System.out.println (" \"http://www.web3D.org/WorkingGroups/vrtp/demo/auv/PhoenixPROTO.wrl#Phoenix\""); System.out.println (" ]\n"); } System.out.println ("Group {"); System.out.println (" children [\n"); System.out.println (" Transform {"); System.out.println (" translation 0 1200 0 # high above center"); System.out.println (" rotation 1 0 0 -1.57 # redirect view angle from -z axis to -y axis"); System.out.println (" children ["); System.out.println (" Viewpoint {"); System.out.println (" description \"ONR AUV site - Gulf of Mexico\""); System.out.println (" orientation 0 0 1 -1.57 # north at top of screen"); System.out.println (" }"); System.out.println (" ]"); System.out.println (" }"); System.out.println (" Inline {\n"); System.out.println (" url [ \"AuvFestExerciseSite.wrl\"\n"); System.out.println (" \"file:///C|/vrtp/demo/auv/AuvFestExerciseSite.wrl\" # default PC installation\n"); System.out.println (" \"file:///D|/vrtp/demo/auv/AuvFestExerciseSite.wrl\" # alternate PC installation\n"); System.out.println (" \"http://web.nps.navy.mil/~brutzman/vrtp/demo/auv/AuvFestExerciseSite.wrl\"\n"); System.out.println (" \"http://www.web3D.org/WorkingGroups/vrtp/demo/auv/AuvFestExerciseSite.wrl\""); System.out.println (" ]\n"); System.out.println (" }\n\n"); System.out.println (" # duplicate AuvFestExerciseSite.wrl navigation modes " + "since only topmost vrml scene sees it"); System.out.println (" NavigationInfo {"); System.out.println (" type [\"EXAMINE\" \"ANY\"]"); System.out.println (" speed 20 # m/sec for FLY | WALK"); System.out.println (" visibilityLimit 20000 # reduce aliasing by increasing relative precision"); System.out.println (" }"); System.out.println (" WorldInfo {"); System.out.println (" title \"AUV exercise in Gulf of Mexico 1998\""); System.out.println (" }"); System.out.println (" Background {"); System.out.println (" skyColor [ 1 1 .5, .4 .4 .6, .4 .4 .6, .5 .5 .75, .6 .6 .8, .8 .8 .8 ]"); System.out.println (" skyAngle [ .05 1.4 1.55 1.56 1.57]"); System.out.println (" groundColor [ .05 .1 .2, .05 .1 .2 ]"); System.out.println (" groundAngle [ 1.57 ]"); System.out.println (" }"); System.out.println (""); System.out.println (" DEF PHOENIX Phoenix { }\n\n"); return; } /** * Build VRML interpolators, print to screen. */ public static void GenerateVrmlInterpolators () { // reset the file to beginning // (BufferedReader mark & reset methods not used due to buffer limitations) TelemetryFileClose (); TelemetryFileOpen (); debug ("TelemetryFile closed and reopened at beginning"); telemetryLine = readNextTelemetryState (); priorTelemetry.update (telemetryLine); startTime = priorTelemetry.get_t (); debug ("startTime = " + startTime + " (all units in seconds)"); try { while (telemetryStream.ready()) // read to end of file { telemetryLine = readNextTelemetryState (); if (telemetryLine != "") currentTelemetry.update (telemetryLine); } } catch ( NullPointerException e ) { debug ( "reached end of file " + e.toString() ); telemetryLine = ""; } catch ( Exception e ) { debug ( "reached end of file " + e.toString() ); telemetryLine = ""; } finishTime = currentTelemetry.get_t (); duration= finishTime - startTime; debug ("finishTime = " + finishTime); debug ("duration = " + duration); // reset the file to beginning TelemetryFileClose (); TelemetryFileOpen (); debug ("TelemetryFile closed and reopened at beginning"); // put first record in various interpolator priorTelemetry variables, // update prior**Telemetry when corresponding key=keyValue pairs are saved telemetryLine = readNextTelemetryState (); priorTelemetry.update (telemetryLine); priorOrientationTelemetry.update (priorTelemetry); priorStbdRpmTelemetry.update (priorTelemetry); priorPortRpmTelemetry.update (priorTelemetry); priorForwardRuddersTelemetry.update (priorTelemetry); priorAfterRuddersTelemetry.update (priorTelemetry); priorForwardPlanesTelemetry.update (priorTelemetry); priorAfterPlanesTelemetry.update (priorTelemetry); priorST725BearingTelemetry.update (priorTelemetry); priorST725RangeTelemetry.update (priorTelemetry); priorST1000BearingTelemetry.update (priorTelemetry); priorST1000RangeTelemetry.update (priorTelemetry); priorForwardVerticalThrusterTelemetry.update (priorTelemetry); priorAfterVerticalThrusterTelemetry.update (priorTelemetry); priorForwardLateralThrusterTelemetry.update (priorTelemetry); priorAfterLateralThrusterTelemetry.update (priorTelemetry); // initialize key/keyValue String pairs - - - - - - - - - - - - - - - - - - - - - positionKey = new StringBuffer (" DEF TELEMETRY_POSITION " + "PositionInterpolator {\n key [ "); positionKeyValue = new StringBuffer ("\n keyValue [ "); orientationKey = new StringBuffer (" DEF TELEMETRY_ORIENTATION " + "OrientationInterpolator {\n key [ "); orientationKeyValue = new StringBuffer ("\n keyValue [ "); portRpmKey = new StringBuffer (" DEF PORT_RPM " + "ScalarInterpolator {\n key [ "); portRpmKeyValue = new StringBuffer ("\n keyValue [ "); stbdRpmKey = new StringBuffer (" DEF STBD_RPM " + "ScalarInterpolator {\n key [ "); stbdRpmKeyValue = new StringBuffer ("\n keyValue [ "); forwardRuddersKey = new StringBuffer (" DEF FORWARD_RUDDERS " + "ScalarInterpolator {\n key [ "); forwardRuddersKeyValue = new StringBuffer ("\n keyValue [ "); afterRuddersKey = new StringBuffer (" DEF AFTER_RUDDERS " + "ScalarInterpolator {\n key [ "); afterRuddersKeyValue = new StringBuffer ("\n keyValue [ "); forwardPlanesKey = new StringBuffer (" DEF FORWARD_PLANES " + "ScalarInterpolator {\n key [ "); forwardPlanesKeyValue = new StringBuffer ("\n keyValue [ "); afterPlanesKey = new StringBuffer (" DEF AFTER_PLANES " + "ScalarInterpolator {\n key [ "); afterPlanesKeyValue = new StringBuffer ("\n keyValue [ "); ST725BearingKey = new StringBuffer (" DEF ST725BEARING " + "ScalarInterpolator {\n key [ "); ST725BearingKeyValue = new StringBuffer ("\n keyValue [ "); ST725RangeKey = new StringBuffer (" DEF ST725RANGE " + "ScalarInterpolator {\n key [ "); ST725RangeKeyValue = new StringBuffer ("\n keyValue [ "); ST1000BearingKey = new StringBuffer (" DEF ST1000BEARING " + "ScalarInterpolator {\n key [ "); ST1000BearingKeyValue = new StringBuffer ("\n keyValue [ "); ST1000RangeKey = new StringBuffer (" DEF ST1000RANGE " + "ScalarInterpolator {\n key [ "); ST1000RangeKeyValue = new StringBuffer ("\n keyValue [ "); forwardVerticalThrusterKey = new StringBuffer (" DEF FORWARD_VERTICAL_THRUSTER " + "ScalarInterpolator {\n key [ "); forwardVerticalThrusterKeyValue = new StringBuffer ("\n keyValue [ "); afterVerticalThrusterKey = new StringBuffer (" DEF AFTER_VERTICAL_THRUSTER " + "ScalarInterpolator {\n key [ "); afterVerticalThrusterKeyValue = new StringBuffer ("\n keyValue [ "); forwardLateralThrusterKey = new StringBuffer (" DEF FORWARD_LATERAL_THRUSTER " + "ScalarInterpolator {\n key [ "); forwardLateralThrusterKeyValue = new StringBuffer ("\n keyValue [ "); afterLateralThrusterKey = new StringBuffer (" DEF AFTER_LATERAL_THRUSTER " + "ScalarInterpolator {\n key [ "); afterLateralThrusterKeyValue = new StringBuffer ("\n keyValue [ "); // initial key time is always zero - - - - - - - - - - - - - - - - - - - - - - - - - - positionKey.append ("\n 0 "); positionKeyValue.append ("\n " + precision.format ( priorTelemetry.get_x ()) + " " + precision.format (-priorTelemetry.get_z ()) + " " + precision.format ( priorTelemetry.get_y ())); orientationKey.append ("\n 0 "); orientationKeyValue.append // currently only yaw implemented ("\n 0 1 0 " + precision5.format (priorOrientationTelemetry.get_psi ())); portRpmKey.append ("\n 0 "); portRpmKeyValue.append ("\n " + precision.format (priorPortRpmTelemetry.get_port_rpm () / 700.0f)); stbdRpmKey.append ("\n 0 "); stbdRpmKeyValue.append ("\n " + precision.format (priorStbdRpmTelemetry.get_stbd_rpm () / 700.0f)); forwardRuddersKey.append ("\n 0 "); forwardRuddersKeyValue.append ("\n " + precision5.format (priorForwardRuddersTelemetry.get_delta_rudder () * 3.141592653f / 180.0f)); afterRuddersKey.append ("\n 0 "); afterRuddersKeyValue.append ("\n " + precision5.format (priorAfterRuddersTelemetry.get_delta_rudder () * -3.141592653f / 180.0f)); forwardPlanesKey.append ("\n 0 "); forwardPlanesKeyValue.append ("\n " + precision5.format (priorForwardPlanesTelemetry.get_delta_planes_bow () * -3.141592653f / 180.0f)); afterPlanesKey.append ("\n 0 "); afterPlanesKeyValue.append ("\n " + precision5.format (priorAfterPlanesTelemetry.get_delta_planes_stern () * 3.141592653f / 180.0f)); ST725BearingKey.append ("\n 0 "); ST725BearingKeyValue.append ("\n " + precision5.format (priorTelemetry.get_AUV_ST725_bearing () * 3.141592653f / 180.0f)); ST725RangeKey.append ("\n 0 "); ST725RangeKeyValue.append ("\n " + precision5.format (priorTelemetry.get_AUV_ST725_range ())); ST1000BearingKey.append ("\n 0 "); ST1000BearingKeyValue.append ("\n " + precision5.format (priorTelemetry.get_AUV_ST1000_bearing () * 3.141592653f / 180.0f)); ST1000RangeKey.append ("\n 0 "); ST1000RangeKeyValue.append ("\n " + precision5.format (priorTelemetry.get_AUV_ST1000_range ())); forwardVerticalThrusterKey.append ("\n 0 "); forwardVerticalThrusterKeyValue.append ("\n " + precision.format (priorTelemetry.get_AUV_bow_vertical () * .5f / 24.0f)); afterVerticalThrusterKey.append ("\n 0 "); afterVerticalThrusterKeyValue.append ("\n " + precision.format (priorTelemetry.get_AUV_stern_vertical () * .5f / 24.0f)); forwardLateralThrusterKey.append ("\n 0 "); forwardLateralThrusterKeyValue.append ("\n " + precision.format (priorTelemetry.get_AUV_bow_lateral () * .5f / 24.0f)); afterLateralThrusterKey.append ("\n 0 "); afterLateralThrusterKeyValue.append ("\n " + precision.format (priorTelemetry.get_AUV_stern_lateral () * .5f / 24.0f)); // move to next entry - - - - - - - - - - - - - - - - - - - - - - - - - - telemetryLine = readNextTelemetryState (); int positionKeyCount = 0; int orientationKeyCount = 0; int portRpmKeyCount = 0; int stbdRpmKeyCount = 0; int forwardRuddersKeyCount = 0; int afterRuddersKeyCount = 0; int forwardPlanesKeyCount = 0; int afterPlanesKeyCount = 0; int ST725BearingKeyCount = 0; int ST725RangeKeyCount = 0; int ST1000BearingKeyCount = 0; int ST1000RangeKeyCount = 0; int forwardVerticalThrusterKeyCount = 0; int afterVerticalThrusterKeyCount = 0; int forwardLateralThrusterKeyCount = 0; int afterLateralThrusterKeyCount = 0; // read to end of file - - - - - - - - - - - - - - - - - - - - - - - - - - while (telemetryLine != "") { currentTelemetry.update (telemetryLine); // PositionInterpolator float dx = currentTelemetry.get_x () - priorTelemetry.get_x (); float dy = currentTelemetry.get_y () - priorTelemetry.get_y (); float dz = currentTelemetry.get_z () - priorTelemetry.get_z (); if (Math.sqrt (dx*dx + dy*dy + dz*dz) >= maxKeyValueDistance) { positionKeyCount++; if ((positionKeyCount % 10) == 0) // pretty print { positionKey.append ("\n "); positionKeyValue.append (",\n "); } else { positionKey.append (" "); positionKeyValue.append (", "); } positionKey.append ( precision5.format ((currentTelemetry.get_t () - startTime)/duration)); positionKeyValue.append ( precision.format ( currentTelemetry.get_x ()) + " " + precision.format (-currentTelemetry.get_z ()) + " " + precision.format ( currentTelemetry.get_y ())); priorTelemetry.update (currentTelemetry); } debug ("priorOrientationTelemetry.get_psi = " + priorOrientationTelemetry.get_psi ()); debug ("currentTelemetry.get_psi = " + currentTelemetry.get_psi () + "\n"); // OrientationInterpolator if (Math.abs (currentTelemetry.get_psi () - priorOrientationTelemetry.get_psi ()) > maxKeyValueOrientation) { orientationKeyCount++; if ((orientationKeyCount % 10) == 0) // pretty print { orientationKey.append ("\n "); orientationKeyValue.append (",\n "); } else { orientationKey.append (" "); orientationKeyValue.append (", "); } orientationKey.append ( precision5.format ((currentTelemetry.get_t () - startTime)/duration)); orientationKeyValue.append ( "0 1 0 " + precision5.format (- radians (currentTelemetry.get_psi ()))); priorOrientationTelemetry.update (currentTelemetry); } // portRpmInterpolator if (Math.abs (currentTelemetry.get_port_rpm () - priorPortRpmTelemetry.get_port_rpm ()) > maxDeltaRpm) { portRpmKeyCount += 2; if ((portRpmKeyCount % 10) == 0) // pretty print { portRpmKey.append ("\n "); portRpmKeyValue.append (",\n "); } else { portRpmKey.append (" "); portRpmKeyValue.append (", "); } // rpm is a step function, so enter previous & next interpolation values portRpmKey.append ( precision5.format ((currentTelemetry.get_t () - startTime)/duration)); portRpmKeyValue.append ( precision.format (priorPortRpmTelemetry.get_port_rpm () / 700.0f)); portRpmKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); portRpmKeyValue.append (" " + precision.format (currentTelemetry.get_port_rpm () / 700.0f)); priorPortRpmTelemetry.update (currentTelemetry); } // stbdRpmInterpolator if (Math.abs (currentTelemetry.get_stbd_rpm () - priorStbdRpmTelemetry.get_stbd_rpm ()) > maxDeltaRpm) { stbdRpmKeyCount += 2; if ((stbdRpmKeyCount % 10) == 0) // pretty print { stbdRpmKey.append ("\n "); stbdRpmKeyValue.append (",\n "); } else { stbdRpmKey.append (" "); stbdRpmKeyValue.append (", "); } // rpm is a step function, so enter previous & next interpolation values stbdRpmKey.append ( precision5.format ((currentTelemetry.get_t () - startTime)/duration)); stbdRpmKeyValue.append ( precision.format (priorStbdRpmTelemetry.get_stbd_rpm () / 700.0f)); stbdRpmKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); stbdRpmKeyValue.append (" " + precision.format (currentTelemetry.get_stbd_rpm () / 700.0f)); priorStbdRpmTelemetry.update (currentTelemetry); } // forwardRuddersInterpolator if (Math.abs (currentTelemetry.get_delta_rudder () - priorForwardRuddersTelemetry.get_delta_rudder ()) > maxDeltaRudderPlane) { forwardRuddersKeyCount += 2; if ((forwardRuddersKeyCount % 10) == 0) // pretty print { forwardRuddersKey.append ("\n "); forwardRuddersKeyValue.append (",\n "); } else { forwardRuddersKey.append (" "); forwardRuddersKeyValue.append (", "); } // forwardRudders is a step function, so enter previous & next interpolation values forwardRuddersKey.append ( precision5.format ((currentTelemetry.get_t () - startTime)/duration)); forwardRuddersKeyValue.append ( precision5.format (priorForwardRuddersTelemetry.get_delta_rudder () * 3.141592653f / 180.0f)); forwardRuddersKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); forwardRuddersKeyValue.append (" " + precision5.format (currentTelemetry.get_delta_rudder () * 3.141592653f / 180.0f)); priorForwardRuddersTelemetry.update (currentTelemetry); } // afterRuddersInterpolator if (Math.abs (currentTelemetry.get_delta_rudder () - priorAfterRuddersTelemetry.get_delta_rudder ()) > maxDeltaRudderPlane) { afterRuddersKeyCount += 2; if ((afterRuddersKeyCount % 10) == 0) // pretty print { afterRuddersKey.append ("\n "); afterRuddersKeyValue.append (",\n "); } else { afterRuddersKey.append (" "); afterRuddersKeyValue.append (", "); } // is a step function, so enter previous & next interpolation values afterRuddersKey.append ( precision5.format ((currentTelemetry.get_t () - startTime)/duration)); afterRuddersKeyValue.append ( precision5.format (priorAfterRuddersTelemetry.get_delta_rudder () * -3.141592653f / 180.0f)); afterRuddersKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); afterRuddersKeyValue.append (" " + precision5.format (currentTelemetry.get_delta_rudder () * -3.141592653f / 180.0f)); priorAfterRuddersTelemetry.update (currentTelemetry); } // forwardPlanesInterpolator if (Math.abs (currentTelemetry.get_delta_planes_bow () - priorForwardPlanesTelemetry.get_delta_planes_bow ()) > maxDeltaRudderPlane) { forwardPlanesKeyCount += 2; if ((forwardPlanesKeyCount % 10) == 0) // pretty print { forwardPlanesKey.append ("\n "); forwardPlanesKeyValue.append (",\n "); } else { forwardPlanesKey.append (" "); forwardPlanesKeyValue.append (", "); } // is a step function, so enter previous & next interpolation values forwardPlanesKey.append ( precision5.format ((currentTelemetry.get_t () - startTime)/duration)); forwardPlanesKeyValue.append ( precision5.format (priorForwardPlanesTelemetry.get_delta_planes_bow () * -3.141592653f / 180.0f)); forwardPlanesKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); forwardPlanesKeyValue.append (" " + precision5.format (currentTelemetry.get_delta_planes_bow () * -3.141592653f / 180.0f)); priorForwardPlanesTelemetry.update (currentTelemetry); } // afterPlanesInterpolator if (Math.abs (currentTelemetry.get_delta_planes_stern () - priorAfterPlanesTelemetry.get_delta_planes_stern ()) > maxDeltaRudderPlane) { afterPlanesKeyCount += 2; if ((afterPlanesKeyCount % 10) == 0) // pretty print { afterPlanesKey.append ("\n "); afterPlanesKeyValue.append (",\n "); } else { afterPlanesKey.append (" "); afterPlanesKeyValue.append (", "); } // is a step function, so enter previous & next interpolation values afterPlanesKey.append ( precision5.format ((currentTelemetry.get_t () - startTime)/duration)); afterPlanesKeyValue.append ( precision5.format (priorAfterPlanesTelemetry.get_delta_planes_stern () * 3.141592653f / 180.0f)); afterPlanesKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); afterPlanesKeyValue.append (" " + precision5.format (currentTelemetry.get_delta_planes_stern () * 3.141592653f / 180.0f)); priorAfterPlanesTelemetry.update (currentTelemetry); } // ST725BearingInterpolator if (Math.abs (currentTelemetry.get_AUV_ST725_bearing () - priorST725BearingTelemetry.get_AUV_ST725_bearing ()) > maxDeltaSonarBearing) { ST725BearingKeyCount ++; if ((ST725BearingKeyCount % 10) == 0) // pretty print { ST725BearingKey.append ("\n "); ST725BearingKeyValue.append (",\n "); } else { ST725BearingKey.append (" "); ST725BearingKeyValue.append (", "); } ST725BearingKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); ST725BearingKeyValue.append (" " + precision5.format (currentTelemetry.get_AUV_ST725_bearing () * 3.141592653f / 180.0f)); priorTelemetry.update (currentTelemetry); } // ST725RangeInterpolator if (Math.abs (currentTelemetry.get_AUV_ST725_range () - priorST725RangeTelemetry.get_AUV_ST725_range ()) > maxDeltaSonarRange) { ST725RangeKeyCount ++; if ((ST725RangeKeyCount % 10) == 0) // pretty print { ST725RangeKey.append ("\n "); ST725RangeKeyValue.append (",\n "); } else { ST725RangeKey.append (" "); ST725RangeKeyValue.append (", "); } ST725RangeKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); ST725RangeKeyValue.append (" " + precision5.format (currentTelemetry.get_AUV_ST725_range ())); priorST725RangeTelemetry.update (currentTelemetry); } // ST1000BearingInterpolator if (Math.abs (currentTelemetry.get_AUV_ST1000_bearing () - priorST1000BearingTelemetry.get_AUV_ST1000_bearing ()) > maxDeltaSonarBearing) { ST1000BearingKeyCount ++; if ((ST1000BearingKeyCount % 10) == 0) // pretty print { ST1000BearingKey.append ("\n "); ST1000BearingKeyValue.append (",\n "); } else { ST1000BearingKey.append (" "); ST1000BearingKeyValue.append (", "); } ST1000BearingKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); ST1000BearingKeyValue.append (" " + precision5.format (currentTelemetry.get_AUV_ST1000_bearing () * 3.141592653f / 180.0f)); priorST1000BearingTelemetry.update (currentTelemetry); } // ST1000RangeInterpolator if (Math.abs (currentTelemetry.get_AUV_ST1000_range () - priorST1000RangeTelemetry.get_AUV_ST1000_range ()) > maxDeltaSonarRange) { ST1000RangeKeyCount ++; if ((ST1000RangeKeyCount % 10) == 0) // pretty print { ST1000RangeKey.append ("\n "); ST1000RangeKeyValue.append (",\n "); } else { ST1000RangeKey.append (" "); ST1000RangeKeyValue.append (", "); } ST1000RangeKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); ST1000RangeKeyValue.append (" " + precision5.format (currentTelemetry.get_AUV_ST1000_range ())); priorST1000RangeTelemetry.update (currentTelemetry); } // forwardVerticalThrusterInterpolator if (Math.abs (currentTelemetry.get_AUV_bow_vertical () - priorForwardVerticalThrusterTelemetry.get_AUV_bow_vertical ()) > maxDeltaThruster) { forwardVerticalThrusterKeyCount += 2; if ((forwardVerticalThrusterKeyCount % 10) == 0) // pretty print { forwardVerticalThrusterKey.append ("\n "); forwardVerticalThrusterKeyValue.append (",\n "); } else { forwardVerticalThrusterKey.append (" "); forwardVerticalThrusterKeyValue.append (", "); } forwardVerticalThrusterKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); forwardVerticalThrusterKeyValue.append (" " + precision.format (currentTelemetry.get_AUV_bow_vertical () * .5f / 24.0f)); forwardVerticalThrusterKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); forwardVerticalThrusterKeyValue.append (" " + precision.format (currentTelemetry.get_AUV_bow_vertical () * .5f / 24.0f)); priorForwardVerticalThrusterTelemetry.update (currentTelemetry); } // afterVerticalThrusterInterpolator if (Math.abs (currentTelemetry.get_AUV_stern_vertical () - priorAfterVerticalThrusterTelemetry.get_AUV_stern_vertical ()) > maxDeltaThruster) { afterVerticalThrusterKeyCount += 2; if ((afterVerticalThrusterKeyCount % 10) == 0) // pretty print { afterVerticalThrusterKey.append ("\n "); afterVerticalThrusterKeyValue.append (",\n "); } else { afterVerticalThrusterKey.append (" "); afterVerticalThrusterKeyValue.append (", "); } afterVerticalThrusterKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); afterVerticalThrusterKeyValue.append (" " + precision.format (currentTelemetry.get_AUV_stern_vertical () * .5f / 24.0f)); afterVerticalThrusterKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); afterVerticalThrusterKeyValue.append (" " + precision.format (currentTelemetry.get_AUV_stern_vertical () * .5f / 24.0f)); priorAfterVerticalThrusterTelemetry.update (currentTelemetry); } // forwardLateralThrusterInterpolator if (Math.abs (currentTelemetry.get_AUV_bow_lateral () - priorForwardLateralThrusterTelemetry.get_AUV_bow_lateral ()) > maxDeltaThruster) { forwardLateralThrusterKeyCount += 2; if ((forwardLateralThrusterKeyCount % 10) == 0) // pretty print { forwardLateralThrusterKey.append ("\n "); forwardLateralThrusterKeyValue.append (",\n "); } else { forwardLateralThrusterKey.append (" "); forwardLateralThrusterKeyValue.append (", "); } forwardLateralThrusterKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); forwardLateralThrusterKeyValue.append (" " + precision.format (currentTelemetry.get_AUV_bow_lateral () * .5f / 24.0f)); forwardLateralThrusterKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); forwardLateralThrusterKeyValue.append (" " + precision.format (currentTelemetry.get_AUV_bow_lateral () * .5f / 24.0f)); priorForwardLateralThrusterTelemetry.update (currentTelemetry); } // afterLateralThrusterInterpolator if (Math.abs (currentTelemetry.get_AUV_stern_lateral () - priorAfterLateralThrusterTelemetry.get_AUV_stern_lateral ()) > maxDeltaThruster) { afterLateralThrusterKeyCount += 2; if ((afterLateralThrusterKeyCount % 10) == 0) // pretty print { afterLateralThrusterKey.append ("\n "); afterLateralThrusterKeyValue.append (",\n "); } else { afterLateralThrusterKey.append (" "); afterLateralThrusterKeyValue.append (", "); } afterLateralThrusterKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); afterLateralThrusterKeyValue.append (" " + precision.format (currentTelemetry.get_AUV_stern_lateral () * .5f / 24.0f)); afterLateralThrusterKey.append (" " + precision5.format ((currentTelemetry.get_t () - startTime)/duration)); afterLateralThrusterKeyValue.append (" " + precision.format (currentTelemetry.get_AUV_stern_lateral () * .5f / 24.0f)); priorAfterLateralThrusterTelemetry.update (currentTelemetry); } // continue with next line - - - - - - - - - - - - - - - - - - - - - - - - - - try { if (telemetryStream.ready()) { telemetryLine = readNextTelemetryState (); } else { debug( "telemetryStream no longer readable"); telemetryLine = ""; } } catch ( IOException e ) { debug( "reached end of file " + e.toString() ); telemetryLine = ""; } } // verify last entries captured - - - - - - - - - - - - - - - - - - - - - - - - - - if (priorTelemetry.get_t () != currentTelemetry.get_t ()) { priorTelemetry.update (currentTelemetry); positionKey.append (" " + precision5.format ((priorTelemetry.get_t () - startTime)/duration)); positionKeyValue.append (", " + precision.format ( priorTelemetry.get_x ()) + " " + precision.format (-priorTelemetry.get_z ()) + " " + precision.format ( priorTelemetry.get_y ())); } if (priorOrientationTelemetry.get_t () != currentTelemetry.get_t ()) { priorOrientationTelemetry.update (currentTelemetry); orientationKey.append (" " + precision5.format ((priorOrientationTelemetry.get_t () - startTime)/duration)); orientationKeyValue.append (", 0 1 0 " + precision5.format (- radians (priorOrientationTelemetry.get_psi ()))); } if (priorPortRpmTelemetry.get_t () != currentTelemetry.get_t ()) { priorPortRpmTelemetry.update (currentTelemetry); portRpmKey.append (" " + precision5.format ((priorPortRpmTelemetry.get_t () - startTime)/duration)); portRpmKeyValue.append (", " + precision.format (priorPortRpmTelemetry.get_port_rpm () / 700.0f)); } if (priorStbdRpmTelemetry.get_t () != currentTelemetry.get_t ()) { priorStbdRpmTelemetry.update (currentTelemetry); stbdRpmKey.append (" " + precision5.format ((priorStbdRpmTelemetry.get_t () - startTime)/duration)); stbdRpmKeyValue.append (", " + precision.format (priorStbdRpmTelemetry.get_stbd_rpm () / 700.0f)); } if (priorForwardRuddersTelemetry.get_t () != currentTelemetry.get_t ()) { priorForwardRuddersTelemetry.update (currentTelemetry); forwardRuddersKey.append (" " + precision5.format ((priorForwardRuddersTelemetry.get_t () - startTime)/duration)); forwardRuddersKeyValue.append (", " + precision5.format (priorForwardRuddersTelemetry.get_delta_rudder () * 3.141592653f / 180.0f)); } if (priorAfterRuddersTelemetry.get_t () != currentTelemetry.get_t ()) { priorAfterRuddersTelemetry.update (currentTelemetry); afterRuddersKey.append (" " + precision5.format ((priorAfterRuddersTelemetry.get_t () - startTime)/duration)); afterRuddersKeyValue.append (", " + precision5.format (priorAfterRuddersTelemetry.get_delta_rudder () * -3.141592653f / 180.0f)); } if (priorForwardPlanesTelemetry.get_t () != currentTelemetry.get_t ()) { priorForwardPlanesTelemetry.update (currentTelemetry); forwardPlanesKey.append (" " + precision5.format ((priorForwardPlanesTelemetry.get_t () - startTime)/duration)); forwardPlanesKeyValue.append (", " + precision5.format (priorForwardPlanesTelemetry.get_delta_planes_bow () * -3.141592653f / 180.0f)); } if (priorAfterPlanesTelemetry.get_t () != currentTelemetry.get_t ()) { priorAfterPlanesTelemetry.update (currentTelemetry); afterPlanesKey.append (" " + precision5.format ((priorAfterPlanesTelemetry.get_t () - startTime)/duration)); afterPlanesKeyValue.append (", " + precision5.format (priorAfterPlanesTelemetry.get_delta_planes_stern () * 3.141592653f / 180.0f)); } if (priorST725BearingTelemetry.get_t () != currentTelemetry.get_t ()) { priorST725BearingTelemetry.update (currentTelemetry); ST725BearingKey.append (" " + precision5.format ((priorST725BearingTelemetry.get_t () - startTime)/duration)); ST725BearingKeyValue.append (", " + precision5.format (priorST725BearingTelemetry.get_AUV_ST725_bearing () * 3.141592653f / 180.0f)); } if (priorST725RangeTelemetry.get_t () != currentTelemetry.get_t ()) { priorST725RangeTelemetry.update (currentTelemetry); ST725RangeKey.append (" " + precision5.format ((priorST725RangeTelemetry.get_t () - startTime)/duration)); ST725RangeKeyValue.append (", " + precision5.format (priorST725RangeTelemetry.get_AUV_ST725_range ())); } if (priorST1000BearingTelemetry.get_t () != currentTelemetry.get_t ()) { priorST1000BearingTelemetry.update (currentTelemetry); ST1000BearingKey.append (" " + precision5.format ((priorST1000BearingTelemetry.get_t () - startTime)/duration)); ST1000BearingKeyValue.append (", " + precision5.format (priorST1000BearingTelemetry.get_AUV_ST1000_bearing () * 3.141592653f / 180.0f)); } if (priorST1000RangeTelemetry.get_t () != currentTelemetry.get_t ()) { priorST1000RangeTelemetry.update (currentTelemetry); ST1000RangeKey.append (" " + precision5.format ((priorST1000RangeTelemetry.get_t () - startTime)/duration)); ST1000RangeKeyValue.append (", " + precision5.format (priorST1000RangeTelemetry.get_AUV_ST1000_range ())); } if (priorForwardVerticalThrusterTelemetry.get_t () != currentTelemetry.get_t ()) { priorForwardVerticalThrusterTelemetry.update (currentTelemetry); forwardVerticalThrusterKey.append (" " + precision5.format ((priorForwardVerticalThrusterTelemetry.get_t () - startTime)/duration)); forwardVerticalThrusterKeyValue.append (", " + precision.format (priorForwardVerticalThrusterTelemetry.get_AUV_bow_vertical () * .5f / 24.0f)); } if (priorAfterVerticalThrusterTelemetry.get_t () != currentTelemetry.get_t ()) { priorAfterVerticalThrusterTelemetry.update (currentTelemetry); afterVerticalThrusterKey.append (" " + precision5.format ((priorTelemetry.get_t () - startTime)/duration)); afterVerticalThrusterKeyValue.append (", " + precision.format (priorAfterVerticalThrusterTelemetry.get_AUV_stern_vertical () * .5f / 24.0f)); } if (priorForwardLateralThrusterTelemetry.get_t () != currentTelemetry.get_t ()) { priorForwardLateralThrusterTelemetry.update (currentTelemetry); forwardLateralThrusterKey.append (" " + precision5.format ((priorForwardLateralThrusterTelemetry.get_t () - startTime)/duration)); forwardLateralThrusterKeyValue.append (", " + precision.format (priorForwardLateralThrusterTelemetry.get_AUV_bow_lateral () * .5f / 24.0f)); } if (priorAfterLateralThrusterTelemetry.get_t () != currentTelemetry.get_t ()) { priorAfterLateralThrusterTelemetry.update (currentTelemetry); afterLateralThrusterKey.append (" " + precision5.format ((priorAfterLateralThrusterTelemetry.get_t () - startTime)/duration)); afterLateralThrusterKeyValue.append (", " + precision.format (priorAfterLateralThrusterTelemetry.get_AUV_stern_lateral () * .5f / 24.0f)); } // all done generating interpolators - - - - - - - - - - - - - - - - - - - - - - - - - - positionKey.append ("\n ]"); positionKeyValue.append ("\n ]\n }\n"); orientationKey.append ("\n ]"); orientationKeyValue.append ("\n ]\n }\n"); portRpmKey.append ("\n ]"); portRpmKeyValue.append ("\n ]\n }\n"); stbdRpmKey.append ("\n ]"); stbdRpmKeyValue.append ("\n ]\n }\n"); forwardRuddersKey.append ("\n ]"); forwardRuddersKeyValue.append ("\n ]\n }\n"); afterRuddersKey.append ("\n ]"); afterRuddersKeyValue.append ("\n ]\n }\n"); forwardPlanesKey.append ("\n ]"); forwardPlanesKeyValue.append ("\n ]\n }\n"); afterPlanesKey.append ("\n ]"); afterPlanesKeyValue.append ("\n ]\n }\n"); ST725BearingKey.append ("\n ]"); ST725BearingKeyValue.append ("\n ]\n }\n"); ST725RangeKey.append ("\n ]"); ST725RangeKeyValue.append ("\n ]\n }\n"); ST1000BearingKey.append ("\n ]"); ST1000BearingKeyValue.append ("\n ]\n }\n"); ST1000RangeKey.append ("\n ]"); ST1000RangeKeyValue.append ("\n ]\n }\n"); forwardVerticalThrusterKey.append ("\n ]"); forwardVerticalThrusterKeyValue.append ("\n ]\n }\n"); afterVerticalThrusterKey.append ("\n ]"); afterVerticalThrusterKeyValue.append ("\n ]\n }\n"); forwardLateralThrusterKey.append ("\n ]"); forwardLateralThrusterKeyValue.append ("\n ]\n }\n"); afterLateralThrusterKey.append ("\n ]"); afterLateralThrusterKeyValue.append ("\n ]\n }\n"); // interpolators are all built, now output them - - - - - - - System.out.println (positionKey); System.out.println (positionKeyValue); System.out.println (orientationKey); System.out.println (orientationKeyValue); System.out.println (portRpmKey); System.out.println (portRpmKeyValue); System.out.println (stbdRpmKey); System.out.println (stbdRpmKeyValue); System.out.println (forwardRuddersKey); System.out.println (forwardRuddersKeyValue); System.out.println (afterRuddersKey); System.out.println (afterRuddersKeyValue); System.out.println (forwardPlanesKey); System.out.println (forwardPlanesKeyValue); System.out.println (afterPlanesKey); System.out.println (afterPlanesKeyValue); System.out.println (ST725BearingKey); System.out.println (ST725BearingKeyValue); System.out.println (ST725RangeKey); System.out.println (ST725RangeKeyValue); System.out.println (ST1000BearingKey); System.out.println (ST1000BearingKeyValue); System.out.println (ST1000RangeKey); System.out.println (ST1000RangeKeyValue); System.out.println (forwardVerticalThrusterKey); System.out.println (forwardVerticalThrusterKeyValue); System.out.println (afterVerticalThrusterKey); System.out.println (afterVerticalThrusterKeyValue); System.out.println (forwardLateralThrusterKey); System.out.println (forwardLateralThrusterKeyValue); System.out.println (afterLateralThrusterKey); System.out.println (afterLateralThrusterKeyValue); System.out.println (" DEF MISSION_TIMESENSOR TimeSensor {"); System.out.println (" cycleInterval " + precision5.format (duration) + " # seconds"); System.out.println (" loop TRUE\n }\n"); System.out.println (" ]\n"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO TELEMETRY_POSITION.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO TELEMETRY_ORIENTATION.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO PORT_RPM.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO STBD_RPM.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO FORWARD_RUDDERS.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO AFTER_RUDDERS.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO FORWARD_PLANES.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO AFTER_PLANES.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO ST725BEARING.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO ST725RANGE.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO ST1000BEARING.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO ST1000RANGE.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO FORWARD_VERTICAL_THRUSTER.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO AFTER_VERTICAL_THRUSTER.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO FORWARD_LATERAL_THRUSTER.set_fraction"); System.out.println ("ROUTE MISSION_TIMESENSOR.fraction_changed " + "TO AFTER_LATERAL_THRUSTER.set_fraction"); System.out.println (); System.out.println ("ROUTE TELEMETRY_POSITION.value_changed " + "TO PHOENIX.translation"); System.out.println ("ROUTE TELEMETRY_ORIENTATION.value_changed " + "TO PHOENIX.rotation\n"); System.out.println ("ROUTE PORT_RPM.value_changed " + "TO PHOENIX.portRpm"); System.out.println ("ROUTE STBD_RPM.value_changed " + "TO PHOENIX.stbdRpm\n"); System.out.println ("ROUTE FORWARD_RUDDERS.value_changed " + "TO PHOENIX.forwardRudders"); System.out.println ("ROUTE AFTER_RUDDERS.value_changed " + "TO PHOENIX.afterRudders\n"); System.out.println ("ROUTE FORWARD_PLANES.value_changed " + "TO PHOENIX.forwardPlanes"); System.out.println ("ROUTE AFTER_PLANES.value_changed " + "TO PHOENIX.afterPlanes\n"); System.out.println ("ROUTE ST725BEARING.value_changed " + "TO PHOENIX.ST725Bearing"); System.out.println ("ROUTE ST725RANGE.value_changed " + "TO PHOENIX.ST725Range\n"); System.out.println ("ROUTE ST1000BEARING.value_changed " + "TO PHOENIX.ST1000Bearing"); System.out.println ("ROUTE ST1000RANGE.value_changed " + "TO PHOENIX.ST1000Range\n"); System.out.println ("ROUTE FORWARD_VERTICAL_THRUSTER.value_changed " + "TO PHOENIX.forwardVerticalThruster"); System.out.println ("ROUTE AFTER_VERTICAL_THRUSTER.value_changed " + "TO PHOENIX.afterVerticalThruster"); System.out.println ("ROUTE FORWARD_LATERAL_THRUSTER.value_changed " + "TO PHOENIX.forwardLateralThruster"); System.out.println ("ROUTE AFTER_LATERAL_THRUSTER.value_changed " + "TO PHOENIX.afterLateralThruster"); return; } /** * Application to generate the scene, accepts telemetry filename as command-line parameter. */ public static void main (String args []) throws IOException { // Read command line parameters if (args.length == 1) { telemetryFileName = new String (args [0]); } else { trace ("application invocation:\n" + " java TelemetryPlayback someTelemetryFileName"); System.exit (1); } // Print the VRML scene to the screen GenerateVrmlSceneHeaders (); TelemetryFileOpen (); telemetryLine = readNextTelemetryState (); debug (telemetryLine); priorTelemetry.update (currentTelemetry); currentTelemetry.update (telemetryLine); debug ("prior t = " + priorTelemetry.get_t() + ", " + "current t = " + currentTelemetry.get_t()); // Print the VRML scene to the screen GenerateVrmlInterpolators (); // ?? still need a user mechanism to start the clock... // also consider fast-speed and slow-speed timesensors here.. System.out.println ("}\n"); // close the VRML scene } }