-------------------------------------------------------------------- Title: DVLNAV DATA I/O and LOG FORMAT DOCUMENTATION Author: Louis L. Whitcomb and James Kinsey Department of Mechanical Engineering Johns Hopkins University and Deep Submergence Laboratory Woods Hole Oceanographic Institution Created and Written: 05 June 2001 Rev 01 Abstract: This note documents the dvlnav reatime data Input/output and data log formats. ---------------------------------------------------------------------- ---------------------------------------------------------------------- ---------------------------------------------------------------------- TABLE OF CONTENTS ---------------------------------------------------------------------- PART 0: MODIFICATION HISTORY ---------------------------------------------------------------------- ---------------------------------------------------------------------- PART I: REATIME DATA INPUT/OUTPUT STRING FORMATS PART SECTION SECTION NAME -------- --------- -------------------------------------------------- I 1 Overview I 2 String input from HOST to DVLNAV I.2.1 $PWHDEP NMEA Depth Sensor String I.2.2 $PWHALT NMEA Altitude Sensor String I.2.3 $PWHLBL NMEA LBL Travel Time String I.2.4 $PWHTMP NMEA Water temperature Sensor String I.2.5 $PWHSOS NMEA Sound Velocity Sensor String I.2.6 $PWHCTD NMEA CTD Sensor String I.2.7 $PWHTIM NMEA Time String I.2.8 XBW ASCII Crossbow Gyro String I.2.9 VIS ASCII Magnetomoeter String I.2.10 VIS ASCII CTD String I.2.11 VDS ASCII Depth String String I.2.12 $PWHMAG NMEA Magnetometer String I.2.13 PNS ASCII Platform Navigation String for externally input of vehicle, ship, or depressor position. I.2.14 PAS ASCII Platform Navigation (position) String externally input of vehicle or depressor heading, pitch, roll. I.2.15 APAS Argus Platform Atitude String I.2.16 $PVGGA NMEA Ship (primary vehicle) position string. $GPGGA NMEA Ship position string. I.2.17 $PVHDG NMEA Ship (primary vehicle) heading string. $HEHDT NMEA Ship heading string. I.2.18 $M1GGA NMEA ROV (mobile vehicle 1) position string. I.2.19 $M2GGA NMEA Medea (Argus) (mobile vehicle 2) position string. I.2.20 CT2 Hercules CTD string I.2.21 $PWHTT NMEA generic LBL travel-time string. I.2.22 USBL Ascii data string I.2.23 $PWHTX NMEA generic LBL travel time string with "kitchen sink" attachments I 3 String output from DVLNAV to HOST I.3.1 $PWHGYRO NMEA Octans heading and attitude. I.3.2 $PWHMAGD NMEA DVL heading and attitude. I.3.3 $PWHLBX NMEA LBL nav fix. String I.3.4 $PWHDOP NMEA Doppler nav fix, cog, sog, etc. I.3.5 $PWHTRB NMEA Target ID, range, bearing. I.3.6 $PWHTIM NMEA Time I.3.7 VNS ASCII Vehicle pos and vel in UTM. I.3.8 $PWHCFG NMEA Site configuration data. I.3.9 DVX ASCII Doppler navigation string sent to host ---------------------------------------------------------------------- PART II: DSL DATA FORMAT LOG FILE LOG STRING SPECIFICATIONS PART SECTION SECTION NAME -------- --------- -------------------------------------------------- II 1 OVERVIEW OF LOG FILE FORMATS II 2 PNS format for cooked host data IPNI 3 VIS format for cooked octans data II 4.1 OCT format for raw octans ascii NMEA strings II 4.2 OCB format for raw octans BINARY strings II 5 VIS format for cooked doppler data II 6 RDB format for raw doppler data II 7 HST format for raw host strings received from host II 8 HTX format for raw host strings transmitted to host II 9 STD format for stderr log II 10 CPU format for CPU and DISK usage II 11 MSC format for miscellaneous derived realtime nav info II 12 SIM format for simulation data ---------------------------------------------------------------------- Part III: COMMA-DELIMITED LOG FILES SPECIFICATIONS (for SPREADSHEETS) PART SECTION SECTION NAME -------- --------- -------------------------------------------------- III 1 Overview: file content, file name conventions. III 2 Comma-Delimited Log File Format ---------------------------------------------------------------------- Part IV: Vehicle Coordinate Frame Convention Specification PART SECTION SECTION NAME -------- --------- -------------------------------------------------- IV 1 Vehicle Coordinate Frame Convention Specification ---------------------------------------------------------------------- ---------------------------------------------------------------------- Part 0: Modification history ---------------------------------------------------------------------- Rev 1 Jun 5 2001 LLW Created and written Rev 2 Jun 5 2001 LLW Added octans PAS log format, Section 3 Rev 4 Jun 5 2001 LLW Added doppler & host PNS log format, Section 4 Rev 6 Jun 6 2001 LLW & JCK I/O Formats Rev 9 Jun 7 2001 LLW & JCK Host NMEA I/O protocol. Rev 14 Jun 10 2001 LLW & JCK Revised PNS, VIS, and NMEA formats. Added Host VIS dvlnav output format. Rev 18 Jun 10 2001 LLW Added VNS output string format. Implementred and tested Alvin host NMEA output strings. Rev 19 Jun 10 2001 LLW DSL Format (from Jon Howland) for Crossbow Depth, CTD, and Magnetometer Rev 20 Jun 17 2001 LLW & KH Added Lat and Lon to LBX string. Typo corrections. Rev 21 Sept 6 2001 LLW & KH Added $PWHTRB Note. Oct 11 2001 DVLNAV V128 Release to Alvin Rev 23 Jan 10 2002 DAS Corrected errors in $PWHDEP string documentation. Rev 24 Mar 1 2002 LLW $PWHDOP and $PWHLBX implementation have been corrected to report depth as positive, and to confirm to to this documentation. Rev 26 Apr 11 2002 LLW Added new comma-delimited one-hertz output file format, first revision, based on Dan Fornari's specification. Modified filename convention to include year. Rev 28 Apr 14 2002 LLW Added additional unit convention comments to Part III comma delimited log format. Added time zone to comma delimited log format. Added octans status, Maggie time. Rev 29 Apr 17 2002 LLW Added new $PWHCFG string format spec Rev 30 Apr 19 2002 LLW Added lat, lon to $PWHDOP Removed salinity and temp from $PWHCFG Added XY Origin in UTM to $PWHCFG Rev 31 Apr 19 2002 LLW Modified $PWHDOP and $PWHLBX to have identical data fields for first seven fields: $PWHLBX,,,,,,,, $PWHDOP,,,,,,,, Rev 32 Apr 21 2002 LLW Modified $PWHDOP to report FILTERED cog, sog, cow, sow Modified $PWHMTW to $PWHTMP and added string tag field to identify low temp, hi temp, ICL temp, etc. Added $PWHMAG maggie string. Revised $PWHCFG string. Addex X,Y,Z vel to science spreadsheet log. Modified $PWHRB to report NAME or # of origin and destination for range and bearing. Rev 33 Apr 23 2002 LLW Changed .CSV to log both altitude and doppler altitude. Rev 34 Apr 23 2002 LLW Typo corrections in Part III Section II .CSV format pitch data sign definition. April 24 2002 DVLNAV V155 Release to Alvin. Rev 35 May 06 2002 LLW Added DVL temp to .CSV format Rev 36 May 09 2002 LLW DVLNAV V157 Release to Alvin Added logging of targets (both pre-loaded and on-the-fly dropped targets to CSV file. Rev 37 May 20 2002 LLW Changed order from Lon Lat to Lat Lon in .CSV . Fixed sign bug in $PWHLBX and $PWHDOP vertical vel. $PWHLBX and $PWHDOP changed to report Z depth, not Z lbl solution depth. Fixed bracket problem in INI file format. Rev 38 May 21 2002 LLW DVLNAV V159 Release to Alvin Fixed bug in $PWHDOP in which Doppler fix status was always incorrectly reported as zero. Added referenced to DVLNAV version numbers in this modification history. Rev 39 Aug 18 2003 LLW DVLNAV V172.01 Data format revsions: (1) Part II Section 4: Added additional data fields to VIS data string logged on every DVL ping: - Sound velocity and sound velocity source for Doppler fix computation - World Vehicle Position XYZHPR (2) Added additional data fields to PNS data string logged on every LBL fix and at one hertz: - Sound velocity and sound velocity source for Doppler fix computation - Sound velocity and sound velocity source for LBL fix computation - World vehicle top and bottom transducer position Rev 40 Aug 18 2003 LLW&JCk DVLNAV V172.02 Change Doppler VIS string: - octans and xbow attitudes are now cooked vehicle attitude, not raw instrument atitude. - added cooked doppler vehicle attitude Rev 40 Aug 20 2003 LLW&JCk DVLNAV V173 Updated Doppler VIS string documentation Rev 41 Aug 21 2003 LLW DVLNAV V173.01 Created new SIM simulation data log format. This string is logged only when the "simulation mode" is active, at the simulation update rate of 10 Hz. Documented in Part II of this document. Rev 41 Aug 21 2003 LLW DVLNAV V174 Added logging of DVL instrument velocities to SIM log string Rev 41 Aug 21 2003 LLW DVLNAV V174.05 V174.05 added two-transponder-on-the-vehicle LBL, enabling the computation of LBL vehicle haading. The LBL PNS log format string has been revised to delete the four (unused) complementary filter fix pos fields, and instead logs LBL mode and LBL heading information Corrected numbering error in PNS LBL log strings Rev 45 Nov 22 2003 LLW revised to version dvlnav_data_formats_rev_45.txt Added documentation for PNS, PAS, DVX, OCT, OCB, RDB, HST, HTX, STD, and MSC data formats. Rev 46 Dec 07 2003 Corrected error in $PWHALT documentation. Was incorrectly reported as $PWALT. Rev 47 May 23 2004 Added documentation for new strings to support Hercules, Argus, and Hypack USBL Navigation in DVLNAV V184 Here are the new strings: I.2.15 APAS Argus Platform Atitude String I.2.16 $PVGGA NMEA Ship (primary vehicle) position string. I.2.17 $PVHDG NMEA Ship (primary vehicle) heading string. I.2.18 $M1GGA NMEA ROV (mobile vehicle 1) position string. I.2.19 $M2GGA NMEA Medea (Argus) (mobile vehicle 2) position string. I.2.20 CT2 Hercules CTD string Rev 50 Jul 23 2005 Added spec for genereic LBL travel time string $PWHTT Rev 51 Jul 27 2005 Revised $PWHTT extensively Rev 52 Aug 04 2005 Revised $PWHTT to include GPS fix coordinate system Revised $PWHTT to specify turnaround-time in MS, not SEC Rev 53 Aug 04 2005 Revised $PWHTT to include ping interrogation frequency in KHZ Revised $PWHTT to include LBL cycle period in seconds Rev 54 Oct 19 2005 Revised to include three new strings: USBL untra-short baseline sonar strings $GPGGA ship gps fixes $HEHDT ship gyro heading Rev 54a Apr 15 2008 JCH Added PWHTTKS Rev 55 Apr 15 2008 LLW minor typos corrected. Merged two branches of this doc Changed PWHTTKS to PWHTX Modified PWHTX to have senstitvity field for each channel Modified PWHTX to have variable number of fields per tt Rev 56 Apr 19 2008 Revs to PWHTT documentation ---------------------------------------------------------------------- Part I Section 1: OVERVIEW ---------------------------------------------------------------------- DVLNAV presently communicates to three devices: 1. Vehicle host computer - as specified in this document 2. Octans gyro - see Octans manual for Octans STD1 NMEA protocol. 3. RDI Doppler - see RDI manual for PD5 Binary protocol. All data is communicated via the ASCII readable data strings via RS232 serial or network UDP sockets as specified in this document. All normal serial port communication settings are supported. All strings are printable ASCII, terminated with in this order. Conventions: denotes carriage return, decimal 13, hex 0D, keyboard CTRL-m denotes line-feed, decimal 10, hex 0A, keyboard CTRL-j Strings are in either of two formats: NMEA or DSL standard NMEA strings have the following format: 1. A leading $ (dollar sign) character 2. A multi character identity string, terminated with a comma (",") 3. Data fields delimited by commas. The final data field has no trailing comma. 4. A * (asterix) character. 5. A two digit hexadecimal checksum. The checksum is computed from all characters between (but not including) the leading $ and trailing * characters. The value of the checksum is the exclusive-or (XOR) of the characters between the $ and the *. Here are some sample valid NMEA strings: $PWHDEP,493.016,2,K*6C $PWHDEP,493.037,1,K*6C $PWHDEP,494.414,2,K*6D $PWHDEP,495.346,1,K*6F $PWHDEP,495.445,2,K*68 $PWHALT,500.000,K*76 $PWHALT,500.376,K*74 $PWHALT,528.488,K*78 $PWHALT,529.076,K*7C $PWHLBL,2059588,1394115,1908726,2997037*0E $PWHLBL,2063857,1397374,1912297,2993600*0C $PWHLBL,2067484,1391127,1909341,2993404*0E $PWHLBL,2071128,1391391,1909711,2992674*00 $PWHLBL,2073126,1388771,1908596,2992443*04 $PWHMTW,0.017052,C*5D $PWHMTW,0.153121,C*59 $PWHMTW,0.251564,C*5D $PWHMTW,0.577777,C*5E $PWHMTW,1.032416,C*5F $PWHMTW,1.609285,C*5D $PWHSOS,1500.000*36 $PWHCTD,36.256299,12.512598,485.587769*22 $PWHCTD,36.811789,13.623578,495.345547*26 $PWHCTD,37.342583,14.685167,468.367608*29 $PWHCTD,37.841448,15.682896,492.192721*21 $PWHCTD,38.041757,16.083513,481.599601*21 $PWHCTD,38.483534,16.967067,497.791131*20 $PWHCTD,38.877829,17.755659,469.480821*29 $PWHCTD,39.346987,18.693975,477.767897*29 $PWHCTD,39.605305,19.210610,499.375805*25 ---------------------------------------------------------------------- PART I SECTION 2: STRINGS SENT FROM HOST TO DVLNAV ---------------------------------------------------------------------- Sensor strings are normally generated by the host when a sensor value is received by the host. Some sensors, e.g. sound velocity probe and CTD, may not be present. In this case, the host should not send the corresponding strings. The time string should be transmitted by the host once a second. ---------------------------------------------------------------------- I.2.1: $PWHDEP NMEA DEPTH SENSOR STRING from host to dvlnav ---------------------------------------------------------------------- // 1/12/02 DAS Corrected error in enum FORMAT: $PWHDEP,,,* may contain any number of digits before and after the decimal point. It should be a positive number. A "+" sign is allowed but not required. should an integer, normally 1 or 2, indicating that the sensor reading is from depth sensor 1 or 2. is a character specifying the sensor datum K indicates that sensor value is measured from keel T indicates that sensor value is measured from transducer is the two digit hexadecimal checksum EXAMPLE: $PWHDEP,468.242,1,K*68 $PWHDEP,468.368,1,K*61 $PWHDEP,469.113,1,K*6E $PWHDEP,469.238,2,K*67 $PWHDEP,469.251,2,K*68 $PWHDEP,469.481,1,K*60 $PWHDEP,470.064,2,K*64 $PWHDEP,470.112,2,K*64 $PWHDEP,470.924,1,K*6A $PWHDEP,471.512,1,K*62 $PWHDEP,471.681,2,K*68 $PWHDEP,471.791,2,K*68 $PWHDEP,473.563,1,K*66 $PWHDEP,474.005,2,K*67 $PWHDEP,474.217,2,K*66 $PWHDEP,474.333,1,K*62 $PWHDEP,476.863,1,K*6E $PWHDEP,476.921,2,K*6A $PWHDEP,477.274,2,K*60 DATA SOURCE FILE: host.h host.cpp ---------------------------------------------------------------------- I.2.2: $PWHALT NMEA ALTIMETER ALTITUDE STRING from host to dvlnav ---------------------------------------------------------------------- FORMAT: $PWHALT,,* may contain any number of digits before and after the decimal point. It should be a positive number. A "+" sign is allowed but not required. is a character specifying the sensor datum K indicates that sensor value is measured from keel T indicates that sensor value is measured from transducer is the two digit hexadecimal checksum EXAMPLE: $PWHALT,506.963,K*7C $PWHALT,507.807,K*7E $PWHALT,510.518,K*7B $PWHALT,511.469,K*7D $PWHALT,514.412,K*74 $PWHALT,515.410,K*77 $PWHALT,518.400,K*7B $PWHALT,519.383,K*76 $PWHALT,522.232,K*75 $PWHALT,523.137,K*72 $PWHALT,525.667,K*76 $PWHALT,526.437,K*72 $PWHALT,528.488,K*78 $PWHALT,529.076,K*7C $PWHALT,530.519,K*78 $PWHALT,530.887,K*72 $PWHALT,531.632,K*73 $PWHALT,531.758,K*7E DATA SOURCE FILE: host.h host.cpp ---------------------------------------------------------------------- I.2.3: $PWHLBL NMEA LBL TRAVEL TIME STRING from host to dvlnav ---------------------------------------------------------------------- FORMAT: $PWHLBL,,,,* is the round-trip travel time between the vehicle LBL ducer and the transponder A in positive integer units of 100 microseconds. It can contain any number of digits. It should not contain a decimal point. Units are 100 microseconds (0.1 millisecond). same format as , but for transponder B. same format as , but for transponder C. same format as , but for transponder D. is the two digit hexadecimal checksum EXAMPLE: $PWHLBL,2055546,1397837,1911208,2996497*04 $PWHLBL,2058602,1401780,1914264,2994357*07 $PWHLBL,2059205,1395915,1910974,2995100*02 $PWHLBL,2059588,1394115,1908726,2997037*0E $PWHLBL,2063857,1397374,1912297,2993600*0C $PWHLBL,2067484,1391127,1909341,2993404*0E $PWHLBL,2071128,1391391,1909711,2992674*00 $PWHLBL,2073126,1388771,1908596,2992443*04 ---------------------------------------------------------------------- I.2.4: $PWHTMP NMEA WATER TEMPERATURE SENSOR STRING from host to dvlnav ---------------------------------------------------------------------- FORMAT: $PWHTMP,,,* may contain any number of digits before and after the decimal point. It should be a positive number. A "+" sign is allowed but not required. is a character specifying the sensor datum C indicates centigrade (use this please) F indicates Fahrenheit (will be converted to C by dvlnav) Ascii string identifying the sensor source. recognized tags are: H High Temp Probe L Low Temp Probe I1 ICL Probe #1 I2 ICL Probe #2 A Ambient temperture is the two digit hexadecimal checksum Note: the "$PWHTMP" nmea string header can have additional trailing characters. They are ignored. This feature was added for the Alvin group. EXAMPLE: DATA SOURCE FILE: host.h host.cpp ---------------------------------------------------------------------- I.2.5: $PWHSOS NMEA SOUND VELOCITY SENSOR STRING from host to dvlnav ---------------------------------------------------------------------- FORMAT: $PWHSOS,* may contain any number of digits before and after the decimal point. It should be a positive number. A "+" sign is allowed but not required. is the two digit hexadecimal checksum EXAMPLE: $PWHSOS,1500.000*36 ---------------------------------------------------------------------- I.2.6: $PWHCTD NMEA CTD SENSOR STRING from host to dvlnav ---------------------------------------------------------------------- FORMAT: $PWHCTD,,,* All data fields may contain any number of digits before and after the decimal point. They should be positive numbers. A "+" sign is allowed but not required. is decimal units of Seimens per meter. is decimal units of degrees C. is decimal units of depth in meters. Note: 1 Siemen/meter = 10 mmho/cm. To convert from Siemen/meter to mmho/cm, multiply the Siemen/meter value by 10. To convert from mmho/cm to Siemen/meter, divide the mmho/cm value by 10. is the two digit hexadecimal checksum EXAMPLE: $PWHCTD,36.256299,12.512598,485.587769*22 $PWHCTD,36.811789,13.623578,495.345547*26 $PWHCTD,37.342583,14.685167,468.367608*29 $PWHCTD,37.841448,15.682896,492.192721*21 $PWHCTD,38.041757,16.083513,481.599601*21 $PWHCTD,38.483534,16.967067,497.791131*20 $PWHCTD,38.877829,17.755659,469.480821*29 $PWHCTD,39.346987,18.693975,477.767897*29 $PWHCTD,39.605305,19.210610,499.375805*25 DATA SOURCE FILE: host.h host.cpp ---------------------------------------------------------------------- I.2.7: $PWHTIM TIME STRING from host to dvlnav ---------------------------------------------------------------------- This string is used to send FORMAT: $PWHTIM,//
::,* Where: 1. is a four digit YEAR. 2. is a two digit MONTH, with January=1. 3.
is a two digit DAY OF MONTH. 4. is a two digit HOUR OF DAY in 24 hour format. 5. is a two digit MINUTE OF HOUR. 6. is seconds, in decimal notation to any second resolution. PREFERRED RESOLUTION FOR SECONDS IS 0.001 SECOND! is a character specifying the source of the time stamp H if the time stamp is from the HOST computer D if the time stamp is from the DVLNAV computer is the two digit hexadecimal checksum EXAMPLE: Note: checksum is not valid ont his example: $PWHTIM,2001/06/07 09:39:43.411,H*00 DATA SOURCE FILE: host.h host.cpp ------------------------------------------------------------------------- I.2.8: XBW Format for Crossbow Data (from Jon Howland) ------------------------------------------------------------------------- LOG DATA DESCRIPTION This XBW String logs data from the Crossbow AHRS See Appendix on angle conventions. The crossbow's absolute heading reference is magnetic. The value logged has been corrected by adding the magnetic variation. The applied variation is logged with the data. Reported accelerations and magnetic field strengths are in the instrument coordinate frame. LOG DATA SOURCE This data string is generated by the SIO_crossbow thread of the rov program every time a new Crossbow data message is received. LOG DATA FREQUENCY Between 5 and 10 Hz LOG DATA FIELDS 1. "XBW" 2. Date/time string: YYYY/MM/DD HH:MM:SS.SSS 3. "AHRS" 4. vehicle name as entered into the rov configuration file 5. Heading in degrees (magnetic, NOT TRUE) 6. Pitch in degrees 7. Roll in degrees 8. Heading Rate in degrees/second 9. Pitch Rate in degrees/second 10. Roll Rate in degrees/second 11. X Acceleration in G 12. Y Acceleration in G 13. Z Acceleration in G 14. X Magnetic Field in Gauss 15. Y Magnetic Field in Gauss 16. Z Magnetic Field in Gauss 17. magnetic variation in degrees (already applied to item 5, heading) 18. Temperature in degrees C. 19. Magnetic variation (aka declanation) source code - how was the magnetic variation determined? Codes are: 1000 = USGS tables based on local XY origin Lat and Lon 1001 = Unknown 1002 = config file (manually entered into the config file) 1003 = Jasontalk command (i.e. from pilot gui, engineer gui, or backdoor). 9999 = This variation value is wrong, don't use it. LOG DATA STRING SAMPLE LOG DATA SOURCE FILE SIO_crossbow.c LOG DATA STRING SOURCE CODE ------------------------------------------------------------------------- I.2.9: VIS Format for Magnetometer ------------------------------------------------------------------------- Not implemented. ------------------------------------------------------------------------- I.2.10: VIS Format for SBE37 CTD Data (from Jon Howland) ------------------------------------------------------------------------- LOG DATA DESCRIPTION This String logs data from the Seabird SBE37 Conductivity/ Temperature/Depth instrument The SBE37 can be purchased with or without a depth sensor, so this format will accomodate both varieties. LOG DATA SOURCE This data string is generated by the SIO_seabird thread of the rov program every time a new ctd data message is received. LOG DATA FREQUENCY ? LOG DATA FIELDS 1. "VIS" 2. Date/time string: YYYY/MM/DD HH:MM:SS.SS 3. "SBE37" 4. vehicle name as entered into the rov configuration file 5. Conductivity 6. Temperature 7. Depth, if available LOG DATA STRING SAMPLE LOG DATA SOURCE FILE SIO_seabird.c LOG DATA STRING SOURCE CODE ------------------------------------------------------------------------- I.2.11: VDS Format for Paroscientific Data (from Jon Howland) ------------------------------------------------------------------------- LOG DATA DESCRIPTION This string logs data from the Paroscientific depth sensor Depth is logged as positive down LOG DATA SOURCE This data string is generated by the SIO_parosci thread of the rov program every time a new paroscientific data message is received. LOG DATA FREQUENCY Currently in flux--between 5 and 10 Hz LOG DATA FIELDS 1. "VDS" 2. Date/time string: YYYY/MM/DD HH:MM:SS.SS 3. "PAR" 4. vehicle name as entered into the rov configuration file 5. Depth in meters LOG DATA STRING SAMPLE LOG DATA SOURCE FILE SIO_parosci.c LOG DATA STRING SOURCE CODE ---------------------------------------------------------------------- I.2.12: $PWHMAG MAGNETOMETER DATA ---------------------------------------------------------------------- DATA DESCRIPTION: Vehicle navigation string sent from HOST to DVLNAV, presently via RS232 and UDP, containing magnetometer data. DATA SOURCE: Host (athena) DATA FREQUENCY: Several hertz once maggie is energized. DATA FORMAT: FORMAT: $PWHMAG,:,,,,,0* YYYY/MM/DD HH:MM:SS.SSS Magnetic component in gauss. Magnetic component in gauss. Magnetic component in gauss. Magnetic component in gauss. Magnitude gauss. ,0 Verbatim dummy data Two digit hexadecimal checksum EXAMPLE: ---------------------------------------------------------------------- I.2.13: PNS Platform Navigation String ---------------------------------------------------------------------- DATA DESCRIPTION: The PNS platform navigation string contains a X, Y, Depth navigation fix of the ROV, SHIP, or the DEPRESSOR (medea). It is sent from an external navigation source (LBL, USBL, GPS, etc) to dvlnav. The ROV's LBL position is set with this external data input. DATA SOURCE: Host DATA FREQUENCY: Determined by the host DATA FORMAT: PNS DATA FIELDS: 1. "PNS" 2. Date/time string: YYYY/MM/DD HH:MM:SS.SSS 3. Three letter data source tag indicating the system that generated the data contained in this message. DVLNAV presently logs this information but does not use it. Examples: GPS = Global Positioning System LBL = Long Baseline Acoustic Navigation 4. Three character flag indicating coordinate convention UTM = Universal Transverse Mercator GLL = Latitude and Longitude in decimal degrees NEN = LBL XY coordinates, meters Dvlnav uses this field to convert the fix data into its internal representation of XY. 5. Three character vehicle label. Presently supported are: ROV = The ROV LBL position FSH = The ROV LBL position SHP = The SHIP's position MED = The depressor weight's posision ALV = Alvin 6. Vehicle X East in meters (UTM and NEN) or decimal degrees longitude (GLL) 7. Vehicle Y North in meters (UTM and NEN) or decimal degrees latitude (GLL) 8. Vehicle Z Depth in meters 9. GPS Pdop. This field should be zero for non-gos navigation sources. 10. GPS # Satellites. This field should be zero for non-GPS navigation sources. EXAMPLE: GPS fix for the SHIP in Lat/Lon: PNS 02/07/22 18:02:51.20 WRN GLL SHP 45.828080 -125.130062 20.60 1.1 8 GPS fix for the SHIP in UTM: PNS 02/07/22 18:02:51.20 GPS UTM SHP 334555.37 5077152.58 20.60 1.1 08 LBL fix for the depressor weight Medea in LBL XY coordinates: PNS 02/07/22 18:02:12.00 LBL NEN MED 334567.50 5077138.79 1619.31 0.0 0 LBL fix for the ROV in LBL XY coordinates: PNS 02/07/22 18:02:22.00 LBL NEN ROV 334568.32 5077137.85 1618.46 0.0 00 ---------------------------------------------------------------------- I.2.14: PAS Platform Atitude String ---------------------------------------------------------------------- DATA DESCRIPTION: The PAS platform navigation string contains a heading, pitch, and roll fix for the SHIP, or the DEPRESSOR (medea). It is sent from an external navigation source (GYRO, Asgtek GPS, etc) to dvlnav. Note: The ROV's atitude cannot be set with this input. To set the ROV's atitude, use one of the gyro or mag compass stings. DATA SOURCE: Host DATA FREQUENCY: Determined by the host DATA FORMAT: PAS DATA FIELDS: 1. "PAS" 2. Date/time string: YYYY/MM/DD HH:MM:SS.SSS 3. Three character vehicle label. Presently supported are: ROV = The ROV LBL position FSH = The ROV LBL position SHP = The SHIP's position MED = The depressor weight's posision 6. Vehicle Heading in Degrees TRUE. 7. Pitch in Degrees. +Pitch is bow UP. -Pitch is bow DOWN. 8. Roll in Degrees. +Roll is Starboard side DOWN. -Roll is Starboard side UP. EXAMPLE: Example of data from ships gyro with no roll or pitch information: PAS 02/07/22 18:02:52.84 SHP 352.1 0.0 0.0 PAS 02/07/22 18:04:05.62 SHP 352.2 0.0 0.0 ---------------------------------------------------------------------- I.2.15: APAS Platform Atitude String ---------------------------------------------------------------------- DATA DESCRIPTION: The APAS platform navigation string contains a heading, pitch, and roll fix for the depressor weight (Medea or hercules). DATA SOURCE: Host DATA FREQUENCY: Determined by the host DATA FORMAT: APAS DATA FIELDS: 1. "APAS" 2. Date/time string: YYYY/MM/DD HH:MM:SS.SSS 3. Three character vehicle label. Presently supported are: ARGUS = The depressor weight's posision 6. Vehicle Heading in Degrees TRUE. 7. Pitch in Degrees. +Pitch is bow UP. -Pitch is bow DOWN. 8. Roll in Degrees. +Roll is Starboard side DOWN. -Roll is Starboard side UP. EXAMPLE: Example of data from ships gyro with no roll or pitch information: APAS 2004/05/23 22:27:25.432 ARGUS 0.0 0.0 0.0 0.00 0.00 APAS 2004/05/23 22:27:25.645 ARGUS 0.0 0.0 0.0 0.00 0.00 ---------------------------------------------------------------------- I.2.16: $PVGGA NMEA Ship (primary vehicle) position string. $GPGGA NMEA Ship position string. ---------------------------------------------------------------------- DATA DESCRIPTION: NMEA Ship (primary vehicle) position string. Data fields are comma delimited. DATA SOURCE: Host DATA FREQUENCY: Determined by the host DATA FORMAT: $PVGGA,,,,,,0,00,0.0,0.0,M,,,,*02 $GPGGA,,,,,,0,00,0.0,0.0,M,,,,*02 DATA FIELDS: 1. "$PVGGA," or "$GPGGA," 2. Timestamp 3. Latitide in decimal degrees (first two digits) and decimal minutes to five digits of precsion past the decimal point, thus "4041.35810" represents 40 degrees 41.35810 minutes. 4. Latitide letter code. N indicates North. S indicates South. 5. Longitude in decimal degrees (first three digits) and decimal minutes to five digits of precsion past the decimal point, thus "06734.82590" represents 77 degrees 34.82590 minutes. 6. Longitude letter code. W indicates West. E indicates East. 4. Unused fields: 0,00,0.0,0.0,M,,,,* 5. Two digit NMEA checksum EXAMPLE: $PVGGA,6185855.02,4041.35630,N,06734.82320,W,0,00,0.0,0.0,M,,,,*02RN $PVGGA,618591.02,4041.36750,N,06734.83980,W,0,00,0.0,0.0,M,,,,*37RN ---------------------------------------------------------------------- I.2.17: $PVHDG NMEA Ship (primary vehicle) heading string. $HEHDT NMEA Ship heading string. ---------------------------------------------------------------------- DATA DESCRIPTION: $PVHDG NMEA Ship (primary vehicle) heading string. Data fields are comma delimited. DATA SOURCE: Host DATA FREQUENCY: Determined by the host DATA FORMAT: $PVHDG, $HEHDT, DATA FIELDS: 1. "$PVHDG," or "$HEHDT," 2. Heading in degrees True. 3. EXAMPLE: $PVHDG,314.008 ---------------------------------------------------------------------- I.2.18: $M1GGA NMEA Hercules (mobile #1 vehicle) position string. ---------------------------------------------------------------------- DATA DESCRIPTION: NMEA Hercules (mobile #1 vehicle) position string. Data fields are comma delimited. DATA SOURCE: Host DATA FREQUENCY: Determined by the host DATA FORMAT: $M1GGA,,,,,,0,00,0.0,0.0,M,,,,*02 DATA FIELDS: 1. "$M1GGA," 2. Timestamp 3. Latitide in decimal degrees (first two digits) and decimal minutes to five digits of precsion past the decimal point, thus "4041.35810" represents 40 degrees 41.35810 minutes. 4. Latitide letter code. N indicates North. S indicates South. 5. Longitude in decimal degrees (first three digits) and decimal minutes to five digits of precsion past the decimal point, thus "06734.82590" represents 77 degrees 34.82590 minutes. 6. Longitude letter code. W indicates West. E indicates East. 4. Unused fields: 0,00,0.0,0.0,M,,,,* 5. Two digit NMEA checksum EXAMPLE: $M1GGA,2190349.47,3948.58707,N,06615.94312,W,0,00,0.0,0.0,M,,,,*72RN ---------------------------------------------------------------------- I.2.19: $M2GGA NMEA Argus (mobile #2 vehicle) position string. ---------------------------------------------------------------------- DATA DESCRIPTION: NMEA Argus (mobile #2 vehicle) position string. Data fields are comma delimited. DATA SOURCE: Host DATA FREQUENCY: Determined by the host DATA FORMAT: $M2GGA,,,,,,0,00,0.0,0.0,M,,,,*02 DATA FIELDS: 1. "$M2GGA," 2. Timestamp 3. Latitide in decimal degrees (first two digits) and decimal minutes to five digits of precsion past the decimal point, thus "4041.35810" represents 40 degrees 41.35810 minutes. 4. Latitide letter code. N indicates North. S indicates South. 5. Longitude in decimal degrees (first three digits) and decimal minutes to five digits of precsion past the decimal point, thus "06734.82590" represents 77 degrees 34.82590 minutes. 6. Longitude letter code. W indicates West. E indicates East. 4. Unused fields: 0,00,0.0,0.0,M,,,,* 5. Two digit NMEA checksum EXAMPLE: $M2GGA,2190416.34,3948.59289,N,06615.92219,W,0,00,0.0,0.0,M,,,,*76RN ---------------------------------------------------------------------- I.2.20: CT2 Hercules CTD string ---------------------------------------------------------------------- DATA DESCRIPTION: Hercules CTD string DATA SOURCE: Host DATA FREQUENCY: Determined by the host DATA FORMAT: CT2 Please see the CTD manual for units, precision, and accuracy. SOURCE CODE: ---------------------------------------------------------------------- Here is the code that creates the CT2 string in topside source file fsi_ctd.cpp: ---------------------------------------------------------------------- /****************************************************** ** log_fsi_ctd ****** does the obvious ***** ** written by jch, 28 Dec 2002 ** ******************************************************/ int log_fsi_ctd(ctd_t ctd,char *buf) { static char str[MSG_DATA_LEN_MAX]; int header_len; int len = 0; len += sprintf (&(str[len]), "CT2 "); header_len = len += rov_sprintf_dsl_time_string (&(str[len])); #define FMT " %s " len += sprintf (&(str[len]), FMT, vehicle_acronym_array[rov.vehicle_type]); len += sprintf (&(str[len]), FMT, "FSICTD"); #undef FMT #define FMT " %.3f" len += sprintf(&(str[len]), FMT, ctd.conductivity); len += sprintf(&(str[len]), FMT, ctd.temperature); len += sprintf(&(str[len]), FMT, ctd.depth); len += sprintf(&(str[len]), FMT, ctd.salinity); len += sprintf(&(str[len]), FMT, ctd.sound_velocity); len += sprintf(&(str[len]), FMT, ctd.pressure); len += sprintf(&(str[len]), " R: %s",buf+1); len += sprintf(&(str[len]), "\n"); SEND_TO_LOGGER(CTD,SENSOR_THREAD, len,str); return 1; } ---------------------------------------------------------------------- Here is the code that parses the CT2 string in dvlnav source file host.cpp: ---------------------------------------------------------------------- // -------------------------------------------------- // 12 May 2004 LLW Added Hercules CTD sensor string // -------------------------------------------------- if( 0 == strncmpi("CT2",str,3) ) { int args; ctd_t new_ctd = {0.0}; int yr; int mo; int da; int hr; int min; double sec; rov_time_t time_now; // int DATA_IS_GOOD = 0; // attempt to parse args = sscanf(str, "CT2 %d/%d/%d %d:%d:%lf %*s %*s %lf %lf %lf %lf %lf %lf", &yr,&mo,&da,&hr,&min,&sec, &new_ctd.cond, &new_ctd.temp, &new_ctd.depth, &new_ctd.salinity, &new_ctd.sv, &new_ctd.pressure); // if parsed OK, then convert and assign if( args == 12 ) { // check to see if depth field is valid, if not then // compute depth from pressure // finish filling the new data structure new_ctd.time = rov_get_time(); new_ctd.source = SRC_CTD; strcpy(new_ctd.raw_data_string, str); // assign the data structure dvlnav->ctd_last = dvlnav->ctd; dvlnav->ctd = new_ctd; // store a copy of the string in location 0 by default strncpy(dvlnav->host.most_recent_string[HOST_NMEA_CTD_STRING_INDEX], str, len); // save string status dvlnav->host.most_recent_string_status[HOST_NMEA_CTD_STRING_INDEX] = HOST_RX_STRING_OK; dvlnav->host.most_recent_string_time[HOST_NMEA_CTD_STRING_INDEX] = new_ctd.time; status = HOST_RX_STRING_OK; *parse_string_type = HOST_NMEA_CTD_STRING_INDEX; } } ---------------------------------------------------------------------- I.2.21: $PWHTT NMEA generic LBL travel time string from host to dvlnav ---------------------------------------------------------------------- FORMAT: $PWHTT,,,,,,,,, ,,, ,,,,,,,, ... ,,,,,,,, ... ,,,,,,,, ... * Example 1: Ship Cycle, with GPS fix already corrected to ship's transducer 1, 3ms turnaround time on all frequencies, 15 second cycle time, ping on 9.0 KHZ, 3 frequencies returned, with 4 travel-times per frequency: $PWHTT,2005/07/27 10:23:04.234,42.12345,-74.12345,-5.5,T1,359.9T, DSS,, 15.0,9.0,3, 9.0,3,,4,1.234,1.345,1.446,1.567, 10.0,3,,4,1.234,1.345,1.446,1.567, 11.5,3,,4,1.234,1.345,1.446,1.567, *FF Example 2: Alvin Relay Cycle, with GPS fix corrected to ship's transducer, using transducer 1 and GPS antenna 2, 15 seconds per LBL cycle, ping interrogation on 8.5 KHZ, 4 frequencies of returns, with 5 travel-time returns per frequency: $PWHTT,2005/07/27 10:23:04.234,42.12345,-74.12345,-5.5,T12,359.9T, RSA,, 15,8.5,4, 9.0,3,,5,1.234,1.345,1.446,1.567,1.678, 10.0,3,,5,1.234,1.345,1.446,1.567,1.678, 11.5,3,,5,1.234,1.345,1.446,1.567,1.678, *FF Example 3: Elevator Relay Cycle, with GPS fix corrected to ship's transducer, 15.0 second LBL cycle, ping interrogation at 13.0 KHZ, 4 frequencies returned, with 5 travel-time returns per frequency: $PWHTT,2005/07/27 10:23:04.234,42.12345,-74.12345,-5.5,T,359.9T, RSE,, 15,13,4, 9.0,3,,5,1.234,1.345,1.446,1.567,1.678, 10.0,3,,5,1.234,1.345,1.446,1.567,1.678, 11.5,3,,5,1.234,1.345,1.446,1.567,1.678, *FF Fields: 1. $PWHTT 2. YYYY/MM/DD HH:MM:SS.SSS If possible this should be the time of the start of the LBL cycle or the time of some other known repeatable point in the cycle such as the end of the cycle. 3. Latitude of vehicle if known. Decimal degrees, prefer 6 decimal places. Should not be less than 5 decimal places. positive=North, negative=South Use Zero if no data available, do not leave blank. 4. Longitude of vehicle if known. Decimal degrees, prefer 6 decimal places. Should not be less than 5 decimal places. positive=East, negative=West Use Zero if no data available, do not leave blank. 5. Depth of transducer in meters below sea level (negative) height of antenna in meters above sea level (positive) Use Zero if no data available, do not leave blank. 6. Character string to indicate several details about the preceeding fix: First Character: G Indicates that the lat/lon fix is for the GPS antenna position T Indicates that the lat/lon fix is for the LBL transducer position Second Character: (optional) Integer index of LBL transducer presently in use. Assume 1 if not present. Third Character: (optional) Integer index of GPS antenna presently in use. Assume 1 if not present. Example: T12 The preeceding fix is for the transducer position. LBL ducer 1 is presently in use. GPS antenna 2 is presently in use. G32 The preeceding fix is for the GPS antenna position. LBL ducer 3 is in use. GPS antenna 2 is in use. GPS and LBL ducer positions are specified in the dvlnav INI file. Fourth and beyond Character: (optional) Letter indicating coordinate system of XY fix. L indicates that the fix is , U indicates that the fix is UTM in the order , The user is responsible for knowing the ITM zone, it is not encoded in this string. X indicates that the fix is in LBL XY coords. The user is responsible for knowing the LBL XY origin, it is not encoded in this string. 7. Heading of vehicle (optional, can be blank). Decimal degrees TRUE heading. Format: decimal degrees followed immediately by an optional one character tag: T for true heading M for magnetic heading If the tag character is missing, then the data is assumed to be true heading. This field should have at least many decimal places of precision as the heading sensor itself. Use Zero if no data available, do not leave blank. 8. Character string to indicate what type of LBL cycle this LBL data represents. First character indicates cycle type: D = Direct Cycle. Ship (or whichever vehicle I am) interrogates the net at 9.0KHZ and gets round-trip travel times on multiple frequencies. R = Relay Cycle. Ship (or whichever vehicle I am) initiates the cycle with, say, an 8.5KHZ ping which triggers the vehicle to interrogate the net 9.0KHZ. The 9.0 KHZ return will encode two-way slant range. The other returns will be three sided triangle paths. P = Responder Cycle: Vehicle being navigated (see next field) initiates the 9.0KHZ net interrogation via an electronic signal or a precision synchronized clock. The 9.0 KHZ return will encode one-way slant range. The other returns will be two sided triangle paths. H = Hyperbolic transponder travel times - for future ABE/Sentry hyperbolic navigation mode employing autonomous syncronized transponders which ping at the same instant. S = Synchronous clock cycle Required character to indicate which vehicle initiated this LBL cycle: S = Ship A = Alvin or other AUV R = ROV M = Medea E = Elevator T = Trawl H = Hyperbolic xponder mode Optional integer to indicate vehicle number of the vehicle which initiated this cycle in the case where multiple vehicles are present. Required character to indicate which vehicle is being navigated by this LBL cycle. Same convention as previous character. Optional integer to indicates vehicle number of the vehicle which is being navigated in the case where multiple vehicles are present. Optinal character and optoinal number to indicate which vehicle I am. Same convention as previous. EXAMPLES: DSS Normal ship cycle to fix ship position. D for direct returns S for ship initiated cycle S for ship fix is computed on this ping. Ship pings at 9.0 Tranponders reply. RSA Normal Alvin relay cycle. R for relay cycle. S for ship initiated cycle A for Alvin fix is computed on this ping. Ship pings alvin at, say, 8.5. Alvin pings at 9.0 Tranponders reply. RSE Relay cycle to navigate elevator. R for relay cycle. S for ship initiated cycle E for Elevator fix is computed on this ping. Ship pings alvin at, say, 8.0. Elevator pings at 9.0 Tranponders reply. PAA Alvin cycle when equipped with precision clock. Alvin pings at 9.0 at predetermined time. Tranponders reply. Note that the above codes work equally well for shipboard (top-lab) LBL nav and also for in-hull (Alvin) nav. The vehicles already know if they are the ship or the vehicle, so we do not need an additional field to indicate "what vehicle am I?". 9. Unused, for future use 10. Period in seconds of this LBL cycle. This is normally a constant period, with the LBL box generating one interrogation ping at this periodicity. Field can be blank if data is unknown. 11. Frequency in KHZ of the interrogation ping for this LBL cycle. Field can be blank if data is unknown. 12. Number of frequencies in data to follow Each frequency may contain zero or many travel times. The remainder of this string is variable length, with one group of travel times for each of the specified number of frequencies. Each set of returns follows the following format: ,,,,,, where ALL fields are comma-separated is the frequency in decimal KHZ. is OPTIONAL turnaround time in milliseconds. Whole or decimal fraction milliseconds are permitted. If absent (blank field) then dvlnav will use the value programmed for this frequency in its ini file. If the acoustic transciever has already subtracted a travel time, then it should appear here as a NEGATIVE number, indicating that this TAT has already been subtracted from the travel times. The sending program should not subtract multiple TATs in the case of relay navigation frequencies. is an unused field for future use. Presently blank. is the integer number of returns to follow. Can be zero for no returns. ,, are the specified nuber of travel times in seconds. The above pattern is repeated for all available frequencies. The string is terminated with a normal NMEA termination comprised of a ",", a two-digit HEX checksum, and a : ,* ---------------------------------------------------------------------- I.2.21: USBL strings ---------------------------------------------------------------------- DATA DESCRIPTION: USBL strings provide ship-referenced fix of USBL beacons. DATA SOURCE: Host DATA FREQUENCY: Determined by the host DATA FORMAT: