Main MRPT website > C++ reference for MRPT 1.9.9
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 {
15 namespace obs
16 {
17 namespace gnss
18 {
19 // Pragma to ensure we can safely serialize some of these structures
20 #pragma pack(push, 1)
21 
22 /** Novatel OEM6 regular header structure \sa mrpt::obs::CObservationGPS */
24 {
25  enum : uint8_t
26  {
27  SYNCH0 = 0xAA,
28  SYNCH1 = 0X44,
29  SYNCH2 = 0x12
30  };
31 
46 
48 };
49 
50 /** Novatel OEM6 short header structure \sa mrpt::obs::CObservationGPS */
52 {
53  enum : uint8_t
54  {
55  SYNCH0 = 0xAA,
56  SYNCH1 = 0X44,
57  SYNCH2 = 0x13
58  };
64 
66 };
67 
68 namespace nv_oem6_position_type
69 {
70 /** Novatel OEM6 firmware reference, table 84; Novatel SPAN on OEM6 firmware
71  * manual, table 26. */
73 {
74  NONE = 0,
75  FIXEDPOS = 1,
77  Reserved = 3,
78  FLOATCONV = 4,
79  WIDELANE = 5,
82  SINGLE = 16,
83  PSRDIFF = 17,
84  WAAS = 18,
85  PROPAGATED = 19,
86  OMNISTAR = 20,
87  L1_FLOAT = 32,
90  L1_INT = 48,
91  WIDE_INT = 49,
92  NARROW_INT = 50,
94  INS = 52,
95  INS_PSRSP = 53,
101  CDGPS = 66
102 };
103 /** for nv_position_type_t */
104 const std::string& enum2str(int val);
105 }
106 
107 namespace nv_oem6_solution_status
108 {
109 /** Novatel OEM6 firmware reference, table 85 */
111 {
112  /** solution computed */
114  /** insufficient observations */
116  /** noconvergence */
118  /** singularity at parameters matrix */
120  /** covariance trace exceeds maximum (trace>1000m) */
122  /** test distance exceeded (max of 3 rejections if distance > 10km) */
124  /** not yet converged from cold start */
126  /** height or velocity limits exceeded */
128  /** variance exceeds limits */
130  /** residuals are too large */
132  /** delta position is too large */
134  /** negative variance */
136  /** large residuals make position unreliable */
138  /** ins has not started yet */
140  /** ins doing its coarse alignment */
142  /** ins position is bad */
144  /** no imu detected */
146  /** when a fix position command is entered, the receiver computes its own
147  position and determines if the fixed position is valid */
148  PENDING = 18,
149  /** the fixed position entered using the fix position command is not valid
150  */
152 };
153 /** for nv_solution_status_t */
154 const std::string& enum2str(int val);
155 }
156 namespace nv_oem6_ins_status_type
157 {
158 /** Novatel SPAN on OEM6 firmware reference, table 33 */
160 {
161  INS_INACTIVE = 0, // IMU logs are present, but the alignment routine has
162  // not started; INS is inactive.
163  INS_ALIGNING = 1, // INS is in alignment mode.
164  INS_HIGH_VARIANCE = 2, // The INS solution is in navigation mode but the
165  // azimuth solution uncertainty has exceeded the
166  // threshold.
167  INS_SOLUTION_GOOD = 3, // The INS filter is in navigation mode and the INS
168  // solution is good.
169  INS_SOLUTION_FREE = 6, // The INS filter is in navigation mode and the GNSS
170  // solution is suspected to be in error.
171  INS_ALIGNMENT_COMPLETE = 7, // The INS filter is in navigation mode, but
172  // not enough vehicle dynamics have been
173  // experienced for the system to be within
174  // specifications.
176  8, // INS is determining the IMU axis aligned with gravity.
177  WAITING_INITIALPOS = 9 // The INS filter has determined the IMU orientation
178  // and is awaiting an initial position estimate to
179  // begin the alignment process.
180 };
181 /** for nv_ins_status_type_t */
182 const std::string& enum2str(int val);
183 }
184 
185 /** Novatel generic frame (to store frames without a parser at the present
186  * time). \sa mrpt::obs::CObservationGPS */
188 {
191  {
192  }
193  /** Frame header */
195  std::vector<uint8_t> msg_body;
196 
197  void dumpToStream(
198  mrpt::utils::CStream& out) const override; // See docs in base
199  protected:
200  void internal_writeToStream(mrpt::utils::CStream& out) const override;
202 };
203 
204 /** Novatel generic short-header frame (to store frames without a parser at the
205  * present time). \sa mrpt::obs::CObservationGPS */
207 {
210  {
211  }
212  /** Frame header */
214  std::vector<uint8_t> msg_body;
215 
216  void dumpToStream(
217  mrpt::utils::CStream& out) const override; // See docs in base
218  protected:
219  void internal_writeToStream(mrpt::utils::CStream& out) const override;
221 };
222 
223 /** Novatel frame: NV_OEM6_BESTPOS. \sa mrpt::obs::CObservationGPS */
225 /** Frame header */
227 nv_oem6_solution_status::nv_solution_status_t solution_stat;
228 nv_oem6_position_type::nv_position_type_t position_type;
229 /** [deg], [deg], hgt over sea level[m] */
230 double lat, lon, hgt;
233 /** Uncertainties (all in [m]) */
244 /** Return the geodetic coords as a mrpt::topography::TGeodeticCoords structure
245  * (requires linking against mrpt-topography)
246  * Call as: getAsStruct<TGeodeticCoords>(); */
247 template <class TGEODETICCOORDS>
248 inline TGEODETICCOORDS getAsStruct() const
249 {
250  return TGEODETICCOORDS(fields.lat, fields.lon, fields.hgt);
251 }
252 bool getAllFieldDescriptions(std::ostream& o) const override;
253 bool getAllFieldValues(std::ostream& o) const override;
255 
256 /** Novatel frame: NV_OEM6_INSPVAS. \sa mrpt::obs::CObservationGPS */
258 /** Frame header */
262 double lat, lon, hgt;
264 double roll, pitch, azimuth;
266 uint32_t crc;
268 /** Return the geodetic coords as a mrpt::topography::TGeodeticCoords structure
269  * (requires linking against mrpt-topography)
270  * Call as: getAsStruct<TGeodeticCoords>(); */
271 template <class TGEODETICCOORDS>
272 inline TGEODETICCOORDS getAsStruct() const
273 {
274  return TGEODETICCOORDS(fields.lat, fields.lon, fields.hgt);
275 }
276 bool getAllFieldDescriptions(std::ostream& o) const override;
277 bool getAllFieldValues(std::ostream& o) const override;
279 
280 /** Novatel frame: NV_OEM6_INSCOVS. \sa mrpt::obs::CObservationGPS */
282 /** Frame header */
283 nv_oem6_short_header_t header;
284 uint32_t week;
285 double seconds_in_week;
286 /** Position covariance matrix in local level frame (metres squared)
287  * xx,xy,xz,yx,yy,yz,zx,zy,zz */
288 double pos_cov[9];
289 /** Attitude covariance matrix of the SPAN frame to the local level frame. (deg
290  * sq) xx,xy,xz,yx,yy,yz,zx,zy,zz */
291 double att_cov[9];
292 /** Velocity covariance matrix in local level frame. (metres/second squared)
293  * xx,xy,xz,yx,yy,yz,zx,zy,zz */
294 double vel_cov[9];
295 uint32_t crc;
297 bool getAllFieldDescriptions(std::ostream& o) const override;
298 bool getAllFieldValues(std::ostream& o) const override;
300 
301 /** Novatel frame: NV_OEM6_RANGECMP. \sa mrpt::obs::CObservationGPS */
303 {
306  {
307  }
309  {
311  };
312 
313  /** Frame header */
316  std::vector<TCompressedRangeLog> obs_data;
318 
319  void dumpToStream(
320  mrpt::utils::CStream& out) const override; // See docs in base
321  protected:
322  void internal_writeToStream(mrpt::utils::CStream& out) const override;
324 };
325 
326 /** Novatel frame: NV_OEM6_RXSTATUS. \sa mrpt::obs::CObservationGPS */
328 /** Frame header */
335 uint32_t crc;
337 
338 /** Novatel frame: NV_OEM6_RAWEPHEM. \sa mrpt::obs::CObservationGPS */
340 /** Frame header */
344 uint32_t crc;
346 
347 /** Novatel frame: NV_OEM6_VERSION. \sa mrpt::obs::CObservationGPS */
349 {
352  {
353  }
355  {
357  char model[16], serial[16];
358  char hwversion[16], swversion[16], bootversion[16];
359  char compdate[12], comptime[12];
360  };
361 
362  /** Frame header */
365  std::vector<TComponentVersion> components;
367 
368  void dumpToStream(
369  mrpt::utils::CStream& out) const override; // See docs in base
370  protected:
371  void internal_writeToStream(mrpt::utils::CStream& out) const override;
373 };
374 
375 /** Novatel frame: NV_OEM6_RAWIMUS. \sa mrpt::obs::CObservationGPS */
377 /** Frame header */
379 uint32_t week;
384 uint32_t crc;
386 bool getAllFieldDescriptions(std::ostream& o) const override;
387 bool getAllFieldValues(std::ostream& o) const override;
389 
390 /** Novatel frame: NV_OEM6_MARKPOS. \sa mrpt::obs::CObservationGPS */
392 /** Frame header */
396 /** [deg], [deg], hgt over sea level[m] */
397 double lat, lon, hgt;
398 float undulation;
401 char base_station_id[4];
402 float diff_age, sol_age;
408 uint32_t crc;
410 /** Return the geodetic coords as a mrpt::topography::TGeodeticCoords structure
411  * (requires linking against mrpt-topography)
412  * Call as: getAsStruct<TGeodeticCoords>(); */
413 template <class TGEODETICCOORDS>
414 inline TGEODETICCOORDS getAsStruct() const
415 {
416  return TGEODETICCOORDS(fields.lat, fields.lon, fields.hgt);
417 }
419 
420 /** Novatel frame: NV_OEM6_MARKTIME. \sa mrpt::obs::CObservationGPS */
422 /** Frame header */
423 nv_oem6_header_t header;
424 uint32_t week;
425 double week_seconds;
427 double utc_offset;
429 uint32_t crc;
431 bool getAllFieldDescriptions(std::ostream& o) const override;
432 bool getAllFieldValues(std::ostream& o) const override;
434 
435 /** Novatel frame: NV_OEM6_MARK2TIME. \sa mrpt::obs::CObservationGPS */
437 /** Frame header */
439 uint32_t week;
440 double week_seconds;
442 double utc_offset;
444 uint32_t crc;
446 bool getAllFieldDescriptions(std::ostream& o) const override;
447 bool getAllFieldValues(std::ostream& o) const override;
449 
450 /** Novatel frame: NV_OEM6_IONUTC. \sa mrpt::obs::CObservationGPS */
452 /** Frame header */
454 double a0, a1, a2, a3, b0, b1, b2,
455  b3; // Ionospheric alpha and beta constant terms parameters
456 /** UTC reference week number */
458 /** Reference time of UTC params */
460 /** UTC constant and 1st order terms */
461 double A0, A1;
462 /** Future week number */
464 /** Day number (1=sunday, 7=saturday) */
466 /** Delta time due to leap seconds */
468 /** Delta time due to leap seconds (future) */
471 uint32_t crc;
473 
474 #pragma pack(pop) // End of pack = 1
475 }
476 }
477 } // End of namespaces
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
Definition: CStream.h:42
GLsizei GLsizei GLenum GLenum const GLvoid * data
Definition: glext.h:3547
GLuint in
Definition: glext.h:7274
GLsizei const GLchar ** string
Definition: glext.h:4101
#define GNSS_BINARY_MSG_DEFINITION_START(_MSG_ID)
#define GNSS_BINARY_MSG_DEFINITION_MID_END
#define GNSS_BINARY_MSG_DEFINITION_MID
#define GNSS_BINARY_MSG_DEFINITION_END
int val
Definition: mrpt_jpeglib.h:955
nv_ins_status_type_t
Novatel SPAN on OEM6 firmware reference, table 33.
const std::string & enum2str(int val)
for nv_ins_status_type_t
nv_position_type_t
Novatel OEM6 firmware reference, table 84; Novatel SPAN on OEM6 firmware manual, table 26.
const std::string & enum2str(int val)
for nv_position_type_t
const std::string & enum2str(int val)
for nv_solution_status_t
nv_solution_status_t
Novatel OEM6 firmware reference, table 85.
@ INVALID_FIX
the fixed position entered using the fix position command is not valid
@ COLD_START
not yet converged from cold start
@ INTEGRITY_WARNING
large residuals make position unreliable
@ PENDING
when a fix position command is entered, the receiver computes its own position and determines if the ...
@ V_H_LIMIT
height or velocity limits exceeded
@ SINGULARITY
singularity at parameters matrix
@ TEST_DIST
test distance exceeded (max of 3 rejections if distance > 10km)
@ INS_ALIGNING
ins doing its coarse alignment
@ COV_TRACE
covariance trace exceeds maximum (trace>1000m)
uint32_t tot
Reference time of UTC params.
bool getAllFieldDescriptions(std::ostream &o) const override
GNSS_BINARY_MSG_DEFINITION_MID TGEODETICCOORDS getAsStruct() const
Return the geodetic coords as a mrpt::topography::TGeodeticCoords structure (requires linking against...
nv_oem6_ins_status_type::nv_ins_status_type_t ins_status
double att_cov[9]
Attitude covariance matrix of the SPAN frame to the local level frame.
uint32_t dn
Day number (1=sunday, 7=saturday)
uint32_t deltat_ls
Delta time due to leap seconds.
gnss_message_type_t
List of all known GNSS message types.
uint32_t wn_lsf
Future week number.
double pos_cov[9]
Position covariance matrix in local level frame (metres squared) xx,xy,xz,yx,yy,yz,...
double vel_cov[9]
Velocity covariance matrix in local level frame.
nv_oem6_solution_status::nv_solution_status_t solution_stat
nv_oem6_position_type::nv_position_type_t position_type
uint32_t deltat_lsf
Delta time due to leap seconds (future)
double lat
[deg], [deg], hgt over sea level[m]
bool getAllFieldValues(std::ostream &o) const override
nv_oem6_header_t header
Novatel frame: NV_OEM6_BESTPOS.
uint32_t utc_wn
UTC reference week number.
double A0
UTC constant and 1st order terms.
float lat_sigma
Uncertainties (all in [m])
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
unsigned __int16 uint16_t
Definition: rptypes.h:44
__int32 int32_t
Definition: rptypes.h:46
unsigned __int32 uint32_t
Definition: rptypes.h:47
unsigned char uint8_t
Definition: rptypes.h:41
Novatel generic frame (to store frames without a parser at the present time).
void dumpToStream(mrpt::utils::CStream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
void internal_writeToStream(mrpt::utils::CStream &out) const override
Save to binary stream.
void internal_readFromStream(mrpt::utils::CStream &in) override
Save to binary stream.
Novatel generic short-header frame (to store frames without a parser at the present time).
void internal_readFromStream(mrpt::utils::CStream &in) override
Save to binary stream.
void dumpToStream(mrpt::utils::CStream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
void internal_writeToStream(mrpt::utils::CStream &out) const override
Save to binary stream.
void internal_readFromStream(mrpt::utils::CStream &in) override
Save to binary stream.
void dumpToStream(mrpt::utils::CStream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
std::vector< TCompressedRangeLog > obs_data
void internal_writeToStream(mrpt::utils::CStream &out) const override
Save to binary stream.
void dumpToStream(mrpt::utils::CStream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
std::vector< TComponentVersion > components
void internal_writeToStream(mrpt::utils::CStream &out) const override
Save to binary stream.
void internal_readFromStream(mrpt::utils::CStream &in) override
Save to binary stream.
Pure virtual base for all message types.
Novatel OEM6 regular header structure.
Novatel OEM6 short header structure.



Page generated by Doxygen 1.9.1 for MRPT 1.9.9 Git: 63ea9d1f1 Thu Nov 23 00:06:53 2017 +0100 at mar 26 may 2026 12:19:29 CEST