INTRODUCTION
Overview
Download and Install
Documentation
Publications

REPOSITORY
Libraries

DEVELOPER
Dev Guide
Dashboard

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         
gbxgarminacfr/driver.h
1 /*
2  * GearBox Project: Peer-Reviewed Open-Source Libraries for Robotics
3  * http://gearbox.sf.net/
4  * Copyright (c) 2004-2010 Duncan Mercer, Alex Brooks, Alexei Makarenko, Tobias Kaupp
5  *
6  * This distribution is licensed to you under the terms described in
7  * the LICENSE file included in this distribution.
8  *
9  */
10 
11 #ifndef GBXGARMINACFR_DRIVER_H
12 #define GBXGARMINACFR_DRIVER_H
13 
14 #include <gbxserialacfr/serial.h>
15 #include <gbxutilacfr/tracer.h>
16 #include <gbxutilacfr/status.h>
17 #include <memory>
18 #include <gbxgarminacfr/nmeamessages.h>
19 
20 namespace gbxgarminacfr {
21 
23 class Config
24 {
25 public:
26  Config() :
27  protocol("Garmin"),
28  readGga(true),
29  readVtg(true),
30  readRme(true),
31  readRmc(false),
32  ignoreUnknown(false) {};
33 
35  bool isValid( std::string &reason ) const;
36 
38  std::string toString() const;
39 
41  std::string device;
42 
44  std::string protocol;
45 
47  bool readGga;
49  bool readVtg;
51  bool readRme;
53  bool readRmc;
54 
59 };
60 
87 class Driver
88 {
89 
90 public:
91 
97  Driver( const Config &config,
98  gbxutilacfr::Tracer &tracer,
99  gbxutilacfr::Status &status,
100  int serialDebugLevel = 0 );
101 
102  ~Driver();
103 
120  std::auto_ptr<GenericData> read();
121 
122 private:
123 
124  void init();
125  void enableDevice();
126  void disableDevice();
127 
128  std::auto_ptr<gbxserialacfr::Serial> serial_;
129 
130  Config config_;
131  gbxutilacfr::Tracer& tracer_;
132  gbxutilacfr::Status& status_;
133 };
134 
135 } // namespace
136 
137 #endif
Data structure returned by read()
Definition: gbxsickacfr/driver.h:48
@ ReservedGpsSolutionStatusType12
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:219
@ InsBad
INS position is bad.
Definition: gbxnovatelacfr/driver.h:223
@ ReservedGpsPosVelType25
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:262
double horizontalSpeed
[m/s]
Definition: gbxnovatelacfr/driver.h:398
double elapsedSec() const
Returns elapsed seconds as a double.
Definition: timer.cpp:40
bool enableUseOfOmniStarCarrier_
carrier-differential corrections OMNIStarXP/HP (you need to get a subscription with them)
Definition: gbxnovatelacfr/driver.h:169
int numberOfSamples
number of samples in a scan
Definition: gbxsickacfr/driver.h:44
bool readRme
Read PGRME sentence.
Definition: gbxgarminacfr/driver.h:51
float undulation
[m] aka geoidal seperation: undulation == heigth_ellipsoid - height_geoid/AMSL
Definition: gbxnovatelacfr/driver.h:365
@ ReservedGpsPosVelType14
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:251
double zDeltaV
[m/s] up positive
Definition: gbxnovatelacfr/driver.h:423
int timeStampUSec
in Computer time, beginning of message at serial port
Definition: gbxnovatelacfr/driver.h:382
@ Warning
Problem, likely to go away.
Definition: gbxnovatelacfr/driver.h:195
Minimum information to configure the receiver in INS mode.
Definition: gbxnovatelacfr/driver.h:36
@ ReservedGpsPosVelType28
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:265
@ InsAligning
INS doing its coarse alignment.
Definition: gbxnovatelacfr/driver.h:222
double dtGpsPos_
20Hz max, 5Hz max if RawImu or InsPva is enabled
Definition: gbxnovatelacfr/driver.h:146
@ InsufficientObs
Insufficient observations.
Definition: gbxnovatelacfr/driver.h:208
bool readGga
Read GPGGA sentence.
Definition: gbxgarminacfr/driver.h:47
Gps velocity information.
Definition: gbxnovatelacfr/driver.h:386
Base class for all GbxUtilAcfr exceptions.
Definition: gbxutilacfr/exceptions.h:65
@ InsPsrDiff
INS pseudorange differential solution b.
Definition: gbxnovatelacfr/driver.h:278
Configuration structure.
Definition: gbxsickacfr/driver.h:22
int timeStampUSec
in Computer time, beginning of message at serial port
Definition: gbxnovatelacfr/driver.h:406
std::vector< double > vehicleBodyRotationUncertainty_
optional (size 3 or 0)
Definition: gbxnovatelacfr/driver.h:184
@ L1Int
Integer L1 ambiguity solution.
Definition: gbxnovatelacfr/driver.h:272
std::auto_ptr< GenericData > read()
Blocking read, returns one message.
Definition: gbxnovatelacfr/driver.cpp:515
void read(Data &data)
Definition: gbxsickacfr/driver.cpp:574
std::string toString() const
Returns human-readable configuration description.
Definition: gbxgarminacfr/driver.cpp:55
double northVelocity
[m/s] south is negative
Definition: gbxnovatelacfr/driver.h:328
@ ReservedGpsPosVelType13
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:250
int timeStampSec
in Computer time, beginning of message at serial port
Definition: gbxnovatelacfr/driver.h:443
@ ReservedGpsPosVelType24
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:261
int numL2RangesRTK
number of L2 ranges above the RTK mask angle (??) number of L2 carrier ranges used?
Definition: gbxnovatelacfr/driver.h:376
@ ReservedGpsPosVelType31
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:268
double fieldOfView
field of viewe [rad]
Definition: gbxsickacfr/driver.h:40
virtual void info(const std::string &message, int level=1, bool localOnly=false)
Definition: tracer.h:133
Exception thrown by Serial.
Definition: serial.h:22
@ ReservedGpsPosVelType29
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:266
std::string toString(StatusMessageType type)
Convert a StatusMessageType into a string.
Definition: gbxnovatelacfr/driver.cpp:911
double maxRange
maximum range [m]
Definition: gbxsickacfr/driver.h:38
@ FixedPos
Position has been fixed by the FIX POSITION command or by position averaging.
Definition: gbxnovatelacfr/driver.h:238
int timeStampSec
in Computer time, beginning of message at serial port
Definition: gbxnovatelacfr/driver.h:405
std::string device
Serial device. e.g. "/dev/ttyS0".
Definition: gbxsickacfr/driver.h:32
Driver(const Config &cfg)
dumps tracing messages to the console
Definition: gbxnovatelacfr/driver.cpp:97
int timeStampUSec
in Computer time, beginning of message at serial port
Definition: gbxnovatelacfr/driver.h:348
@ Autonomous
Definition: nmeamessages.h:49
@ Ins
INS calculated position corrected for the antenna b.
Definition: gbxnovatelacfr/driver.h:276
int gpsWeekNr
number of full weeks since midnight 05/Jan/1980 (UTC)
Definition: gbxnovatelacfr/driver.h:358
int gpsWeekNr
number of full weeks since midnight 05/Jan/1980 (UTC)
Definition: gbxnovatelacfr/driver.h:416
double heightAMSL
[m] AMSL == above mean sea level (geoid)
Definition: gbxnovatelacfr/driver.h:364
std::string imuType_
Definition: gbxnovatelacfr/driver.h:124
double longitude
[deg] east positive
Definition: gbxnovatelacfr/driver.h:363
unsigned int msIntoWeek
yields GPS-time (together with gpsWeekNr); continous (contrary to UTC which uses leapseconds)
Definition: gbxnovatelacfr/driver.h:393
@ Singularity
Singularity at parameters matrix.
Definition: gbxnovatelacfr/driver.h:210
@ NarrowFloat
Floating narrow-lane ambiguity solution.
Definition: gbxnovatelacfr/driver.h:271
Novatel GPS/INS driver.
Definition: gbxnovatelacfr/driver.cpp:95
@ ReservedGpsPosVelType9
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:246
int timeStampSec
in Computer time, beginning of message at serial port
Definition: gbxnovatelacfr/driver.h:347
float sigmaLongitude
[m] 1 standard deviation error estimate
Definition: gbxnovatelacfr/driver.h:368
@ NegativeVar
Negative variance.
Definition: gbxnovatelacfr/driver.h:218
int numL1Ranges
number of L1 ranges used in computation (?)
Definition: gbxnovatelacfr/driver.h:374
@ ReservedGpsPosVelType23
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:260
@ NoConvergence
No convergence.
Definition: gbxnovatelacfr/driver.h:209
@ ImuUnplugged
No IMU detected.
Definition: gbxnovatelacfr/driver.h:224
double height
[m] above ellipsoid WGS84 (heigth_ellipsoid - undulation == height_geoid (aka AMSL)
Definition: gbxnovatelacfr/driver.h:322
double roll
[degree] right handed rotation from local level around y-axes
Definition: gbxnovatelacfr/driver.h:338
std::string device
Serial device. e.g. "/dev/ttyS0".
Definition: gbxgarminacfr/driver.h:41
INS position/velocity/attitude information.
Definition: gbxnovatelacfr/driver.h:312
double elapsedMs() const
Returns elapsed milliseconds as a double.
Definition: timer.cpp:35
@ ReservedGpsPosVelType15
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:252
std::auto_ptr< GenericData > read()
Definition: gbxgarminacfr/driver.cpp:184
@ SolComputed
Solution computed.
Definition: gbxnovatelacfr/driver.h:207
GpsSolutionStatusType
Novatel's different solution status types.
Definition: gbxnovatelacfr/driver.h:206
@ NarrowLane
Solution from narrow-lane ambiguities.
Definition: gbxnovatelacfr/driver.h:243
double trackOverGround
[deg] "heading" of the speed vector w. respect to true North
Definition: gbxnovatelacfr/driver.h:399
@ DeltaPos
Delta position is too large.
Definition: gbxnovatelacfr/driver.h:217
@ ReservedGpsPosVelType26
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:263
double dtGpsVel_
20Hz max, 5Hz max if RawImu or InsPva is enabled
Definition: gbxnovatelacfr/driver.h:147
virtual void warning(const std::string &message, int level=1, bool localOnly=false)
Definition: tracer.h:141
int readFull(void *buf, int count)
Definition: serial.cpp:612
@ ReservedGpsPosVelType21
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:258
@ ReservedGpsPosVelType12
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:249
bool fixInvalidRateSettings_
Don't bitch about wrong rates, change them to something sensible.
Definition: gbxnovatelacfr/driver.h:148
int timeStampUSec
in Computer time, beginning of message at serial port
Definition: gbxnovatelacfr/driver.h:444
bool ignoreUnknownMessages_
normally we throw an exception, set this to "true" if you want to enable some other message permanent...
Definition: gbxnovatelacfr/driver.h:135
Simple serial port interface.
Definition: gbxnovatelacfr/driver.h:21
double secIntoWeek
Definition: gbxnovatelacfr/driver.h:417
@ ReservedGpsPosVelType27
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:264
@ DopplerVelocity
Velocity computed using instantaneous Doppler.
Definition: gbxnovatelacfr/driver.h:245
@ Propagated
Propagated by a Kalman filter without new observations.
Definition: gbxnovatelacfr/driver.h:256
int numL1RangesRTK
number of L1 ranges above the RTK mask angle (??) number of L1 carrier ranges used?
Definition: gbxnovatelacfr/driver.h:375
Gps position information.
Definition: gbxnovatelacfr/driver.h:352
std::string warnings
if 'haveWarnings' is set, 'warnings' will contain diagnostic information.
Definition: gbxsickacfr/driver.h:61
@ WideInt
Integer wide-lane ambiguity solution.
Definition: gbxnovatelacfr/driver.h:273
std::string toString() const
Dumps the config in human readable form.
Definition: gbxnovatelacfr/driver.cpp:790
@ OmniStarHp
OmniSTAR high precision a.
Definition: gbxnovatelacfr/driver.h:281
@ VHLimit
Height or velocity limits exceeded (in accordance with COCOM export licensing restrictions)
Definition: gbxnovatelacfr/driver.h:214
float diffAge
[s]
Definition: gbxnovatelacfr/driver.h:397
@ Waas
Solution calculated using corrections from an SBAS.
Definition: gbxnovatelacfr/driver.h:255
double latitude
[deg] north positive
Definition: gbxnovatelacfr/driver.h:362
float sigmaHeight
[m] 1 standard deviation error estimate
Definition: gbxnovatelacfr/driver.h:369
int baudRate
Baud rate.
Definition: gbxsickacfr/driver.h:34
@ ReservedGpsPosVelType7
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:244
All the information needed to configure the driver.
Definition: gbxnovatelacfr/driver.h:87
bool readRmc
Read GPRMC sentence.
Definition: gbxgarminacfr/driver.h:53
Definition: gbxgarminacfr/driver.h:87
double xDeltaAng
[rad] right handed around x
Definition: gbxnovatelacfr/driver.h:436
@ L1Float
Floating L1 ambiguity solution.
Definition: gbxnovatelacfr/driver.h:269
@ Pending
When a FIX POSITION command is entered, the receiver computes its own position and determines if the ...
Definition: gbxnovatelacfr/driver.h:225
@ RtkDirectIns
RTK status where the RTK filter is directly initialized from the INS filter. b.
Definition: gbxnovatelacfr/driver.h:275
@ CdGps
Position solution using CDGPS corrections.
Definition: gbxnovatelacfr/driver.h:283
@ Initialising
Nothing wrong, just not quite ready.
Definition: gbxnovatelacfr/driver.h:193
@ PsrDiff
Pseudorange differential solution.
Definition: gbxnovatelacfr/driver.h:254
@ ReservedGpsPosVelType30
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:267
double azimuth
[degree] left handed around z-axes rotation from (true?) north clockwise
Definition: gbxnovatelacfr/driver.h:340
int gpsWeekNr
number of full weeks since midnight 05/Jan/1980 (UTC)
Definition: gbxnovatelacfr/driver.h:392
float latency
[s] gps speed can be calculated from instantanious or integrated doppler. The latter refers to the av...
Definition: gbxnovatelacfr/driver.h:396
bool isValid() const
Returns true if the configuration is sane.
Definition: gbxnovatelacfr/driver.cpp:800
Definition: tracer.h:111
@ InsPsrSp
INS pseudorange single point solution - no DGPS corrections b.
Definition: gbxnovatelacfr/driver.h:277
double latitude
[deg] north positive WGS84
Definition: gbxnovatelacfr/driver.h:320
Garmin GPS driver.
bool enableRTK_
carrier-differential corrections (you need to set up your own base-station and wireless link),...
Definition: gbxnovatelacfr/driver.h:168
ACFR utilities.
Definition: gbxnovatelacfr/driver.h:24
@ Single
Single point position.
Definition: gbxnovatelacfr/driver.h:253
bool isValid(std::string &reason) const
Returns true if the configuration is sane. Checks include:
Definition: gbxgarminacfr/driver.cpp:31
std::vector< double > insOffset_
report INS position/velocity offset (xyz [m] in IMU coordinates) from the IMU center; useful e....
Definition: gbxnovatelacfr/driver.h:158
virtual void error(const std::string &message, int level=1, bool localOnly=false)
Definition: tracer.h:149
@ InsRtkFixed
INS RTK fixed ambiguities solution b.
Definition: gbxnovatelacfr/driver.h:280
FixType
GPS fix types.
Definition: nmeamessages.h:43
int numObservations
number of observations tracked (?) L1 code/carrier/doppler + L2 code/carrier/doppler?
Definition: gbxnovatelacfr/driver.h:373
@ InsRtkFloat
INS RTK floating point ambiguities solution b.
Definition: gbxnovatelacfr/driver.h:279
Configuration structure.
Definition: gbxgarminacfr/driver.h:23
@ ColdStart
Not yet converged from cold start.
Definition: gbxnovatelacfr/driver.h:213
@ IntegrityWarning
Large residuals make position unreliable.
Definition: gbxnovatelacfr/driver.h:220
bool isValid() const
Returns true if the configuration is sane.
Definition: gbxnovatelacfr/driver.cpp:777
@ ReservedGpsPosVelType3
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:240
Raw IMU information.
Definition: gbxnovatelacfr/driver.h:410
float sigmaLatitude
[m] 1 standard deviation error estimate
Definition: gbxnovatelacfr/driver.h:367
double xDeltaV
[m/s] right positive
Definition: gbxnovatelacfr/driver.h:425
double zDeltaAng
[rad] right handed around z
Definition: gbxnovatelacfr/driver.h:434
This exception is raised when something is wrong with the hardware.
Definition: gbxutilacfr/exceptions.h:83
@ Variance
Variance exceeds limits.
Definition: gbxnovatelacfr/driver.h:215
double upVelocity
[m/s] down is negative
Definition: gbxnovatelacfr/driver.h:330
Encapsulates a serial port.
Definition: serial.h:43
std::string toString() const
Dumps the config in human readable form.
Definition: gbxnovatelacfr/driver.cpp:744
float diffAge
[s] how old the correction info from the basestation is
Definition: gbxnovatelacfr/driver.h:371
@ CovTrace
Covariance trace exceeds maximum (trace > 1000 m)
Definition: gbxnovatelacfr/driver.h:211
float solutionAge
[s]
Definition: gbxnovatelacfr/driver.h:372
double secIntoWeek
yields GPS-time (together with gpsWeekNr); continous (contrary to UTC which uses leapseconds)
Definition: gbxnovatelacfr/driver.h:319
@ NoMsg
Nothing new, no message.
Definition: gbxnovatelacfr/driver.h:192
@ None
No solution.
Definition: gbxnovatelacfr/driver.h:237
@ WideLane
Solution from wide-lane ambiguities.
Definition: gbxnovatelacfr/driver.h:242
unsigned int msIntoWeek
yields GPS-time (together with gpsWeekNr); continous (contrary to UTC which uses leapseconds)
Definition: gbxnovatelacfr/driver.h:359
@ Residuals
Residuals are too large.
Definition: gbxnovatelacfr/driver.h:216
@ Differential
Differentially corrected.
Definition: nmeamessages.h:51
Driver(const Config &config, gbxutilacfr::Tracer &tracer, gbxutilacfr::Status &status, int serialDebugLevel=0)
Definition: gbxgarminacfr/driver.cpp:67
double verticalSpeed
[m/s]
Definition: gbxnovatelacfr/driver.h:400
Local interface to component status.
Definition: status.h:253
bool ignoreUnknown
Definition: gbxgarminacfr/driver.h:58
@ NarrowInt
Integer narrow-lane ambiguity solution.
Definition: gbxnovatelacfr/driver.h:274
double eastVelocity
[m/s] west is negative
Definition: gbxnovatelacfr/driver.h:329
std::string protocol
Serial Protocol: Garmin or NMEA.
Definition: gbxgarminacfr/driver.h:44
@ OmniStarXp
OmniSTAR extra precision a.
Definition: gbxnovatelacfr/driver.h:282
bool enableInsPhaseUpdate_
tightly coupled (phase based vs position based) filter; Chance of better performance in adverse condi...
Definition: gbxnovatelacfr/driver.h:159
@ InvalidFix
The fixed position, entered using the FIX POSITION command, is not valid.
Definition: gbxnovatelacfr/driver.h:226
@ FixedHeight
Position has been fixed by the FIX HEIGHT, or FIX AUTO, command or by position averaging.
Definition: gbxnovatelacfr/driver.h:239
@ InsInactive
INS has not started yet.
Definition: gbxnovatelacfr/driver.h:221
@ ReservedGpsPosVelType22
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:259
@ IonoFreeFloat
Floating ionospheric-free ambiguity solution.
Definition: gbxnovatelacfr/driver.h:270
double dtInsPva_
100Hz max, if RawImu is enabled 50Hz max
Definition: gbxnovatelacfr/driver.h:145
double longitude
[deg] east positive WGS84
Definition: gbxnovatelacfr/driver.h:321
@ ReservedGpsPosVelType10
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:247
double yDeltaAng
[rad] right handed around y
Definition: gbxnovatelacfr/driver.h:435
bool isValid()
Returns true if the configuration is sane.
Definition: gbxnovatelacfr/driver.cpp:641
Config()
disables everything, so you can (and must) set just the options you need.
Definition: gbxnovatelacfr/driver.cpp:610
double yDeltaV
[m/s] forward positive
Definition: gbxnovatelacfr/driver.h:424
int gpsWeekNr
number of full weeks since midnight 05/Jan/1980 (UTC)
Definition: gbxnovatelacfr/driver.h:318
bool readVtg
Read GPVTG sentence.
Definition: gbxgarminacfr/driver.h:49
GpsPosVelType
Novatel's different fix types.
Definition: gbxnovatelacfr/driver.h:236
@ ReservedGpsPosVelType11
Value Reserved for future use.
Definition: gbxnovatelacfr/driver.h:248
@ Ok
All good, but something to say.
Definition: gbxnovatelacfr/driver.h:194
std::vector< double > imuToGpsOffset_
vector (xyz [m]) from IMU center to Antenna Phase Center, in IMU coordinates, vital for INS performan...
Definition: gbxnovatelacfr/driver.h:155
@ Omnistar
OmniSTAR VBS position (L1 sub-meter) a.
Definition: gbxnovatelacfr/driver.h:257
bool enableSBAS_
code-differential corrections over satellite on GPS frequencies (WAAS/EGNOS)
Definition: gbxnovatelacfr/driver.h:167
SICK laser driver.
@ FloatConv
Solution from floating point carrier phase ambiguities.
Definition: gbxnovatelacfr/driver.h:241
@ Fault
Problem, probably fatal.
Definition: gbxnovatelacfr/driver.h:196
A handy class that performs timing functions using Ice Time class.
Definition: timer.h:31
int timeStampSec
in Computer time, beginning of message at serial port
Definition: gbxnovatelacfr/driver.h:381
@ Invalid
Invalid or not available.
Definition: nmeamessages.h:46
@ TestDist
Test distance exceeded (maximum of 3 rejections if distance > 10 km)
Definition: gbxnovatelacfr/driver.h:212
std::vector< double > imuToGpsOffsetUncertainty_
optional (size 3 or 0) xyz; !it is unclear to me whether these are factors, or absolute values (in [m...
Definition: gbxnovatelacfr/driver.h:156
double pitch
[degree] right handed rotation from local level around x-axes
Definition: gbxnovatelacfr/driver.h:339
virtual void debug(const std::string &message, int level=1, bool localOnly=false)
Definition: tracer.h:157
StatusMessageType
possible Status Messages GenericData can contain
Definition: gbxnovatelacfr/driver.h:191
Minimum information needed to configure the receiver in GPS only mode.
Definition: gbxnovatelacfr/driver.h:64
bool enableCDGPS_
code-differential corrections over satellite (North America/Canada)
Definition: gbxnovatelacfr/driver.h:166
 

Generated for GearBox by  doxygen 1.4.5