18 nv_oem6_header_t::nv_oem6_header_t()
31 receiver_sw_version(0)
37 : msg_len(), msg_id(),
week(), ms_in_week()
46 out.
printf(
"[Novatel OEM6 GENERIC FRAME]\n");
53 out << static_cast<uint32_t>(
msg_body.size());
63 if (nBytesInStream)
in.ReadBuffer(&
msg_body[0],
sizeof(nBytesInStream));
69 out.
printf(
"[Novatel OEM6 GENERIC SHORT FRAME]\n");
76 out << static_cast<uint32_t>(
msg_body.size());
86 if (nBytesInStream)
in.ReadBuffer(&
msg_body[0],
sizeof(nBytesInStream));
92 static bool init_map =
false;
93 static std::map<int, std::string> val2str;
97 #define DEF_TYPESTR(_NAME) val2str[nv_oem6_solution_status::_NAME] = #_NAME; 121 return (it == val2str.end()) ? nullstr : it->second;
126 static bool init_map =
false;
127 static std::map<int, std::string> val2str;
131 #define DEF_TYPESTR(_NAME) val2str[nv_oem6_position_type::_NAME] = #_NAME; 164 return (it == val2str.end()) ? nullstr : it->second;
169 static bool init_map =
false;
170 static std::map<int, std::string> val2str;
174 #define DEF_TYPESTR(_NAME) val2str[nv_oem6_ins_status_type::_NAME] = #_NAME; 187 return (it == val2str.end()) ? nullstr : it->second;
194 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
195 (
unsigned)(fields.header.ms_in_week));
197 " Solution status: `%s`\n",
200 " Position type : `%s`\n",
203 " Longitude: %.09f deg (std dev: %.06f m) Latitude: %.09f deg (std " 205 fields.lon, fields.lon_sigma, fields.lat, fields.lat_sigma);
207 " Height (sea level): %.06f m (std dev: %.06f m) Undulation: %.04f m " 209 fields.hgt, fields.hgt_sigma, fields.undulation,
210 fields.hgt + fields.undulation);
212 " Diff age: %.03f Solution age: %.03f\n", fields.diff_age,
214 out.
printf(
" Base station ID: `%.*s`\n", 4, fields.base_station_id);
216 " Num sat tracked: %u Num sat in solution: %u\n",
217 (
unsigned)fields.num_sats_tracked, (
unsigned)fields.num_sats_sol);
222 out.
printf(
"[Novatel OEM6 BESTPOS]\n");
228 o <<
"gps_week.gps_ms solution_stat position_type lon_deg lat_deg hgt_m " 229 "undulation_m lon_sigma_m lat_sigma_m hgt_sigma_m diff_age sol_age " 230 "num_sats_tracked num_sats_sol";
236 "%u.%08u %u %u %.09f %.09f %.06f %.04f %.06f %.06f %.06f %.03f %.03f " 238 (
unsigned)fields.header.week, (
unsigned)(fields.header.ms_in_week),
239 (
unsigned)fields.solution_stat, (
unsigned)fields.position_type,
240 fields.lon, fields.lat, fields.hgt, fields.undulation, fields.lon_sigma,
241 fields.lat_sigma, fields.hgt_sigma, fields.diff_age, fields.sol_age,
242 (
unsigned)fields.num_sats_tracked, (
unsigned)fields.num_sats_sol);
249 out.
printf(
"[Novatel OEM6 INSPVAS]\n");
251 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
252 (
unsigned)(fields.header.ms_in_week));
254 " INS status: `%s`\n",
257 " Longitude: %.09f deg Latitude: %.09f deg Height: %.03f m\n",
258 fields.lon, fields.lat, fields.hgt);
260 " Velocities: North: %.05f East: %.05f Up: %.05f\n", fields.vel_north,
261 fields.vel_east, fields.vel_up);
263 " Attitude: Roll: %.05f Pitch: %.05f Azimuth: %.05f\n", fields.roll,
264 fields.pitch, fields.azimuth);
269 o <<
"gps_week.gps_ms ins_status lon_deg lat_deg ellip_height_WGS84 " 270 "vel_north vel_east vel_up roll_deg pitch_deg azimuth_deg";
276 "%u.%08u %u %.09f %.09f %.06f %.05f %.05f %.05f %.05f %.05f %.05f",
277 (
unsigned)fields.header.week, (
unsigned)(fields.header.ms_in_week),
278 (
unsigned)fields.ins_status, fields.lon, fields.lat, fields.hgt,
279 fields.vel_north, fields.vel_east, fields.vel_up, fields.roll,
280 fields.pitch, fields.azimuth);
287 out.
printf(
"[Novatel OEM6 INSCOVS]\n");
289 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
290 (
unsigned)(fields.header.ms_in_week));
292 " Position cov: %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f " 294 fields.pos_cov[0], fields.pos_cov[1], fields.pos_cov[2],
295 fields.pos_cov[3], fields.pos_cov[4], fields.pos_cov[5],
296 fields.pos_cov[6], fields.pos_cov[7], fields.pos_cov[8]);
298 " Attitude cov: %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f " 300 fields.att_cov[0], fields.att_cov[1], fields.att_cov[2],
301 fields.att_cov[3], fields.att_cov[4], fields.att_cov[5],
302 fields.att_cov[6], fields.att_cov[7], fields.att_cov[8]);
304 " Velocity cov: %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f " 306 fields.vel_cov[0], fields.vel_cov[1], fields.vel_cov[2],
307 fields.vel_cov[3], fields.vel_cov[4], fields.vel_cov[5],
308 fields.vel_cov[6], fields.vel_cov[7], fields.vel_cov[8]);
313 o <<
"gps_week.gps_ms pos_cov(*9) att-cov(*9) vel_cov(*9)";
320 "%9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f " 321 "%9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f " 322 "%9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f ",
323 (
unsigned)fields.header.week, (
unsigned)(fields.header.ms_in_week),
324 fields.pos_cov[0], fields.pos_cov[1], fields.pos_cov[2],
325 fields.pos_cov[3], fields.pos_cov[4], fields.pos_cov[5],
326 fields.pos_cov[6], fields.pos_cov[7], fields.pos_cov[8],
327 fields.att_cov[0], fields.att_cov[1], fields.att_cov[2],
328 fields.att_cov[3], fields.att_cov[4], fields.att_cov[5],
329 fields.att_cov[6], fields.att_cov[7], fields.att_cov[8],
330 fields.vel_cov[0], fields.vel_cov[1], fields.vel_cov[2],
331 fields.vel_cov[3], fields.vel_cov[4], fields.vel_cov[5],
332 fields.vel_cov[6], fields.vel_cov[7], fields.vel_cov[8]);
339 out.
printf(
"[Novatel OEM6 RANGECMP]\n");
341 " Number of SAT observations: %u\n",
342 static_cast<unsigned int>(this->
num_obs));
360 in >> expected_msg_len;
372 out.
printf(
"[Novatel OEM6 RXSTATUS]\n");
374 " Error code: 0x%04X\n", static_cast<unsigned int>(this->fields.error));
380 out.
printf(
"[Novatel OEM6 RAWEPHEM]\n");
382 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
383 (
unsigned)(fields.header.ms_in_week));
389 out.
printf(
"[Novatel OEM6 VERSION]\n");
391 " Number of components: %u\n",
392 static_cast<unsigned int>(this->
num_comps));
393 for (
unsigned i = 0; i <
components.size(); i++)
396 " Component #%u:\n Model: `%.*s`\n Serial: `%.*s`\n SW " 420 in >> expected_msg_len;
433 out.
printf(
"[Novatel OEM6 RAWIMUS]\n");
435 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
436 (
unsigned)(fields.header.ms_in_week));
437 out.
printf(
" Status: 0x%08lu\n", (
long)fields.imu_status);
439 " Acel: X=%li Y=%li Z=%li\n", (
long)fields.accel_x,
440 -(
long)fields.accel_y_neg, (
long)fields.accel_z);
442 " Gyro: X=%li Y=%li Z=%li\n", (
long)fields.gyro_x,
443 -(
long)fields.gyro_y_neg, (
long)fields.gyro_z);
448 o <<
"gps_week.gps_ms imu_status acc_x acc_y acc_z gyro_x gyro_y gyro_z";
454 "%u.%08u %u %li %li %li %li %li %li", (
unsigned)fields.header.week,
455 (
unsigned)(fields.header.ms_in_week), (
unsigned)fields.imu_status,
456 (
long)fields.accel_x, -(
long)fields.accel_y_neg, (
long)fields.accel_z,
457 (
long)fields.gyro_x, -(
long)fields.gyro_y_neg, (
long)fields.gyro_z);
463 const Message_NV_OEM6_MARKTIME::content_t& fields,
466 out.
printf(
" Clock status: 0x%08lu\n", (
long)fields.clock_status);
468 " GPS week: %lu Seconds: %f\n", (
long)fields.week, fields.week_seconds);
470 " Clock offset: %f (std dev = %e)\n", fields.clock_offset,
471 fields.clock_offset_std);
472 out.
printf(
" UTC offset: %f\n", fields.utc_offset);
477 out.
printf(
"[Novatel OEM6 MARKTIME]\n");
483 o <<
"gps_week.gps_ms clock_status week week_seconds utc_offset";
487 const Message_NV_OEM6_MARKTIME::content_t& fields, std::ostream& o)
490 "%u.%08u %u %lu %f %f", (
unsigned)fields.header.week,
491 (
unsigned)(fields.header.ms_in_week), (
unsigned)fields.clock_status,
492 (
long unsigned)fields.week, fields.week_seconds, fields.utc_offset);
502 out.
printf(
"[Novatel OEM6 MARK2TIME]\n");
504 *reinterpret_cast<const Message_NV_OEM6_MARKTIME::content_t*>(&fields),
509 o <<
"gps_week.gps_ms clock_status week week_seconds utc_offset";
515 *reinterpret_cast<const Message_NV_OEM6_MARKTIME::content_t*>(&fields),
523 out.
printf(
"[Novatel OEM6 MARKPOSE]\n");
525 *reinterpret_cast<const Message_NV_OEM6_BESTPOS::content_t*>(&fields),
532 out.
printf(
"[Novatel NV_OEM6_IONUTC]\n");
534 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
535 (
unsigned)(fields.header.ms_in_week));
537 " UTC ref week: %u Tot: %u\n", (
unsigned)fields.utc_wn,
538 (
unsigned)fields.tot);
540 " Leap seconds delta_t: %u future: %u\n", (
unsigned)fields.deltat_ls,
541 (
unsigned)fields.deltat_lsf);
#define ASSERT_EQUAL_(__A, __B)
std::vector< uint8_t > msg_body
const std::string & enum2str(int val)
for nv_ins_status_type_t
insufficient observations
std::string format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
void internal_readFromStream(mrpt::utils::CStream &in) override
Save to binary stream.
void internal_writeToStream(mrpt::utils::CStream &out) const override
Save to binary stream.
test distance exceeded (max of 3 rejections if distance > 10km)
not yet converged from cold start
void dumpToStream(mrpt::utils::CStream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
when a fix position command is entered, the receiver computes its own position and determines if the ...
nv_oem6_header_t header
Frame header.
#define ASSERT_BELOW_(__A, __B)
void WriteBuffer(const void *Buffer, size_t Count)
Writes a block of bytes to the stream from Buffer.
large residuals make position unreliable
const std::string & enum2str(int val)
for nv_position_type_t
nv_oem6_header_t header
Frame header.
const Scalar * const_iterator
GLenum GLenum GLuint components
ins doing its coarse alignment
void internal_readFromStream(mrpt::utils::CStream &in) override
Save to binary stream.
const std::string & enum2str(int val)
for nv_solution_status_t
void dumpToStream(mrpt::utils::CStream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
height or velocity limits exceeded
void generic_dump_MARKTIME(const Message_NV_OEM6_MARKTIME::content_t &fields, mrpt::utils::CStream &out)
singularity at parameters matrix
void internal_readFromStream(mrpt::utils::CStream &in) override
Save to binary 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.
GLsizei const GLchar ** string
GNSS (GPS) data structures, mainly for use within mrpt::obs::CObservationGPS.
void generic_dump_BESTPOS(const Message_NV_OEM6_BESTPOS::content_t &fields, mrpt::utils::CStream &out)
std::vector< TCompressedRangeLog > obs_data
bool getAllFieldDescriptions(std::ostream &o) const override
void dumpToStream(mrpt::utils::CStream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
nv_oem6_short_header_t header
Frame header.
void generic_getFieldValues_MARKTIME(const Message_NV_OEM6_MARKTIME::content_t &fields, std::ostream &o)
void internal_writeToStream(mrpt::utils::CStream &out) const override
Save to binary stream.
covariance trace exceeds maximum (trace>1000m)
the fixed position entered using the fix position command is not valid
void internal_writeToStream(mrpt::utils::CStream &out) const override
Save to binary stream.
#define DEF_TYPESTR(_NAME)
nv_oem6_header_t header
Frame header.
unsigned __int32 uint32_t
std::vector< uint8_t > msg_body
bool getAllFieldValues(std::ostream &o) const override
delta position is too large
void dumpToStream(mrpt::utils::CStream &out) const override
Dumps the contents of the observation in a human-readable form to a given output stream.
virtual int printf(const char *fmt,...) MRPT_printf_format_check(2
Writes a string to the stream in a textual form.