20 void Message_NV_OEM6_GENERIC_FRAME::dumpToStream(std::ostream&
out)
const 23 "[Novatel OEM6 GENERIC FRAME]\n" 27 void Message_NV_OEM6_GENERIC_FRAME::internal_writeToStream(
31 out.WriteAs<uint32_t>(msg_body.size());
32 if (!msg_body.empty())
out.WriteBuffer(&msg_body[0], msg_body.size());
34 void Message_NV_OEM6_GENERIC_FRAME::internal_readFromStream(
38 const uint32_t nBytesInStream = in.
ReadAs<uint32_t>();
39 msg_body.resize(nBytesInStream);
40 if (nBytesInStream) in.
ReadBuffer(&msg_body[0],
sizeof(nBytesInStream));
44 void Message_NV_OEM6_GENERIC_SHORT_FRAME::dumpToStream(std::ostream&
out)
const 46 out <<
"[Novatel OEM6 GENERIC SHORT FRAME]\n";
49 void Message_NV_OEM6_GENERIC_SHORT_FRAME::internal_writeToStream(
53 out.WriteAs<uint32_t>(msg_body.size());
54 if (!msg_body.empty())
out.WriteBuffer(&msg_body[0], msg_body.size());
56 void Message_NV_OEM6_GENERIC_SHORT_FRAME::internal_readFromStream(
60 const uint32_t nBytesInStream = in.
ReadAs<uint32_t>();
61 msg_body.resize(nBytesInStream);
62 if (nBytesInStream) in.
ReadBuffer(&msg_body[0],
sizeof(nBytesInStream));
69 static bool init_map =
false;
70 static std::map<int, std::string> val2str;
74 #define DEF_TYPESTR(_NAME) val2str[nv_oem6_solution_status::_NAME] = #_NAME; 96 auto it = val2str.find(
val);
97 static const std::string nullstr(
"???");
98 return (it == val2str.end()) ? nullstr : it->second;
103 static bool init_map =
false;
104 static std::map<int, std::string> val2str;
108 #define DEF_TYPESTR(_NAME) val2str[nv_oem6_position_type::_NAME] = #_NAME; 139 auto it = val2str.find(
val);
140 static const std::string nullstr(
"???");
141 return (it == val2str.end()) ? nullstr : it->second;
146 static bool init_map =
false;
147 static std::map<int, std::string> val2str;
151 #define DEF_TYPESTR(_NAME) val2str[nv_oem6_ins_status_type::_NAME] = #_NAME; 162 auto it = val2str.find(
val);
163 static const std::string nullstr(
"???");
164 return (it == val2str.end()) ? nullstr : it->second;
168 const Message_NV_OEM6_BESTPOS::content_t& fields, std::ostream&
out)
171 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
172 (
unsigned)(fields.header.ms_in_week));
174 " Solution status: `%s`\n",
177 " Position type : `%s`\n",
180 " Longitude: %.09f deg (std dev: %.06f m) Latitude: %.09f deg (std " 182 fields.lon, fields.lon_sigma, fields.lat, fields.lat_sigma);
184 " Height (sea level): %.06f m (std dev: %.06f m) Undulation: %.04f m " 186 fields.hgt, fields.hgt_sigma, fields.undulation,
187 fields.hgt + fields.undulation);
189 " Diff age: %.03f Solution age: %.03f\n", fields.diff_age,
192 " Base station ID: `%.*s`\n", 4, fields.base_station_id);
194 " Num sat tracked: %u Num sat in solution: %u\n",
195 (
unsigned)fields.num_sats_tracked, (
unsigned)fields.num_sats_sol);
198 void Message_NV_OEM6_BESTPOS::dumpToStream(std::ostream&
out)
const 200 out <<
"[Novatel OEM6 BESTPOS]\n";
206 o <<
"gps_week.gps_ms solution_stat position_type lon_deg lat_deg hgt_m " 207 "undulation_m lon_sigma_m lat_sigma_m hgt_sigma_m diff_age sol_age " 208 "num_sats_tracked num_sats_sol";
214 "%u.%08u %u %u %.09f %.09f %.06f %.04f %.06f %.06f %.06f %.03f %.03f " 216 (
unsigned)fields.header.week, (
unsigned)(fields.header.ms_in_week),
217 (
unsigned)fields.solution_stat, (
unsigned)fields.position_type,
218 fields.lon, fields.lat, fields.hgt, fields.undulation, fields.lon_sigma,
219 fields.lat_sigma, fields.hgt_sigma, fields.diff_age, fields.sol_age,
220 (
unsigned)fields.num_sats_tracked, (
unsigned)fields.num_sats_sol);
225 void Message_NV_OEM6_INSPVAS::dumpToStream(std::ostream&
out)
const 227 out <<
"[Novatel OEM6 INSPVAS]\n";
229 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
230 (
unsigned)(fields.header.ms_in_week));
232 " INS status: `%s`\n",
235 " Longitude: %.09f deg Latitude: %.09f deg Height: %.03f m\n",
236 fields.lon, fields.lat, fields.hgt);
238 " Velocities: North: %.05f East: %.05f Up: %.05f\n", fields.vel_north,
239 fields.vel_east, fields.vel_up);
241 " Attitude: Roll: %.05f Pitch: %.05f Azimuth: %.05f\n", fields.roll,
242 fields.pitch, fields.azimuth);
247 o <<
"gps_week.gps_ms ins_status lon_deg lat_deg ellip_height_WGS84 " 248 "vel_north vel_east vel_up roll_deg pitch_deg azimuth_deg";
254 "%u.%08u %u %.09f %.09f %.06f %.05f %.05f %.05f %.05f %.05f %.05f",
255 (
unsigned)fields.header.week, (
unsigned)(fields.header.ms_in_week),
256 (
unsigned)fields.ins_status, fields.lon, fields.lat, fields.hgt,
257 fields.vel_north, fields.vel_east, fields.vel_up, fields.roll,
258 fields.pitch, fields.azimuth);
263 void Message_NV_OEM6_INSCOVS::dumpToStream(std::ostream&
out)
const 265 out <<
"[Novatel OEM6 INSCOVS]\n";
267 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
268 (
unsigned)(fields.header.ms_in_week));
270 " Position cov: %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f " 272 fields.pos_cov[0], fields.pos_cov[1], fields.pos_cov[2],
273 fields.pos_cov[3], fields.pos_cov[4], fields.pos_cov[5],
274 fields.pos_cov[6], fields.pos_cov[7], fields.pos_cov[8]);
276 " Attitude cov: %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f " 278 fields.att_cov[0], fields.att_cov[1], fields.att_cov[2],
279 fields.att_cov[3], fields.att_cov[4], fields.att_cov[5],
280 fields.att_cov[6], fields.att_cov[7], fields.att_cov[8]);
282 " Velocity cov: %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f " 284 fields.vel_cov[0], fields.vel_cov[1], fields.vel_cov[2],
285 fields.vel_cov[3], fields.vel_cov[4], fields.vel_cov[5],
286 fields.vel_cov[6], fields.vel_cov[7], fields.vel_cov[8]);
291 o <<
"gps_week.gps_ms pos_cov(*9) att-cov(*9) vel_cov(*9)";
298 "%9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f " 299 "%9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f " 300 "%9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f %9.03f ",
301 (
unsigned)fields.header.week, (
unsigned)(fields.header.ms_in_week),
302 fields.pos_cov[0], fields.pos_cov[1], fields.pos_cov[2],
303 fields.pos_cov[3], fields.pos_cov[4], fields.pos_cov[5],
304 fields.pos_cov[6], fields.pos_cov[7], fields.pos_cov[8],
305 fields.att_cov[0], fields.att_cov[1], fields.att_cov[2],
306 fields.att_cov[3], fields.att_cov[4], fields.att_cov[5],
307 fields.att_cov[6], fields.att_cov[7], fields.att_cov[8],
308 fields.vel_cov[0], fields.vel_cov[1], fields.vel_cov[2],
309 fields.vel_cov[3], fields.vel_cov[4], fields.vel_cov[5],
310 fields.vel_cov[6], fields.vel_cov[7], fields.vel_cov[8]);
315 void Message_NV_OEM6_RANGECMP::dumpToStream(std::ostream&
out)
const 317 out <<
"[Novatel OEM6 RANGECMP]\n";
319 " Number of SAT observations: %u\n",
320 static_cast<unsigned int>(this->num_obs));
323 void Message_NV_OEM6_RANGECMP::internal_writeToStream(
332 out.WriteBuffer(&obs_data[0],
sizeof(obs_data[0]) * obs_data.size());
335 void Message_NV_OEM6_RANGECMP::internal_readFromStream(
338 uint32_t expected_msg_len;
339 in >> expected_msg_len;
343 obs_data.resize(num_obs);
345 in.
ReadBuffer(&obs_data[0],
sizeof(obs_data[0]) * obs_data.size());
350 void Message_NV_OEM6_RXSTATUS::dumpToStream(std::ostream&
out)
const 352 out <<
"[Novatel OEM6 RXSTATUS]\n";
354 " Error code: 0x%04X\n", static_cast<unsigned int>(this->fields.error));
358 void Message_NV_OEM6_RAWEPHEM::dumpToStream(std::ostream&
out)
const 360 out <<
"[Novatel OEM6 RAWEPHEM]\n";
362 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
363 (
unsigned)(fields.header.ms_in_week));
367 void Message_NV_OEM6_VERSION::dumpToStream(std::ostream&
out)
const 369 out <<
"[Novatel OEM6 VERSION]\n";
371 " Number of components: %u\n",
372 static_cast<unsigned int>(this->num_comps));
373 for (
size_t i = 0; i < components.size(); i++)
376 " Component #%u:\n Model: `%.*s`\n Serial: `%.*s`\n SW " 378 (
unsigned int)i, (
int)
sizeof(components[i].model),
379 components[i].model, (
int)
sizeof(components[i].serial),
380 components[i].serial, (
int)
sizeof(components[i].swversion),
381 components[i].swversion);
385 void Message_NV_OEM6_VERSION::internal_writeToStream(
395 &components[0],
sizeof(components[0]) * components.size());
398 void Message_NV_OEM6_VERSION::internal_readFromStream(
401 uint32_t expected_msg_len;
402 in >> expected_msg_len;
406 components.resize(num_comps);
409 &components[0],
sizeof(components[0]) * components.size());
414 void Message_NV_OEM6_RAWIMUS::dumpToStream(std::ostream&
out)
const 416 out <<
"[Novatel OEM6 RAWIMUS]\n";
418 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
419 (
unsigned)(fields.header.ms_in_week));
422 " Acel: X=%li Y=%li Z=%li\n", (
long)fields.accel_x,
423 -(
long)fields.accel_y_neg, (
long)fields.accel_z);
425 " Gyro: X=%li Y=%li Z=%li\n", (
long)fields.gyro_x,
426 -(
long)fields.gyro_y_neg, (
long)fields.gyro_z);
431 o <<
"gps_week.gps_ms imu_status acc_x acc_y acc_z gyro_x gyro_y gyro_z";
437 "%u.%08u %u %li %li %li %li %li %li", (
unsigned)fields.header.week,
438 (
unsigned)(fields.header.ms_in_week), (
unsigned)fields.imu_status,
439 (
long)fields.accel_x, -(
long)fields.accel_y_neg, (
long)fields.accel_z,
440 (
long)fields.gyro_x, -(
long)fields.gyro_y_neg, (
long)fields.gyro_z);
446 const Message_NV_OEM6_MARKTIME::content_t& fields, std::ostream&
out)
448 out <<
mrpt::format(
" Clock status: 0x%08lu\n", (
long)fields.clock_status);
450 " GPS week: %lu Seconds: %f\n", (
long)fields.week, fields.week_seconds);
452 " Clock offset: %f (std dev = %e)\n", fields.clock_offset,
453 fields.clock_offset_std);
457 void Message_NV_OEM6_MARKTIME::dumpToStream(std::ostream&
out)
const 459 out <<
"[Novatel OEM6 MARKTIME]\n";
465 o <<
"gps_week.gps_ms clock_status week week_seconds utc_offset";
469 const Message_NV_OEM6_MARKTIME::content_t& fields, std::ostream& o)
472 "%u.%08u %u %lu %f %f", (
unsigned)fields.header.week,
473 (
unsigned)(fields.header.ms_in_week), (
unsigned)fields.clock_status,
474 (
long unsigned)fields.week, fields.week_seconds, fields.utc_offset);
482 void Message_NV_OEM6_MARK2TIME::dumpToStream(std::ostream&
out)
const 484 out <<
"[Novatel OEM6 MARK2TIME]\n";
486 *reinterpret_cast<const Message_NV_OEM6_MARKTIME::content_t*>(&fields),
491 o <<
"gps_week.gps_ms clock_status week week_seconds utc_offset";
497 *reinterpret_cast<const Message_NV_OEM6_MARKTIME::content_t*>(&fields),
503 void Message_NV_OEM6_MARKPOS::dumpToStream(std::ostream&
out)
const 505 out <<
"[Novatel OEM6 MARKPOSE]\n";
507 *reinterpret_cast<const Message_NV_OEM6_BESTPOS::content_t*>(&fields),
512 void Message_NV_OEM6_IONUTC::dumpToStream(std::ostream&
out)
const 514 out <<
"[Novatel NV_OEM6_IONUTC]\n";
516 " GPS week: %u ms in week: %u\n", (
unsigned)fields.header.week,
517 (
unsigned)(fields.header.ms_in_week));
519 " UTC ref week: %u Tot: %u\n", (
unsigned)fields.utc_wn,
520 (
unsigned)fields.tot);
522 " Leap seconds delta_t: %u future: %u\n", (
unsigned)fields.deltat_ls,
523 (
unsigned)fields.deltat_lsf);
insufficient observations
test distance exceeded (max of 3 rejections if distance > 10km)
not yet converged from cold start
std::string std::string format(std::string_view fmt, ARGS &&... args)
#define ASSERT_BELOW_(__A, __B)
when a fix position command is entered, the receiver computes its own position and determines if the ...
large residuals make position unreliable
const std::string & enum2str(int val)
for nv_position_type_t
ins doing its coarse alignment
void fixEndianness() override
height or velocity limits exceeded
#define ASSERT_EQUAL_(__A, __B)
Assert comparing two values, reporting their actual values upon failure.
STORED_TYPE ReadAs()
De-serialize a variable and returns it by value.
nv_oem6_header_t header
Novatel frame: NV_OEM6_BESTPOS.
void generic_dump_BESTPOS(const Message_NV_OEM6_BESTPOS::content_t &fields, std::ostream &out)
singularity at parameters matrix
void generic_dump_MARKTIME(const Message_NV_OEM6_MARKTIME::content_t &fields, std::ostream &out)
GNSS (GPS) data structures, mainly for use within mrpt::obs::CObservationGPS.
bool getAllFieldDescriptions(std::ostream &o) const override
Virtual base class for "archives": classes abstracting I/O streams.
mrpt::vision::TStereoCalibResults out
void generic_getFieldValues_MARKTIME(const Message_NV_OEM6_MARKTIME::content_t &fields, std::ostream &o)
size_t ReadBuffer(void *Buffer, size_t Count)
Reads a block of bytes from the stream into Buffer.
covariance trace exceeds maximum (trace>1000m)
the fixed position entered using the fix position command is not valid
#define DEF_TYPESTR(_NAME)
bool getAllFieldValues(std::ostream &o) const override
delta position is too large