INTRODUCTION
Overview
Download and Install
Documentation
Publications

REPOSITORY
Libraries

DEVELOPER
Dev Guide
Dashboard

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         

novatelmessages.h

00001 /*
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
 

Generated for GearBox by  doxygen 1.4.5