10 #include <gtest/gtest.h> 26 const char* test_cmd =
27 "$GPGGA,101830.00,3649.76162994,N,00224.53709052,W,2,08,1.1,9.3,M," 31 EXPECT_TRUE(parse_ret) <<
"Failed parse of: " << test_cmd << endl;
45 const char* test_cmd =
"$GPGGA,,,,,,0,,,,M,,M,,*6";
48 EXPECT_FALSE(parse_ret);
54 const char* test_cmd =
55 "$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598, ,*10";
58 EXPECT_TRUE(parse_ret) <<
"Failed parse of: " << test_cmd << endl;
71 const char* test_cmd =
"$GPGLL,3723.2475,N,12158.3416,W,161229.487,A,A*41";
74 EXPECT_TRUE(parse_ret) <<
"Failed parse of: " << test_cmd << endl;
87 const char* test_cmd =
"$GPVTG,054.7,T,034.4,M,005.5,N,010.2,K*48";
90 EXPECT_TRUE(parse_ret) <<
"Failed parse of: " << test_cmd << endl;
105 const char* test_cmd =
"$GPZDA,181813,14,10,2003,00,00*4F";
108 EXPECT_TRUE(parse_ret) <<
"Failed parse of: " << test_cmd << endl;
127 auto buf = std::make_shared<mrpt::io::CMemoryStream>();
129 const std::string s(
"$GPZDA,181813,14,10,2003,00,00*4F\n");
130 buf->Write(s.c_str(), s.size());
164 auto buf = std::make_shared<mrpt::io::CMemoryStream>();
166 const uint8_t sample_novatel6_gps[] = {
167 0xaa, 0x44, 0x12, 0x1c, 0x2a, 0x00, 0x00, 0xa0, 0x48, 0x00, 0x00,
168 0x00, 0x5a, 0xb4, 0x59, 0x07, 0x10, 0x4a, 0xb7, 0x16, 0x00, 0x00,
169 0x00, 0x00, 0xf6, 0xb1, 0x4a, 0x34, 0x00, 0x00, 0x00, 0x00, 0x38,
170 0x00, 0x00, 0x00, 0x97, 0x2b, 0x45, 0xa9, 0xc8, 0x6a, 0x42, 0x40,
171 0xfc, 0x54, 0x43, 0x6f, 0x11, 0x18, 0x03, 0xc0, 0x00, 0x00, 0x20,
172 0x8f, 0xe8, 0x0e, 0x1c, 0x40, 0x66, 0x66, 0x48, 0x42, 0x3d, 0x00,
173 0x00, 0x00, 0x1d, 0x9b, 0x96, 0x3c, 0x2c, 0xd5, 0x9c, 0x3c, 0xd1,
174 0x39, 0xa8, 0x3c, 0x35, 0x35, 0x35, 0x00, 0x00, 0x00, 0x60, 0x41,
175 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0e, 0x0e, 0x0d, 0x00, 0x00, 0x00,
176 0x33, 0x82, 0xba, 0x79, 0xe5, 0xaa, 0x44, 0x13, 0x58, 0xfc, 0x01,
177 0x59, 0x07, 0x10, 0x4a, 0xb7, 0x16, 0x59, 0x07, 0x00, 0x00, 0x33,
178 0x33, 0x33, 0x33, 0xdb, 0x42, 0x17, 0x41, 0xa7, 0xf0, 0xaf, 0xa5,
179 0xc8, 0x6a, 0x42, 0x40, 0xa2, 0xad, 0xac, 0x28, 0x12, 0x18, 0x03,
180 0xc0, 0x00, 0x00, 0x8a, 0x8b, 0x52, 0x8d, 0x4c, 0x40, 0x10, 0xe2,
181 0xdb, 0x3c, 0x4b, 0xbd, 0x82, 0xbf, 0x52, 0x23, 0x1e, 0x50, 0x08,
182 0xf1, 0x9b, 0xbf, 0xd4, 0xa6, 0xd1, 0x7c, 0xcd, 0x16, 0xc8, 0x3f,
183 0x31, 0x27, 0xe1, 0x16, 0xa2, 0x6b, 0x10, 0x40, 0xc7, 0x1c, 0xc7,
184 0x39, 0x6a, 0x9c, 0x00, 0x40, 0xa0, 0x3c, 0x9f, 0x79, 0xca, 0xdd,
185 0x63, 0x40, 0x03, 0x00, 0x00, 0x00, 0x27, 0xbb, 0xff, 0xf8, 0xaa,
186 0x44, 0x12, 0x1c, 0x2a, 0x00, 0x00, 0xa0, 0x48, 0x00, 0x00, 0x00,
187 0x5a, 0xb4, 0x59, 0x07, 0x42, 0x4a, 0xb7, 0x16, 0x00, 0x00, 0x00,
188 0x00, 0xf6, 0xb1, 0x4a, 0x34, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00,
189 0x00, 0x00, 0xf0, 0x23, 0x3c, 0xa9, 0xc8, 0x6a, 0x42, 0x40, 0xdd,
190 0x10, 0x6c, 0x71, 0x11, 0x18, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x03,
191 0xa7, 0x18, 0x1c, 0x40, 0x66, 0x66, 0x48, 0x42, 0x3d, 0x00, 0x00,
192 0x00, 0x32, 0x9b, 0x96, 0x3c, 0x82, 0xd4, 0x9c, 0x3c, 0x5d, 0x3a,
193 0xa8, 0x3c, 0x35, 0x35, 0x35, 0x00, 0x00, 0x00, 0x60, 0x41, 0x00,
194 0x00, 0x00, 0x00, 0x0f, 0x0e, 0x0e, 0x0d, 0x00, 0x00, 0x00, 0x33,
195 0xcb, 0x95, 0xa0, 0x9b, 0xaa, 0x44, 0x13, 0x58, 0xfc, 0x01, 0x59,
196 0x07, 0x42, 0x4a, 0xb7, 0x16, 0x59, 0x07, 0x00, 0x00, 0x67, 0x66,
197 0x66, 0x66, 0xdb, 0x42, 0x17, 0x41, 0xe6, 0xae, 0xa1, 0xa5, 0xc8,
198 0x6a, 0x42, 0x40, 0x26, 0x1e, 0x82, 0x2b, 0x12, 0x18, 0x03, 0xc0,
199 0x00, 0x00, 0x62, 0xb6, 0x8b, 0x8e, 0x4c, 0x40, 0x10, 0x63, 0x42,
200 0x19, 0x38, 0x19, 0x7a, 0xbf, 0x1e, 0xa9, 0x79, 0x02, 0x24, 0x6c,
201 0x9d, 0xbf, 0x52, 0x13, 0x38, 0xa4, 0x35, 0x2c, 0xc8, 0x3f, 0xa9,
202 0x3b, 0x21, 0x59, 0xe0, 0xa0, 0x10, 0x40, 0x51, 0xd1, 0x8c, 0x50,
203 0x0b, 0xa0, 0x00, 0x40, 0x16, 0x40, 0x94, 0xbe, 0xc2, 0xdd, 0x63,
204 0x40, 0x03, 0x00, 0x00, 0x00, 0x20, 0x4d, 0xe7, 0xa2, 0xaa, 0x44,
205 0x12, 0x1c, 0x2a, 0x00, 0x00, 0xa0, 0x48, 0x00, 0x00, 0x00, 0x5a,
206 0xb4, 0x59, 0x07, 0x74, 0x4a, 0xb7, 0x16, 0x00, 0x00, 0x00, 0x00,
207 0xf6, 0xb1, 0x4a, 0x34, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00,
208 0x00, 0xaa, 0x41, 0x32, 0xa9, 0xc8, 0x6a, 0x42, 0x40, 0xff, 0x59,
209 0xa8, 0x73, 0x11, 0x18, 0x03, 0xc0, 0x00, 0x00, 0xa0, 0xd6, 0x6b,
210 0x22, 0x1c, 0x40, 0x66, 0x66, 0x48, 0x42, 0x3d, 0x00, 0x00, 0x00,
211 0x92, 0x9b, 0x96, 0x3c, 0x70, 0xd3, 0x9c, 0x3c, 0x06, 0x3b, 0xa8,
212 0x3c, 0x35, 0x35, 0x35, 0x00};
213 const unsigned int sample_novatel6_gps_len = 500;
214 buf->Write(sample_novatel6_gps, sample_novatel6_gps_len);
228 if (obss.empty())
return;
230 auto itObs = obss.begin();
239 obsGPS1->getMsgByClassPtr<gnss::Message_NV_OEM6_BESTPOS>();
245 obsGPS2->getMsgByClassPtr<gnss::Message_NV_OEM6_INSPVAS>();
253 auto buf = std::make_shared<mrpt::io::CMemoryStream>();
256 const uint8_t sample_nmea_gps[] = {
257 0x31, 0x33, 0x2c, 0x32, 0x34, 0x2c, 0x33, 0x30, 0x2c, 0x32, 0x36,
258 0x34, 0x2c, 0x33, 0x30, 0x2c, 0x32, 0x38, 0x2c, 0x34, 0x35, 0x2c,
259 0x30, 0x36, 0x30, 0x2c, 0x31, 0x37, 0x2c, 0x33, 0x30, 0x2c, 0x31,
260 0x38, 0x2c, 0x30, 0x35, 0x39, 0x2c, 0x33, 0x31, 0x2c, 0x33, 0x36,
261 0x2c, 0x33, 0x34, 0x2c, 0x31, 0x33, 0x32, 0x2c, 0x2a, 0x37, 0x37,
262 0x0a, 0x24, 0x47, 0x50, 0x47, 0x53, 0x56, 0x2c, 0x34, 0x2c, 0x34,
263 0x2c, 0x31, 0x33, 0x2c, 0x34, 0x39, 0x2c, 0x34, 0x37, 0x2c, 0x31,
264 0x36, 0x38, 0x2c, 0x2a, 0x34, 0x41, 0x0a, 0x24, 0x47, 0x4c, 0x47,
265 0x53, 0x56, 0x2c, 0x32, 0x2c, 0x31, 0x2c, 0x30, 0x36, 0x2c, 0x36,
266 0x36, 0x2c, 0x34, 0x32, 0x2c, 0x31, 0x34, 0x30, 0x2c, 0x2c, 0x36,
267 0x37, 0x2c, 0x37, 0x39, 0x2c, 0x33, 0x34, 0x37, 0x2c, 0x31, 0x30,
268 0x2c, 0x36, 0x38, 0x2c, 0x32, 0x35, 0x2c, 0x33, 0x32, 0x38, 0x2c,
269 0x32, 0x36, 0x2c, 0x37, 0x36, 0x2c, 0x32, 0x35, 0x2c, 0x30, 0x33,
270 0x34, 0x2c, 0x31, 0x31, 0x2a, 0x36, 0x38, 0x0a, 0x24, 0x47, 0x4c,
271 0x47, 0x53, 0x56, 0x2c, 0x32, 0x2c, 0x32, 0x2c, 0x30, 0x36, 0x2c,
272 0x37, 0x37, 0x2c, 0x37, 0x36, 0x2c, 0x33, 0x34, 0x33, 0x2c, 0x2c,
273 0x37, 0x38, 0x2c, 0x33, 0x39, 0x2c, 0x32, 0x33, 0x32, 0x2c, 0x31,
274 0x38, 0x2a, 0x36, 0x39, 0x0a, 0x24, 0x47, 0x4e, 0x47, 0x53, 0x54,
275 0x2c, 0x31, 0x30, 0x30, 0x33, 0x35, 0x34, 0x2e, 0x34, 0x30, 0x2c,
276 0x32, 0x35, 0x2c, 0x2c, 0x2c, 0x2c, 0x34, 0x35, 0x2c, 0x32, 0x30,
277 0x2c, 0x36, 0x31, 0x2a, 0x36, 0x33, 0x0a, 0xb5, 0x62, 0x01, 0x01,
278 0x14, 0x00, 0xb8, 0x9b, 0xc2, 0x16, 0xc1, 0x84, 0x70, 0x1e, 0x24,
279 0x55, 0xb8, 0xfe, 0xb0, 0xee, 0xa9, 0x16, 0x8e, 0x19, 0x00, 0x00,
280 0x47, 0xb2, 0xb5, 0x62, 0x01, 0x12, 0x24, 0x00, 0xb8, 0x9b, 0xc2,
281 0x16, 0xee, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xea, 0xff,
282 0xff, 0xff, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x99,
283 0xa6, 0x14, 0x02, 0x08, 0x01, 0x00, 0x00, 0x80, 0xa8, 0x12, 0x01,
284 0xf3, 0xeb, 0x24, 0x47, 0x4e, 0x52, 0x4d, 0x43, 0x2c, 0x31, 0x30,
285 0x30, 0x33, 0x35, 0x34, 0x2e, 0x36, 0x30, 0x2c, 0x41, 0x2c, 0x33,
286 0x36, 0x34, 0x39, 0x2e, 0x37, 0x38, 0x39, 0x32, 0x39, 0x2c, 0x4e,
287 0x2c, 0x30, 0x30, 0x32, 0x32, 0x34, 0x2e, 0x34, 0x36, 0x38, 0x36,
288 0x33, 0x2c, 0x57, 0x2c, 0x30, 0x2e, 0x33, 0x37, 0x38, 0x2c, 0x33,
289 0x34, 0x39, 0x2e, 0x30, 0x38, 0x2c, 0x32, 0x37, 0x30, 0x32, 0x32,
290 0x30, 0x2c, 0x2c, 0x2c, 0x41, 0x2a, 0x36, 0x36, 0x0a, 0x24, 0x47,
291 0x4e, 0x47, 0x4e, 0x53, 0x2c, 0x31, 0x30, 0x30, 0x33, 0x35, 0x34,
292 0x2e, 0x36, 0x30, 0x2c, 0x33, 0x36, 0x34, 0x39, 0x2e, 0x37, 0x38,
293 0x39, 0x32, 0x39, 0x2c, 0x4e, 0x2c, 0x30, 0x30, 0x32, 0x32, 0x34,
294 0x2e, 0x34, 0x36, 0x38, 0x36, 0x33, 0x2c, 0x57, 0x2c, 0x41, 0x4e,
295 0x2c, 0x30, 0x34, 0x2c, 0x32, 0x2e, 0x33, 0x31, 0x2c, 0x35, 0x35,
296 0x2e, 0x34, 0x2c, 0x34, 0x36, 0x2e, 0x32, 0x2c, 0x2c, 0x2a, 0x34,
297 0x45, 0x0a, 0x24, 0x47, 0x4e, 0x47, 0x53, 0x41, 0x2c, 0x4d, 0x2c,
298 0x33, 0x2c, 0x31, 0x35, 0x2c, 0x32, 0x34, 0x2c, 0x33, 0x30, 0x2c,
299 0x31, 0x37, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
300 0x34, 0x2e, 0x32, 0x31, 0x2c, 0x32, 0x2e, 0x33, 0x31, 0x2c, 0x33,
301 0x2e, 0x35, 0x32, 0x2a, 0x31, 0x34, 0x0a, 0x24, 0x47, 0x4e, 0x47,
302 0x53, 0x41, 0x2c, 0x4d, 0x2c, 0x33, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
303 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x34, 0x2e, 0x32,
304 0x31, 0x2c, 0x32, 0x2e, 0x33, 0x31, 0x2c, 0x33, 0x2e, 0x35, 0x32,
305 0x2a, 0x31, 0x33, 0x0a, 0x24, 0x47, 0x50, 0x47, 0x53, 0x56, 0x2c,
306 0x34, 0x2c, 0x31, 0x2c, 0x31, 0x33, 0x2c, 0x30, 0x35, 0x2c, 0x33,
307 0x36, 0x2c, 0x31, 0x38, 0x32, 0x2c, 0x32, 0x30, 0x2c, 0x31, 0x32,
308 0x2c, 0x30, 0x33, 0x2c, 0x32, 0x30, 0x32, 0x2c, 0x2c, 0x31, 0x33,
309 0x2c, 0x36, 0x39, 0x2c, 0x30, 0x34, 0x36, 0x2c, 0x31, 0x32, 0x2c,
310 0x31, 0x35, 0x2c, 0x36, 0x31, 0x2c, 0x33, 0x32, 0x31, 0x2c, 0x32,
311 0x39, 0x2a, 0x37, 0x33, 0x0a, 0x24, 0x47, 0x50, 0x47, 0x53, 0x56,
312 0x2c, 0x34, 0x2c, 0x32, 0x2c, 0x31, 0x33, 0x2c, 0x31, 0x37, 0x2c,
313 0x31, 0x31, 0x2c, 0x31, 0x30, 0x38, 0x2c, 0x32, 0x38, 0x2c, 0x31,
314 0x39, 0x2c, 0x30, 0x34, 0x2c, 0x31, 0x33, 0x31, 0x2c, 0x31, 0x36,
315 0x2c, 0x32, 0x30, 0x2c, 0x31, 0x33, 0x2c, 0x33, 0x31, 0x38, 0x2c,
316 0x31, 0x37, 0x2c, 0x32, 0x31, 0x2c, 0x30, 0x33, 0x2c, 0x32, 0x38,
317 0x38, 0x2c, 0x2a, 0x37, 0x45, 0x0a, 0x24, 0x47, 0x50, 0x47, 0x53,
318 0x56, 0x2c, 0x34, 0x2c, 0x33, 0x2c, 0x31, 0x33, 0x2c, 0x32, 0x34,
319 0x2c, 0x33, 0x30, 0x2c, 0x32, 0x36, 0x34, 0x2c, 0x33, 0x30, 0x2c,
320 0x32, 0x38, 0x2c, 0x34, 0x35, 0x2c, 0x30, 0x36, 0x30, 0x2c, 0x31,
321 0x37, 0x2c, 0x33, 0x30, 0x2c, 0x31, 0x38, 0x2c, 0x30, 0x35, 0x39,
322 0x2c, 0x33, 0x31, 0x2c, 0x33, 0x36, 0x2c, 0x33, 0x34, 0x2c, 0x31,
323 0x33, 0x32, 0x2c, 0x2a, 0x37, 0x37, 0x0a, 0x24, 0x47, 0x50, 0x47,
324 0x53, 0x56, 0x2c, 0x34, 0x2c, 0x34, 0x2c, 0x31, 0x33, 0x2c, 0x34,
325 0x39, 0x2c, 0x34, 0x37, 0x2c, 0x31, 0x36, 0x38, 0x2c, 0x2a, 0x34,
326 0x41, 0x0a, 0x24, 0x47, 0x4c, 0x47, 0x53, 0x56, 0x2c, 0x32, 0x2c,
327 0x31, 0x2c, 0x30, 0x36, 0x2c, 0x36, 0x36, 0x2c, 0x34, 0x32, 0x2c,
328 0x31, 0x34, 0x30, 0x2c, 0x2c, 0x36, 0x37, 0x2c, 0x37, 0x39, 0x2c,
329 0x33, 0x34, 0x37, 0x2c, 0x31, 0x31, 0x2c, 0x36, 0x38, 0x2c, 0x32,
330 0x35, 0x2c, 0x33, 0x32, 0x38, 0x2c, 0x32, 0x36, 0x2c, 0x37, 0x36,
331 0x2c, 0x32, 0x35, 0x2c, 0x30, 0x33, 0x34, 0x2c, 0x31, 0x31, 0x2a,
332 0x36, 0x39, 0x0a, 0x24, 0x47, 0x4c, 0x47, 0x53, 0x56, 0x2c, 0x32,
333 0x2c, 0x32, 0x2c, 0x30, 0x36, 0x2c, 0x37, 0x37, 0x2c, 0x37, 0x36,
334 0x2c, 0x33, 0x34, 0x33, 0x2c, 0x2c, 0x37, 0x38, 0x2c, 0x33, 0x39,
335 0x2c, 0x32, 0x33, 0x32, 0x2c, 0x31, 0x38, 0x2a, 0x36, 0x39, 0x0a,
336 0x24, 0x47, 0x4e, 0x47, 0x53, 0x54, 0x2c, 0x31, 0x30, 0x30, 0x33,
337 0x35, 0x34, 0x2e, 0x36, 0x30, 0x2c, 0x32, 0x35, 0x2c, 0x2c, 0x2c,
338 0x2c, 0x33, 0x36, 0x2c, 0x31, 0x37, 0x2c, 0x35, 0x32, 0x2a, 0x36,
339 0x31, 0x0a, 0xb5, 0x62, 0x01, 0x01, 0x14, 0x00, 0x80, 0x9c, 0xc2,
340 0x16, 0xc6, 0x84, 0x70, 0x1e, 0x22, 0x55, 0xb8, 0xfe, 0xaf, 0xee,
341 0xa9, 0x16, 0x90, 0x19, 0x00, 0x00, 0x14, 0x9d, 0xb5, 0x62, 0x01,
342 0x12, 0x24, 0x00, 0x80, 0x9c, 0xc2, 0x16, 0xee, 0xff, 0xff, 0xff,
343 0xf9, 0xff, 0xff, 0xff, 0xea, 0xff, 0xff, 0xff, 0x1d, 0x00, 0x00,
344 0x00, 0x13, 0x00, 0x00, 0x00, 0x99, 0xa6, 0x14, 0x02, 0x14, 0x02,
345 0x00, 0x00, 0x80, 0xa8, 0x12, 0x01, 0xc9, 0x95, 0x24, 0x47, 0x4e,
346 0x52, 0x4d, 0x43, 0x2c, 0x31, 0x30, 0x30, 0x33, 0x35, 0x34, 0x2e,
347 0x38, 0x30, 0x2c, 0x56, 0x2c, 0x33, 0x36, 0x34, 0x39, 0x2e};
348 const unsigned int sample_nmea_gps_len = 1000;
349 buf->Write(sample_nmea_gps, sample_nmea_gps_len);
363 if (obss.empty())
return;
365 auto itObs = obss.begin();
389 EXPECT_NEAR(msg3->fields.longitude_degrees, -2.407810500, 0.0001);
390 EXPECT_NEAR(msg3->fields.latitude_degrees, 36.829821500, 0.0001);
double longitude_degrees
The measured longitude, in degrees (East:+ , West:-)
content_t fields
Message content, accesible by individual fields.
double latitude_degrees
The measured latitude, in degrees (North:+ , South:-)
double longitude_degrees
The measured longitude, in degrees (East:+ , West:-)
A class capable of reading GPS/GNSS/GNSS+IMU receiver data, from a serial port or from any input stre...
MSG_CLASS * getMsgByClassPtr()
Like CObservationGPS::getMsgByClass() but returns a nullptr pointer if message is not found...
EXPECT_TRUE(mrpt::system::fileExists(ini_fil))
double latitude_degrees
The measured latitude, in degrees (North:+ , South:-)
TEST(CGPSInterface, parse_NMEA_GGA)
content_t fields
Message content, accesible by individual fields.
Contains classes for various device interfaces.
void getObservations(TListObservations &lstObjects)
Returns a list of enqueued objects, emptying it (thread-safe).
content_t fields
Message content, accesible by individual fields.
UTC_time UTCTime
The GPS sensor measured timestamp (in UTC time)
double altitude_meters
The measured altitude, in meters (A).
void doProcess() override
This method will be invoked at a minimum rate of "process_rate" (Hz)
content_t fields
Message content, accesible by individual fields.
double longitude_degrees
The measured longitude, in degrees (East:+ , West:-)
This namespace contains representation of robot actions and observations.
static bool parse_NMEA(const std::string &cmd_line, mrpt::obs::CObservationGPS &out_obs, const bool verbose=false)
Parses one line of NMEA data from a GPS receiver, and writes the recognized fields (if any) into an o...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
std::multimap< mrpt::system::TTimeStamp, mrpt::serialization::CSerializable::Ptr > TListObservations
EXPECT_EQ(out.image_pair_was_used.size(), NUM_IMGS)
content_t fields
Message content, accesible by individual fields.
virtual void initialize()
This method can or cannot be implemented in the derived class, depending on the need for it...
static CAST_TO::Ptr from(const CAST_FROM_PTR &ptr)
double latitude_degrees
The measured latitude, in degrees (North:+ , South:-)
double ground_speed_knots
EXPECT_NEAR(out.cam_params.rightCameraPose.x, 0.1194, 0.005)
This class stores messages from GNSS or GNSS+IMU devices, from consumer-grade inexpensive GPS receive...
uint16_t date_year
2000-...
double true_track
Degrees.
void bindStream(const std::shared_ptr< mrpt::io::CStream > &external_stream, const std::shared_ptr< std::mutex > &csOptionalExternalStream=std::shared_ptr< std::mutex >())
This enforces the use of a given user stream, instead of trying to open the serial port set in this c...