Main MRPT website > C++ reference for MRPT 1.5.7
gnss_messages_novatel.h
Go to the documentation of this file.
1 /* +---------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2017, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +---------------------------------------------------------------------------+ */
9 #pragma once
10 
11 #include "gnss_messages_common.h"
12 
13 namespace mrpt {
14 namespace obs {
15 namespace gnss {
16 
17 // Pragma to ensure we can safely serialize some of these structures
18 #pragma pack(push,1)
19 
20 /** Novatel OEM6 regular header structure \sa mrpt::obs::CObservationGPS */
22 {
23  enum {
24  SYNCH0 = 0xAA,
25  SYNCH1 = 0X44,
26  SYNCH2 = 0x12
27  };
28 
29  uint8_t synch[3];
43 
45 };
46 
47 /** Novatel OEM6 short header structure \sa mrpt::obs::CObservationGPS */
49 {
50  enum {
51  SYNCH0 = 0xAA,
52  SYNCH1 = 0X44,
53  SYNCH2 = 0x13
54  };
55  uint8_t synch[3];
60 
62 };
63 
64 
65 namespace nv_oem6_position_type {
66 /** Novatel OEM6 firmware reference, table 84; Novatel SPAN on OEM6 firmware manual, table 26. */
68  NONE = 0,
69  FIXEDPOS = 1,
71  Reserved = 3,
72  FLOATCONV = 4,
73  WIDELANE = 5,
76  SINGLE = 16,
77  PSRDIFF = 17,
78  WAAS = 18,
79  PROPAGATED = 19,
80  OMNISTAR = 20,
81  L1_FLOAT = 32,
84  L1_INT = 48,
85  WIDE_INT = 49,
86  NARROW_INT = 50,
88  INS = 52,
89  INS_PSRSP = 53,
95  CDGPS = 66
96 };
97  const std::string OBS_IMPEXP & enum2str(int val); //!< for nv_position_type_t
98 }
99 
100 namespace nv_oem6_solution_status {
101 /** Novatel OEM6 firmware reference, table 85 */
103  SOL_COMPUTED = 0, //!< solution computed
104  INSUFFICIENT_OBS, //!< insufficient observations
105  NO_CONVERGENCE, //!< noconvergence
106  SINGULARITY, //!< singularity at parameters matrix
107  COV_TRACE, //!< covariance trace exceeds maximum (trace>1000m)
108  TEST_DIST, //!< test distance exceeded (max of 3 rejections if distance > 10km)
109  COLD_START, //!< not yet converged from cold start
110  V_H_LIMIT, //!< height or velocity limits exceeded
111  VARIANCE, //!< variance exceeds limits
112  RESIDUALS, //!< residuals are too large
113  DELTA_POS, //!< delta position is too large
114  NEGATIVE_VAR, //!< negative variance
115  INTEGRITY_WARNING=13, //!< large residuals make position unreliable
116  INS_INACTIVE, //!< ins has not started yet
117  INS_ALIGNING, //!< ins doing its coarse alignment
118  INS_BAD, //!< ins position is bad
119  IMU_UNPLUGGED, //!< no imu detected
120  PENDING = 18, //!< when a fix position command is entered, the receiver computes its own position and determines if the fixed position is valid
121  INVALID_FIX //!< the fixed position entered using the fix position command is not valid
122 };
123  const std::string OBS_IMPEXP & enum2str(int val); //!< for nv_solution_status_t
124 }
125 namespace nv_oem6_ins_status_type {
126 /** Novatel SPAN on OEM6 firmware reference, table 33 */
128  INS_INACTIVE = 0, //IMU logs are present, but the alignment routine has not started; INS is inactive.
129  INS_ALIGNING = 1, // INS is in alignment mode.
130  INS_HIGH_VARIANCE = 2, // The INS solution is in navigation mode but the azimuth solution uncertainty has exceeded the threshold.
131  INS_SOLUTION_GOOD = 3, // The INS filter is in navigation mode and the INS solution is good.
132  INS_SOLUTION_FREE = 6, // The INS filter is in navigation mode and the GNSS solution is suspected to be in error.
133  INS_ALIGNMENT_COMPLETE = 7, // The INS filter is in navigation mode, but not enough vehicle dynamics have been experienced for the system to be within specifications.
134  DETERMINING_ORIENTATION = 8, // INS is determining the IMU axis aligned with gravity.
135  WAITING_INITIALPOS = 9 // The INS filter has determined the IMU orientation and is awaiting an initial position estimate to begin the alignment process.
136 };
137  const std::string OBS_IMPEXP & enum2str(int val); //!< for nv_ins_status_type_t
138 }
139 
140 /** Novatel generic frame (to store frames without a parser at the present time). \sa mrpt::obs::CObservationGPS */
142 {
144  {}
145  nv_oem6_header_t header; //!< Frame header
146  std::vector<uint8_t> msg_body;
147 
148  void dumpToStream( mrpt::utils::CStream &out ) const MRPT_OVERRIDE; // See docs in base
149 protected:
150  void internal_writeToStream(mrpt::utils::CStream &out) const MRPT_OVERRIDE;
151  void internal_readFromStream(mrpt::utils::CStream &in) MRPT_OVERRIDE;
152 };
153 
154 /** Novatel generic short-header frame (to store frames without a parser at the present time). \sa mrpt::obs::CObservationGPS */
156 {
158  {}
159  nv_oem6_short_header_t header; //!< Frame header
160  std::vector<uint8_t> msg_body;
161 
162  void dumpToStream( mrpt::utils::CStream &out ) const MRPT_OVERRIDE; // See docs in base
163 protected:
164  void internal_writeToStream(mrpt::utils::CStream &out) const MRPT_OVERRIDE;
165  void internal_readFromStream(mrpt::utils::CStream &in) MRPT_OVERRIDE;
166 };
167 
168 
169 /** Novatel frame: NV_OEM6_BESTPOS. \sa mrpt::obs::CObservationGPS */
171  nv_oem6_header_t header; //!< Frame header
172  uint32_t solution_stat; //!< nv_oem6_solution_status::nv_solution_status_t
173  uint32_t position_type; //!< nv_oem6_position_type::nv_position_type_t
174  double lat,lon,hgt; //!< [deg], [deg], hgt over sea level[m]
175  float undulation;
177  float lat_sigma, lon_sigma, hgt_sigma; //!< Uncertainties (all in [m])
187  /** Return the geodetic coords as a mrpt::topography::TGeodeticCoords structure (requires linking against mrpt-topography)
188  * Call as: getAsStruct<TGeodeticCoords>(); */
189  template <class TGEODETICCOORDS>
190  inline TGEODETICCOORDS getAsStruct() const {
191  return TGEODETICCOORDS(fields.lat,fields.lon,fields.hgt);
192  }
193  bool getAllFieldDescriptions( std::ostream &o ) const MRPT_OVERRIDE;
194  bool getAllFieldValues( std::ostream &o ) const MRPT_OVERRIDE;
196 
197 /** Novatel frame: NV_OEM6_INSPVAS. \sa mrpt::obs::CObservationGPS */
199  nv_oem6_short_header_t header; //!< Frame header
202  double lat,lon,hgt;
205  uint32_t ins_status; //!< nv_oem6_ins_status_type::nv_ins_status_type_t
206  uint32_t crc;
208  /** Return the geodetic coords as a mrpt::topography::TGeodeticCoords structure (requires linking against mrpt-topography)
209  * Call as: getAsStruct<TGeodeticCoords>(); */
210  template <class TGEODETICCOORDS>
211  inline TGEODETICCOORDS getAsStruct() const {
212  return TGEODETICCOORDS(fields.lat,fields.lon,fields.hgt);
213  }
214  bool getAllFieldDescriptions( std::ostream &o ) const MRPT_OVERRIDE;
215  bool getAllFieldValues( std::ostream &o ) const MRPT_OVERRIDE;
217 
218 
219 /** Novatel frame: NV_OEM6_INSCOVS. \sa mrpt::obs::CObservationGPS */
221  nv_oem6_short_header_t header; //!< Frame header
222  uint32_t week;
223  double seconds_in_week;
224  double pos_cov[9]; //!< Position covariance matrix in local level frame (metres squared) xx,xy,xz,yx,yy,yz,zx,zy,zz
225  double att_cov[9]; //!< Attitude covariance matrix of the SPAN frame to the local level frame. (deg sq) xx,xy,xz,yx,yy,yz,zx,zy,zz
226  double vel_cov[9]; //!< Velocity covariance matrix in local level frame. (metres/second squared) xx,xy,xz,yx,yy,yz,zx,zy,zz
227  uint32_t crc;
229  bool getAllFieldDescriptions( std::ostream &o ) const MRPT_OVERRIDE;
230  bool getAllFieldValues( std::ostream &o ) const MRPT_OVERRIDE;
232 
233 /** Novatel frame: NV_OEM6_RANGECMP. \sa mrpt::obs::CObservationGPS */
235 {
237  {}
240  };
241 
242  nv_oem6_header_t header; //!< Frame header
244  std::vector<TCompressedRangeLog> obs_data;
246 
247  void dumpToStream( mrpt::utils::CStream &out ) const MRPT_OVERRIDE; // See docs in base
248 protected:
249  void internal_writeToStream(mrpt::utils::CStream &out) const MRPT_OVERRIDE;
250  void internal_readFromStream(mrpt::utils::CStream &in) MRPT_OVERRIDE;
251 };
252 
253 /** Novatel frame: NV_OEM6_RXSTATUS. \sa mrpt::obs::CObservationGPS */
255  nv_oem6_header_t header; //!< Frame header
261  uint32_t crc;
263 
264 /** Novatel frame: NV_OEM6_RAWEPHEM. \sa mrpt::obs::CObservationGPS */
266  nv_oem6_header_t header; //!< Frame header
269  uint32_t crc;
271 
272 /** Novatel frame: NV_OEM6_VERSION. \sa mrpt::obs::CObservationGPS */
274 {
276  {}
279  char model[16], serial[16];
280  char hwversion[16], swversion[16],bootversion[16];
281  char compdate[12], comptime[12];
282  };
283 
284  nv_oem6_header_t header; //!< Frame header
286  std::vector<TComponentVersion> components;
288 
289  void dumpToStream( mrpt::utils::CStream &out ) const MRPT_OVERRIDE; // See docs in base
290 protected:
291  void internal_writeToStream(mrpt::utils::CStream &out) const MRPT_OVERRIDE;
292  void internal_readFromStream(mrpt::utils::CStream &in) MRPT_OVERRIDE;
293 };
294 
295 
296 /** Novatel frame: NV_OEM6_RAWIMUS. \sa mrpt::obs::CObservationGPS */
298  nv_oem6_short_header_t header; //!< Frame header
299  uint32_t week;
300  double week_seconds;
304  uint32_t crc;
306  bool getAllFieldDescriptions( std::ostream &o ) const MRPT_OVERRIDE;
307  bool getAllFieldValues( std::ostream &o ) const MRPT_OVERRIDE;
309 
310 /** Novatel frame: NV_OEM6_MARKPOS. \sa mrpt::obs::CObservationGPS */
312  nv_oem6_header_t header; //!< Frame header
313  uint32_t solution_stat; //!< nv_oem6_solution_status::nv_solution_status_t
314  uint32_t position_type; //!< nv_oem6_position_type::nv_position_type_t
315  double lat,lon,hgt; //!< [deg], [deg], hgt over sea level[m]
316  float undulation;
318  float lat_sigma, lon_sigma, hgt_sigma;
319  char base_station_id[4];
320  float diff_age, sol_age;
326  uint32_t crc;
328  /** Return the geodetic coords as a mrpt::topography::TGeodeticCoords structure (requires linking against mrpt-topography)
329  * Call as: getAsStruct<TGeodeticCoords>(); */
330  template <class TGEODETICCOORDS>
331  inline TGEODETICCOORDS getAsStruct() const {
332  return TGEODETICCOORDS(fields.lat,fields.lon,fields.hgt);
333  }
335 
336 /** Novatel frame: NV_OEM6_MARKTIME. \sa mrpt::obs::CObservationGPS */
338  nv_oem6_header_t header; //!< Frame header
339  uint32_t week;
340  double week_seconds;
342  double utc_offset;
344  uint32_t crc;
346  bool getAllFieldDescriptions( std::ostream &o ) const MRPT_OVERRIDE;
347  bool getAllFieldValues( std::ostream &o ) const MRPT_OVERRIDE;
349 
350 /** Novatel frame: NV_OEM6_MARK2TIME. \sa mrpt::obs::CObservationGPS */
352  nv_oem6_header_t header; //!< Frame header
353  uint32_t week;
354  double week_seconds;
356  double utc_offset;
358  uint32_t crc;
360  bool getAllFieldDescriptions( std::ostream &o ) const MRPT_OVERRIDE;
361  bool getAllFieldValues( std::ostream &o ) const MRPT_OVERRIDE;
363 
364 /** Novatel frame: NV_OEM6_IONUTC. \sa mrpt::obs::CObservationGPS */
366  nv_oem6_header_t header; //!< Frame header
367  double a0,a1,a2,a3,b0,b1,b2,b3; // Ionospheric alpha and beta constant terms parameters
368  uint32_t utc_wn; //!< UTC reference week number
369  uint32_t tot; //!< Reference time of UTC params
370  double A0,A1; //!< UTC constant and 1st order terms
371  uint32_t wn_lsf; //!< Future week number
372  uint32_t dn; //!< Day number (1=sunday, 7=saturday)
373  uint32_t deltat_ls; //!< Delta time due to leap seconds
374  uint32_t deltat_lsf; //!< Delta time due to leap seconds (future)
376  uint32_t crc;
378 
379 
380 #pragma pack(pop) // End of pack = 1
381 } } } // End of namespaces
bool getAllFieldDescriptions(std::ostream &o) const MRPT_OVERRIDE
unsigned __int16 uint16_t
Definition: rptypes.h:46
#define GNSS_BINARY_MSG_DEFINITION_START(_MSG_ID)
uint32_t wn_lsf
Future week number.
Novatel generic frame (to store frames without a parser at the present time).
uint32_t utc_wn
UTC reference week number.
#define GNSS_BINARY_MSG_DEFINITION_MID_END
#define MRPT_OVERRIDE
C++11 "override" for virtuals:
uint32_t dn
Day number (1=sunday, 7=saturday)
gnss_message_type_t
List of all known GNSS message types.
double vel_cov[9]
Velocity covariance matrix in local level frame. (metres/second squared) xx,xy,xz,yx,yy,yz,zx,zy,zz.
uint32_t tot
Reference time of UTC params.
double hgt
[deg], [deg], hgt over sea level[m]
Novatel OEM6 regular header structure.
GNSS_BINARY_MSG_DEFINITION_MID TGEODETICCOORDS getAsStruct() const
Return the geodetic coords as a mrpt::topography::TGeodeticCoords structure (requires linking against...
unsigned char uint8_t
Definition: rptypes.h:43
#define GNSS_BINARY_MSG_DEFINITION_MID
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
Definition: CStream.h:38
nv_ins_status_type_t
Novatel SPAN on OEM6 firmware reference, table 33.
when a fix position command is entered, the receiver computes its own position and determines if the ...
_u8 model
Definition: rplidar_cmd.h:21
nv_oem6_header_t header
Novatel frame: NV_OEM6_BESTPOS.
const std::string OBS_IMPEXP & enum2str(int val)
for nv_position_type_t
uint32_t deltat_lsf
Delta time due to leap seconds (future)
Novatel generic short-header frame (to store frames without a parser at the present time)...
double att_cov[9]
Attitude covariance matrix of the SPAN frame to the local level frame. (deg sq) xx,xy,xz,yx,yy,yz,zx,zy,zz.
int val
Definition: mrpt_jpeglib.h:953
const std::string OBS_IMPEXP & enum2str(int val)
for nv_ins_status_type_t
GLsizei const GLchar ** string
Definition: glext.h:3919
Novatel OEM6 short header structure.
uint32_t deltat_ls
Delta time due to leap seconds.
std::vector< TCompressedRangeLog > obs_data
double A1
UTC constant and 1st order terms.
test distance exceeded (max of 3 rejections if distance > 10km)
__int32 int32_t
Definition: rptypes.h:48
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
uint32_t solution_stat
nv_oem6_solution_status::nv_solution_status_t
double pos_cov[9]
Position covariance matrix in local level frame (metres squared) xx,xy,xz,yx,yy,yz,zx,zy,zz.
Pure virtual base for all message types.
#define GNSS_BINARY_MSG_DEFINITION_END
GLuint in
Definition: glext.h:6301
uint32_t ins_status
nv_oem6_ins_status_type::nv_ins_status_type_t
covariance trace exceeds maximum (trace>1000m)
nv_solution_status_t
Novatel OEM6 firmware reference, table 85.
the fixed position entered using the fix position command is not valid
bool getAllFieldValues(std::ostream &o) const MRPT_OVERRIDE
unsigned __int32 uint32_t
Definition: rptypes.h:49
GLsizei GLsizei GLenum GLenum const GLvoid * data
Definition: glext.h:3520
nv_position_type_t
Novatel OEM6 firmware reference, table 84; Novatel SPAN on OEM6 firmware manual, table 26...
std::vector< TComponentVersion > components
float hgt_sigma
Uncertainties (all in [m])
const std::string OBS_IMPEXP & enum2str(int val)
for nv_solution_status_t
uint32_t position_type
nv_oem6_position_type::nv_position_type_t



Page generated by Doxygen 1.8.14 for MRPT 1.5.7 Git: 5902e14cc Wed Apr 24 15:04:01 2019 +0200 at lun oct 28 01:39:17 CET 2019