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-2018, 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 } // namespace nv_oem6_position_type
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 } // namespace nv_oem6_solution_status
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 } // namespace nv_oem6_ins_status_type
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(std::ostream& out) const override; // See docs in base
198  protected:
200  mrpt::serialization::CArchive& 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(std::ostream& out) const override; // See docs in base
217  protected:
219  mrpt::serialization::CArchive& 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 */
259 nv_oem6_short_header_t 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(std::ostream& out) const override; // See docs in base
320  protected:
322  mrpt::serialization::CArchive& 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(std::ostream& out) const override; // See docs in base
369  protected:
371  mrpt::serialization::CArchive& 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 } // namespace gnss
476 } // namespace obs
477 } // namespace mrpt
void internal_readFromStream(mrpt::serialization::CArchive &in) override
Save to binary stream.
const std::string & enum2str(int val)
for nv_ins_status_type_t
void dumpToStream(std::ostream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
void dumpToStream(std::ostream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
unsigned __int16 uint16_t
Definition: rptypes.h:44
#define GNSS_BINARY_MSG_DEFINITION_START(_MSG_ID)
uint32_t wn_lsf
Future week number.
test distance exceeded (max of 3 rejections if distance > 10km)
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
uint32_t dn
Day number (1=sunday, 7=saturday)
when a fix position command is entered, the receiver computes its own position and determines if the ...
gnss_message_type_t
List of all known GNSS message types.
void dumpToStream(std::ostream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
double vel_cov[9]
Velocity covariance matrix in local level frame.
uint32_t tot
Reference time of UTC params.
const std::string & enum2str(int val)
for nv_position_type_t
Novatel OEM6 regular header structure.
void internal_writeToStream(mrpt::serialization::CArchive &out) const override
Save to binary stream.
GNSS_BINARY_MSG_DEFINITION_MID TGEODETICCOORDS getAsStruct() const
Return the geodetic coords as a mrpt::topography::TGeodeticCoords structure (requires linking against...
nv_oem6_solution_status::nv_solution_status_t solution_stat
const std::string & enum2str(int val)
for nv_solution_status_t
unsigned char uint8_t
Definition: rptypes.h:41
void internal_readFromStream(mrpt::serialization::CArchive &in) override
Save to binary stream.
#define GNSS_BINARY_MSG_DEFINITION_MID
void internal_writeToStream(mrpt::serialization::CArchive &out) const override
Save to binary stream.
nv_oem6_position_type::nv_position_type_t position_type
void internal_writeToStream(mrpt::serialization::CArchive &out) const override
Save to binary stream.
nv_oem6_header_t header
Novatel frame: NV_OEM6_BESTPOS.
nv_solution_status_t
Novatel OEM6 firmware reference, table 85.
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.
int val
Definition: mrpt_jpeglib.h:955
double lat
[deg], [deg], hgt over sea level[m]
void internal_readFromStream(mrpt::serialization::CArchive &in) override
Save to binary stream.
GLsizei const GLchar ** string
Definition: glext.h:4101
Novatel OEM6 short header structure.
uint32_t deltat_ls
Delta time due to leap seconds.
std::vector< TCompressedRangeLog > obs_data
__int32 int32_t
Definition: rptypes.h:46
bool getAllFieldDescriptions(std::ostream &o) const override
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
double pos_cov[9]
Position covariance matrix in local level frame (metres squared) xx,xy,xz,yx,yy,yz,zx,zy,zz.
Virtual base class for "archives": classes abstracting I/O streams.
Definition: CArchive.h:52
nv_oem6_ins_status_type::nv_ins_status_type_t ins_status
Pure virtual base for all message types.
#define GNSS_BINARY_MSG_DEFINITION_END
GLuint in
Definition: glext.h:7274
float lat_sigma
Uncertainties (all in [m])
nv_position_type_t
Novatel OEM6 firmware reference, table 84; Novatel SPAN on OEM6 firmware manual, table 26...
covariance trace exceeds maximum (trace>1000m)
the fixed position entered using the fix position command is not valid
double A0
UTC constant and 1st order terms.
void internal_writeToStream(mrpt::serialization::CArchive &out) const override
Save to binary stream.
unsigned __int32 uint32_t
Definition: rptypes.h:47
bool getAllFieldValues(std::ostream &o) const override
GLsizei GLsizei GLenum GLenum const GLvoid * data
Definition: glext.h:3546
std::vector< TComponentVersion > components
void internal_readFromStream(mrpt::serialization::CArchive &in) override
Save to binary stream.
void dumpToStream(std::ostream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
nv_ins_status_type_t
Novatel SPAN on OEM6 firmware reference, table 33.



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 7d5e6d718 Fri Aug 24 01:51:28 2018 +0200 at lun nov 2 08:35:50 CET 2020