INTRODUCTION Overview Download and Install Documentation Publications REPOSITORY Libraries DEVELOPER Dev Guide Dashboard PEOPLE Contributors Users Project Download Mailing lists
|
novatelmessages.h00001 /* 00002 * GearBox Project: Peer-Reviewed Open-Source Libraries for Robotics 00003 * http://gearbox.sf.net/ 00004 * Copyright (c) 2004-2010 Michael Moser 00005 * 00006 * This distribution is licensed to you under the terms described in 00007 * the LICENSE file included in this distribution. 00008 * 00009 */ 00010 #ifndef GBX_NOVATEL_MESSAGES_H 00011 #define GBX_NOVATEL_MESSAGES_H 00012 00013 #include <stdint.h> // for uint8_t and friends 00014 00015 namespace gbxnovatelutilacfr{ 00016 enum BinaryLogType{ 00017 RawImuSBLogType = 325, 00018 BestGpsPosBLogType = 423, 00019 BestGpsVelBLogType = 506, 00020 InsPvaSBLogType = 508, 00021 InvalidLogType 00022 }; 00023 00024 #pragma pack(push,1) 00025 // binary packet header; long version, mostly used for GPS gear 00026 // according to: 00027 // OEM4 Family Firmware Version 2.300 Command and Log Reference Rev 16; Table 4; Page 17 00028 typedef struct Oem4BinaryHeader{ //offs, size, comment 00029 uint8_t sb1; //0 1 0xaa 00030 uint8_t sb2; //1 1 0x44 00031 uint8_t sb3; //2 1 0x12/0x13 , depending on long/short format 00032 uint8_t headerLength; //3 1 00033 uint16_t msgId; //4 2 which log we have 00034 uint8_t msgType; //6 1 binary, ascii ... 00035 uint8_t portAddress; //7 1 00036 uint16_t msgLength; //8 2 _without_ header or CRC 00037 uint16_t seqNr; //10 2 for multiple related messages at a time (i.e. one per satellite) 00038 uint8_t idleTime; //12 1 00039 uint8_t timeStatus; //13 1 00040 uint16_t gpsWeekNr; //14 2 00041 uint32_t msIntoWeek; //16 4 milliseconds from beginning of week 00042 uint32_t receiverStatus; //20 4 00043 uint16_t reserved; //24 2 00044 uint16_t swVersion; //26 2 00045 }Oem4BinaryHeader; 00046 00047 // binary packet header; short version, mostly used for (higher rate) INS gear 00048 // according to: 00049 // SPAN Technology for OEMV User Manual Rev 3; Table 17; Page 74 00050 typedef struct Oem4ShortBinaryHeader{ //offs, size, comment 00051 uint8_t sb1; //0 1 0xaa 00052 uint8_t sb2; //1 1 0x44 00053 uint8_t sb3; //2 1 0x12 00054 uint8_t msgLength; //3 1 _without_ header or CRC 00055 uint16_t msgId; //4 2 which log we have 00056 uint16_t GpsWeekNr; //6 2 00057 uint32_t msIntoWeek; //8 4 milliseconds from beginning of week 00058 }Oem4ShortBinaryHeader; 00059 00060 00061 typedef struct{ //offs size comment 00062 uint32_t solutionStatus; //0 4 00063 uint32_t positionType; //4 4 00064 double latitude; //8 8 [deg] north positive 00065 double longitude; //16 8 [deg] east positive 00066 double heightAMSL; //24 8 [m] AMSL == above mean sea level (geoid) 00067 float undulation; //32 4 [m] aka geoidal seperation: undulation == heigth_ellipsoid - height_geoid/AMSL 00068 uint32_t datumId; //36 4 00069 float sigmaLatitude; //40 4 [m] 1 standard deviation error estimate 00070 float sigmaLongitude; //44 4 [m] 1 standard deviation error estimate 00071 float sigmaHeight; //48 4 [m] 1 standard deviation error estimate 00072 int8_t baseStationId[4]; //52 4 00073 float diffAge; //56 4 [s] 00074 float solutionAge; //60 4 [s] 00075 uint8_t numObservations; //64 1 number of observations tracked (?) L1 code/carrier/doppler + L2 code/carrier/doppler? 00076 uint8_t numL1Ranges; //65 1 number of L1 ranges used in computation (?) 00077 uint8_t numL1RangesRTK; //66 1 number of L1 ranges above the RTK mask angle (??) number of L1 carrier ranges used? 00078 uint8_t numL2RangesRTK; //67 1 number of L2 ranges above the RTK mask angle (??) number of L2 carrier ranges used? 00079 uint8_t reserved0; //68 1 00080 uint8_t reserved1; //69 1 00081 uint8_t reserved2; //70 1 00082 uint8_t reserved3; //71 1 00083 uint32_t crc; //72 4 00084 }BestGpsPosData; 00085 00086 typedef struct{ 00087 Oem4BinaryHeader header; 00088 BestGpsPosData data; 00089 }BestGpsPosLogB; 00090 00091 typedef struct{ //offs size comment 00092 uint32_t solutionStatus; //0 4 00093 uint32_t velocityType; //4 4 00094 float latency; //8 4 [s] 00095 float diffAge; //12 4 [s] 00096 double horizontalSpeed; //16 8 [m/s] 00097 double trackOverGround; //24 8 [deg] w respect to true North 00098 double verticalSpeed; //32 8 [m/s] 00099 float reserved; //40 4 00100 uint32_t crc; //44 4 00101 }BestGpsVelData; 00102 00103 typedef struct{ 00104 Oem4BinaryHeader header; 00105 BestGpsVelData data; 00106 }BestGpsVelLogB; 00107 00108 typedef struct{ //offs size comment 00109 uint32_t gpsWeekNr; //0 4 00110 double secIntoWeek; //4 8 00111 double latitude; //12 8 [deg] north positive WGS84 00112 double longitude; //20 8 [deg] east positive WGS84 00113 double height; //28 8 [m] above ellipsoid WGS84 (heigth_ellipsoid - undulation == height_geoid/AMSL) 00114 double northVelocity; //36 8 [m/s] south is negative; true north? 00115 double eastVelocity; //44 8 [m/s] west is negative; true east? 00116 double upVelocity; //52 8 [m/s] down is negative; geoid/ellipsoid vertical? 00117 //The default IMU axis definitions are: 00118 // Y - forward 00119 // Z - up 00120 // X - right hand side 00121 double roll; //60 8 [degree] right handed rotation from local level around y-axes 00122 double pitch; //68 8 [degree] right handed rotation from local level around x-axes 00123 double azimuth; //60 8 [degree] left handed around z-axes rotation from (true?) north clockwise 00124 uint32_t insStatus; //68 4 00125 uint32_t crc; //72 4 00126 }InsPvaData; 00127 00128 //binary log with full headers 00129 typedef struct{ 00130 Oem4BinaryHeader header; 00131 InsPvaData data; 00132 }InsPvaLogB; 00133 00134 //binary log with short header; *preferred*, since this log is usually done at high rate 00135 typedef struct{ 00136 Oem4ShortBinaryHeader header; 00137 InsPvaData data; 00138 }InsPvaLogSB; 00139 00140 typedef struct{ //offs size comment 00141 uint32_t gpsWeekNr; //0 4 00142 double secIntoWeek; //4 8 00143 uint32_t imuStatus; //12 4 00144 //The default IMU axis definitions are: 00145 // Y - forward 00146 // Z - up 00147 // X - out the right hand side 00148 int32_t zAccelCnt; //16 4 00149 int32_t yNegativAccelCnt ; //20 4 00150 int32_t xAccelCnt; //24 4 00151 int32_t zGyroCnt; //28 4 00152 int32_t yNegativGyroCnt; //32 4 00153 int32_t xGyroCnt; //36 4 00154 int32_t crc; //40 4 00155 }RawImuData; 00156 00157 //binary log with full headers 00158 typedef struct{ 00159 Oem4BinaryHeader header; 00160 RawImuData data; 00161 }RawImuLogB; 00162 00163 //binary log with short header; *preferred*, since this log is done at high rate 00164 typedef struct{ 00165 Oem4ShortBinaryHeader header; 00166 RawImuData data; 00167 }RawImuLogSB; 00168 #pragma pack(pop) 00169 } //namespace 00170 #endif |