Autonomy Software C++ 24.5.1
Welcome to the Autonomy Software repository of the Mars Rover Design Team (MRDT) at Missouri University of Science and Technology (Missouri S&T)! API reference contains the source code and other resources for the development of the autonomy software for our Mars rover. The Autonomy Software project aims to compete in the University Rover Challenge (URC) by demonstrating advanced autonomous capabilities and robust navigation algorithms.
Loading...
Searching...
No Matches
GeospatialOperations.hpp
Go to the documentation of this file.
1
12#ifndef GEOSPATIAL_OPERATIONS_HPP
13#define GEOSPATIAL_OPERATIONS_HPP
14
15#include "../AutonomyLogging.h"
16
18#include <GeographicLib/Geodesic.hpp>
19#include <GeographicLib/UTMUPS.hpp>
20#include <chrono>
21
23
24
32namespace geoops
33{
35 // Declare public enums.
37
38 // This enum is used to store values for the waypoint type.
39 enum class WaypointType
40 {
41 eNavigationWaypoint,
42 eTagWaypoint,
43 eMalletWaypoint,
44 eWaterBottleWaypoint,
45 eObjectWaypoint, // Used to represent either Mallet or WaterBottle waypoint.
46 eObstacleWaypoint,
47 eUNKNOWN
48 };
49
50 // This enum is used to store the location fix type for a UTM or GPS points, the enum indexes follow the UBLOX-F9P docs.
51 enum class PositionFixType
52 {
53 eNoFix,
54 eDeadReckoning,
55 eFix2D,
56 eFix3D,
57 eGNSSDeadReckoningCombined,
58 eTimeOnly,
59 eUNKNOWN
60 };
61
63 // Declare public variables.
65
67 // Declare public structs that are specific to and used within this class.
69
70
82 {
83 public:
84 // Define public struct attributes.
85 double dDistanceMeters; // The great circle distance between the two points.
86 double dArcLengthDegrees; // The degree measurement difference between the two points from the center of the sphere. (0, 180)
87 double dStartRelativeBearing; // The relative bearing in degrees from the first point to the second point for the shortest great circle path. (0, 360)
88 double dEndRelativeBearing; // The relative bearing in degrees from the second point to the first point for the shortest great circle path. (0, 360)
89 };
90
91
99 {
100 public:
101 // Declare struct public attributes
102 double dLatitude; // The geographic latitude in degrees, typically within the range [-90, 90].
103 double dLongitude; // The geographic longitude in degrees, typically within the range [-180, 180].
104 double dAltitude; // The elevation above sea level in meters.
105 double d2DAccuracy; // The horizontal accuracy of the GPS coordinates in meters.
106 double d3DAccuracy; // The three-dimensional accuracy, including altitude, in meters.
107 double dMeridianConvergence; // The angle between true north and grid north at the given location in degrees. Positive in eastern direction.
108 double dScale; // The scale factor applied to the UTM coordinates for map projection.
109 PositionFixType eCoordinateAccuracyFixType; // The type of satellite location lock the coordinate was taken under.
110 bool bIsDifferential; // Whether of not the coordinate was taken under a differential GPS lock.
111 std::chrono::system_clock::time_point tmTimestamp; // The chrono time point when the GPS coordinate was created/received.
112
114 // Declare public methods.
116
132 GPSCoordinate(double dLatitude = 0.0,
133 double dLongitude = 0.0,
134 double dAltitude = 0.0,
135 double d2DAccuracy = -1.0,
136 double d3DAccuracy = -1.0,
137 double dMeridianConvergence = -1.0,
138 double dScale = 0.0,
139 PositionFixType eCoordinateAccuracyFixType = PositionFixType::eUNKNOWN,
140 bool bIsDifferential = false,
141 std::chrono::system_clock::time_point tmTimestamp = std::chrono::system_clock::time_point().min())
142 {
143 // Initialize member variables with given values.
144 this->dLatitude = dLatitude;
145 this->dLongitude = dLongitude;
146 this->dAltitude = dAltitude;
147 this->d2DAccuracy = d2DAccuracy;
148 this->d3DAccuracy = d3DAccuracy;
149 this->dMeridianConvergence = dMeridianConvergence;
150 this->dScale = dScale;
151 this->eCoordinateAccuracyFixType = eCoordinateAccuracyFixType;
152 this->bIsDifferential = bIsDifferential;
153 this->tmTimestamp = tmTimestamp;
154 }
155
156
166 bool operator==(const GPSCoordinate& stOtherCoordinate) const
167 {
168 // Check if location, altitude, and accuracy are the same. Not going to worry about other values for now.
169 return (dLatitude == stOtherCoordinate.dLatitude && dLongitude == stOtherCoordinate.dLongitude && dAltitude == stOtherCoordinate.dAltitude &&
170 d2DAccuracy == stOtherCoordinate.d2DAccuracy && d3DAccuracy == stOtherCoordinate.d3DAccuracy &&
171 eCoordinateAccuracyFixType == stOtherCoordinate.eCoordinateAccuracyFixType && bIsDifferential == stOtherCoordinate.bIsDifferential);
172 }
173
174
184 bool operator!=(const GPSCoordinate& stOtherCoordinate) const { return !this->operator==(stOtherCoordinate); }
185 };
186
187
195 {
196 public:
197 // Declare struct public attributes.
198 double dEasting; // The eastward displacement from the UTM zone's central meridian in meters.
199 double dNorthing; // The northward displacement from the equator in meters.
200 int nZone; // The UTM zone number identifying the region on the Earth's surface.
201 bool bWithinNorthernHemisphere; // Indicates whether the coordinate is located in the northern hemisphere.
202 double dAltitude; // The elevation above sea level in meters.
203 double d2DAccuracy; // The horizontal accuracy of the UTM coordinates in meters.
204 double d3DAccuracy; // The three-dimensional accuracy, including altitude, in meters.
205 double dMeridianConvergence; // The angle between true north and grid north at the given location in degrees. Positive in eastern direction.
206 double dScale; // The scale factor applied to the UTM coordinates for map projection.
207 PositionFixType eCoordinateAccuracyFixType; // The type of satellite location lock the coordinate was taken under.
208 bool bIsDifferential; // Whether of not the coordinate was taken under a differential GPS lock.
209 std::chrono::system_clock::time_point tmTimestamp; // The chrono time point when the GPS coordinate was created/received.
210
212 // Declare public methods.
214
215
233 UTMCoordinate(double dEasting = 0.0,
234 double dNorthing = 0.0,
235 int nZone = 0,
236 bool bWithinNorthernHemisphere = true,
237 double dAltitude = 0.0,
238 double d2DAccuracy = -1.0,
239 double d3DAccuracy = -1.0,
240 double dMeridianConvergence = -1.0,
241 double dScale = 0.0,
242 PositionFixType eCoordinateAccuracyFixType = PositionFixType::eUNKNOWN,
243 bool bIsDifferential = false,
244 std::chrono::system_clock::time_point tmTimestamp = std::chrono::system_clock::time_point().min())
245 {
246 // Initialize member variables with given values.
247 this->dEasting = dEasting;
248 this->dNorthing = dNorthing;
249 this->nZone = nZone;
250 this->bWithinNorthernHemisphere = bWithinNorthernHemisphere;
251 this->dAltitude = dAltitude;
252 this->d2DAccuracy = d2DAccuracy;
253 this->d3DAccuracy = d3DAccuracy;
254 this->dMeridianConvergence = dMeridianConvergence;
255 this->dScale = dScale;
256 this->eCoordinateAccuracyFixType = eCoordinateAccuracyFixType;
257 this->bIsDifferential = bIsDifferential;
258 this->tmTimestamp = tmTimestamp;
259 }
260
261
271 bool operator==(const UTMCoordinate& stOtherCoordinate) const
272 {
273 // Check if location, altitude, and accuracy are the same. Not going to worry about other values for now.
274 return (dEasting == stOtherCoordinate.dEasting && dNorthing == stOtherCoordinate.dNorthing && nZone == stOtherCoordinate.nZone &&
275 bWithinNorthernHemisphere == stOtherCoordinate.bWithinNorthernHemisphere && dAltitude == stOtherCoordinate.dAltitude &&
276 d2DAccuracy == stOtherCoordinate.d2DAccuracy && d3DAccuracy == stOtherCoordinate.d3DAccuracy &&
277 eCoordinateAccuracyFixType == stOtherCoordinate.eCoordinateAccuracyFixType && bIsDifferential == stOtherCoordinate.bIsDifferential);
278 }
279
280
290 bool operator!=(const UTMCoordinate& stOtherCoordinate) const { return !this->operator==(stOtherCoordinate); }
291 };
292
293
303 {
304 // Create instance variables.
305 UTMCoordinate stConvertCoord;
306
307 // Get data out of the GPS coord and repackage it into the UTM struct.
308 stConvertCoord.d2DAccuracy = stGPSCoord.d2DAccuracy;
309 stConvertCoord.d3DAccuracy = stGPSCoord.d3DAccuracy;
310 stConvertCoord.dAltitude = stGPSCoord.dAltitude;
311 stConvertCoord.eCoordinateAccuracyFixType = stGPSCoord.eCoordinateAccuracyFixType;
312 stConvertCoord.bIsDifferential = stGPSCoord.bIsDifferential;
313 stConvertCoord.tmTimestamp = stGPSCoord.tmTimestamp;
314
315 // Catch errors from GeographicLib.
316 try
317 {
318 // Forward solve for the UTM coord.
319 GeographicLib::UTMUPS::Forward(stGPSCoord.dLatitude,
320 stGPSCoord.dLongitude,
321 stConvertCoord.nZone,
322 stConvertCoord.bWithinNorthernHemisphere,
323 stConvertCoord.dEasting,
324 stConvertCoord.dNorthing,
325 stConvertCoord.dMeridianConvergence,
326 stConvertCoord.dScale);
327 }
328 catch (const GeographicLib::GeographicErr::exception& geError)
329 {
330 // Submit logger message.
331 LOG_ERROR(logging::g_qSharedLogger, "Unable to forward solve a GPSCoordinate to UTMCoordinate. GeographicLib error is: {}", geError.what());
332 }
333
334 // Return the converted UTM coordinate.
335 return stConvertCoord;
336 }
337
338
348 {
349 // Create instance variables.
350 GPSCoordinate stConvertCoord;
351
352 // Get data out of the UTM coord and repackage it into the GPS struct.
353 stConvertCoord.d2DAccuracy = stUTMCoord.d2DAccuracy;
354 stConvertCoord.d3DAccuracy = stUTMCoord.d3DAccuracy;
355 stConvertCoord.dAltitude = stUTMCoord.dAltitude;
356 stConvertCoord.eCoordinateAccuracyFixType = stUTMCoord.eCoordinateAccuracyFixType;
357 stConvertCoord.bIsDifferential = stUTMCoord.bIsDifferential;
358 stConvertCoord.tmTimestamp = stUTMCoord.tmTimestamp;
359
360 // Catch errors from GeographicLib.
361 try
362 {
363 // Reverse solve for the UTM coord.
364 GeographicLib::UTMUPS::Reverse(stUTMCoord.nZone,
365 stUTMCoord.bWithinNorthernHemisphere,
366 std::fabs(stUTMCoord.dEasting),
367 stUTMCoord.dNorthing,
368 stConvertCoord.dLatitude,
369 stConvertCoord.dLongitude,
370 stConvertCoord.dMeridianConvergence,
371 stConvertCoord.dScale);
372 }
373 catch (const GeographicLib::GeographicErr::exception& geError)
374 {
375 // Submit logger message.
376 LOG_ERROR(logging::g_qSharedLogger, "Unable to reverse solve a UTMCoordinate to GPSCoordinate. GeographicLib error is: {}", geError.what());
377 }
378
379 // Return the converted UTM coordinate.
380 return stConvertCoord;
381 }
382
383
391 struct Waypoint
392 {
393 private:
394 // Declare struct private member variables.
395 geoops::GPSCoordinate stGPSLocation; // This is not meant to be changed once this waypoint is created.
396 geoops::UTMCoordinate stUTMLocation; // This is not meant to be changed once this waypoint is created.
397
398 public:
399 // Declare struct public member variables.
400 WaypointType eType;
401 double dRadius;
402 int nID;
403
404
420 const WaypointType& eType = WaypointType::eUNKNOWN,
421 const double dRadius = 0.0,
422 const int nID = -1)
423 {
424 // Initialize member variables.
425 this->stGPSLocation = stGPSLocation;
426 this->stUTMLocation = geoops::ConvertGPSToUTM(stGPSLocation);
427 this->eType = eType;
428 this->dRadius = dRadius;
429 this->nID = nID;
430 }
431
432
447 Waypoint(const geoops::UTMCoordinate& stUTMLocation, const WaypointType& eType = WaypointType::eUNKNOWN, const double dRadius = 0.0, const int nID = -1)
448 {
449 // Initialize member variables.
450 this->stUTMLocation = stUTMLocation;
451 this->stGPSLocation = geoops::ConvertUTMToGPS(stUTMLocation);
452 this->eType = eType;
453 this->dRadius = dRadius;
454 this->nID = nID;
455 }
456
457
466 const geoops::GPSCoordinate& GetGPSCoordinate() const { return stGPSLocation; }
467
468
477 const geoops::UTMCoordinate& GetUTMCoordinate() const { return stUTMLocation; }
478
479
489 bool operator==(const Waypoint& stOtherWaypoint) const
490 {
491 // Check if location, altitude, and accuracy are the same. Not going to worry about other values for now.
492 return (stGPSLocation == stOtherWaypoint.stGPSLocation && stUTMLocation == stOtherWaypoint.stUTMLocation && eType == stOtherWaypoint.eType &&
493 dRadius == stOtherWaypoint.dRadius && nID == stOtherWaypoint.nID);
494 }
495
496
506 bool operator!=(const Waypoint& stOtherWaypoint) const { return !this->operator==(stOtherWaypoint); }
507 };
508
509
522 inline GeoMeasurement CalculateGeoMeasurement(const GPSCoordinate& stCoord1, const GPSCoordinate& stCoord2)
523 {
524 // Create instance variables.
525 GeoMeasurement stMeasurements;
526
527 // Construct a geodesic with earth characteristics. (Radius and flattening)
528 // The WGS84 standard is widely used and aligns with Google Maps.
529 GeographicLib::Geodesic geGeodesic = GeographicLib::Geodesic::WGS84();
530
531 // Solve the inverse geodesic for distance and arc length degrees at the center of the globe, and relative bearings.
532 stMeasurements.dArcLengthDegrees = geGeodesic.Inverse(stCoord1.dLatitude,
533 stCoord1.dLongitude,
534 stCoord2.dLatitude,
535 stCoord2.dLongitude,
536 stMeasurements.dDistanceMeters,
537 stMeasurements.dStartRelativeBearing,
538 stMeasurements.dEndRelativeBearing);
539
540 // NOTE: Regarding azi1 vs azi2, azi1 is the direction measured at point 1 (your navigation aid) to point 2. azi2 is the direction measured at point 2 (your
541 // location) away from point 1. (If you want the direction to point 1, add ±180° to azi2.)
542 // Map the -180, 180 range of the azimuths to 0, 360, with both points zeroed at North.
543 stMeasurements.dStartRelativeBearing = std::fmod((stMeasurements.dStartRelativeBearing + 360), 360);
544 stMeasurements.dEndRelativeBearing = std::fmod((stMeasurements.dEndRelativeBearing + 180), 360);
545 // Ensure the result angle is positive.
546 if (stMeasurements.dStartRelativeBearing < 0)
547 {
548 // Add 360 degrees.
549 stMeasurements.dStartRelativeBearing += 360;
550 }
551 // Ensure the result angle is positive.
552 if (stMeasurements.dEndRelativeBearing < 0)
553 {
554 // Add 360 degrees.
555 stMeasurements.dEndRelativeBearing += 360;
556 }
557
558 // Return result distance.
559 return stMeasurements;
560 }
561
562
575 inline GeoMeasurement CalculateGeoMeasurement(const UTMCoordinate& stCoord1, const UTMCoordinate& stCoord2)
576 {
577 // Create instance variables.
578 GeoMeasurement stMeasurements;
579
580 // Construct a geodesic with earth characteristics. (Radius and flattening)
581 // The WGS84 standard is widely used and aligns with Google Maps.
582 GeographicLib::Geodesic geGeodesic = GeographicLib::Geodesic::WGS84();
583
584 // Convert the given UTM coords into GPS coords for temporary use.
585 GPSCoordinate stGPSCoord1 = ConvertUTMToGPS(stCoord1);
586 GPSCoordinate stGPSCoord2 = ConvertUTMToGPS(stCoord2);
587
588 // Solve the inverse geodesic.
589 stMeasurements.dArcLengthDegrees = geGeodesic.Inverse(stGPSCoord1.dLatitude,
590 stGPSCoord1.dLongitude,
591 stGPSCoord2.dLatitude,
592 stGPSCoord2.dLongitude,
593 stMeasurements.dDistanceMeters,
594 stMeasurements.dStartRelativeBearing,
595 stMeasurements.dEndRelativeBearing);
596
597 // NOTE: Regarding azi1 vs azi2, azi1 is the direction measured at point 1 (your navigation aid) to point 2. azi2 is the direction measured at point 2 (your
598 // location) away from point 1. (If you want the direction to point 1, add ±180° to azi2.)
599 // Map the -180, 180 range of the azimuths to 0, 360, with both points zeroed at North.
600 stMeasurements.dStartRelativeBearing = std::fmod((stMeasurements.dStartRelativeBearing + 360), 360);
601 stMeasurements.dEndRelativeBearing = std::fmod((stMeasurements.dEndRelativeBearing + 180), 360);
602 // Ensure the result angle is positive.
603 if (stMeasurements.dStartRelativeBearing < 0)
604 {
605 // Add 360 degrees.
606 stMeasurements.dStartRelativeBearing += 360;
607 }
608 // Ensure the result angle is positive.
609 if (stMeasurements.dEndRelativeBearing < 0)
610 {
611 // Add 360 degrees.
612 stMeasurements.dEndRelativeBearing += 360;
613 }
614
615 // Return result distance.
616 return stMeasurements;
617 }
618
619
629 inline GeoMeasurement CalculateGeoMeasurement(const geoops::Waypoint& stWaypoint1, const geoops::Waypoint& stWaypoint2)
630 {
631 // Create instance variables.
632 GeoMeasurement stMeasurements;
633
634 // Construct a geodesic with earth characteristics. (Radius and flattening)
635 // The WGS84 standard is widely used and aligns with Google Maps.
636 GeographicLib::Geodesic geGeodesic = GeographicLib::Geodesic::WGS84();
637
638 // Solve the inverse geodesic.
639 stMeasurements.dArcLengthDegrees = geGeodesic.Inverse(stWaypoint1.GetGPSCoordinate().dLatitude,
640 stWaypoint1.GetGPSCoordinate().dLongitude,
641 stWaypoint2.GetGPSCoordinate().dLatitude,
642 stWaypoint2.GetGPSCoordinate().dLongitude,
643 stMeasurements.dDistanceMeters,
644 stMeasurements.dStartRelativeBearing,
645 stMeasurements.dEndRelativeBearing);
646
647 // NOTE: Regarding azi1 vs azi2, azi1 is the direction measured at point 1 (your navigation aid) to point 2. azi2 is the direction measured at point 2 (your
648 // location) away from point 1. (If you want the direction to point 1, add ±180° to azi2.)
649 // Map the -180, 180 range of the azimuths to 0, 360, with both points zeroed at North.
650 stMeasurements.dStartRelativeBearing = std::fmod((stMeasurements.dStartRelativeBearing + 360), 360);
651 stMeasurements.dEndRelativeBearing = std::fmod((stMeasurements.dEndRelativeBearing + 180), 360);
652 // Ensure the result angle is positive.
653 if (stMeasurements.dStartRelativeBearing < 0)
654 {
655 // Add 360 degrees.
656 stMeasurements.dStartRelativeBearing += 360;
657 }
658 // Ensure the result angle is positive.
659 if (stMeasurements.dEndRelativeBearing < 0)
660 {
661 // Add 360 degrees.
662 stMeasurements.dEndRelativeBearing += 360;
663 }
664
665 // Return result distance.
666 return stMeasurements;
667 }
668
669
677 {
678 private:
679 // Declare struct private member variables.
680 Waypoint stRoverPosition; // Stores the rover's 3D location in UTM and GPS form.
681 double dRoverHeading; // Stores the rover's compass heading. North = 0, CW=pos
682
683 public:
684
693 RoverPose(const geoops::GPSCoordinate& stRoverPosition = geoops::GPSCoordinate(), const double dRoverHeading = 0.0)
694 {
695 // Update member variables.
696 this->stRoverPosition = Waypoint(stRoverPosition);
697 this->dRoverHeading = dRoverHeading;
698 }
699
700
709 RoverPose(const geoops::UTMCoordinate& stRoverPosition, const double dRoverHeading = 0.0)
710 {
711 // Update member variables.
712 this->stRoverPosition = Waypoint(stRoverPosition);
713 this->dRoverHeading = dRoverHeading;
714 }
715
716
725 const geoops::GPSCoordinate& GetGPSCoordinate() const { return stRoverPosition.GetGPSCoordinate(); }
726
727
736 const geoops::UTMCoordinate& GetUTMCoordinate() const { return stRoverPosition.GetUTMCoordinate(); }
737
738
746 const geoops::Waypoint& GetWaypoint() const { return stRoverPosition; }
747
748
756 double GetCompassHeading() const { return dRoverHeading; }
757
758
768 bool operator==(const RoverPose& stOtherRoverPose) const
769 {
770 // Check if location, altitude, and accuracy are the same. Not going to worry about other values for now.
771 return (stRoverPosition == stOtherRoverPose.GetGPSCoordinate() && stRoverPosition == stOtherRoverPose.GetUTMCoordinate() &&
772 dRoverHeading == stOtherRoverPose.dRoverHeading);
773 }
774
775
785 bool operator!=(const RoverPose& stOtherRoverPose) const { return !this->operator==(stOtherRoverPose); }
786 };
787} // namespace geoops
788#endif
static softfloat min()
Namespace containing functions related to operations on global position number systems and other data...
Definition GeospatialOperations.hpp:33
GPSCoordinate ConvertUTMToGPS(const UTMCoordinate &stUTMCoord)
Given a UTM coordinate, convert to GPS and create a new GPSCoordinate object.
Definition GeospatialOperations.hpp:347
UTMCoordinate ConvertGPSToUTM(const GPSCoordinate &stGPSCoord)
Given a GPS coordinate, convert to UTM and create a new UTMCoordinate object.
Definition GeospatialOperations.hpp:302
GeoMeasurement CalculateGeoMeasurement(const GPSCoordinate &stCoord1, const GPSCoordinate &stCoord2)
The shortest path between two points on an ellipsoid at (lat1, lon1) and (lat2, lon2) is called the g...
Definition GeospatialOperations.hpp:522
This struct stores/contains information about a GPS data.
Definition GeospatialOperations.hpp:99
GPSCoordinate(double dLatitude=0.0, double dLongitude=0.0, double dAltitude=0.0, double d2DAccuracy=-1.0, double d3DAccuracy=-1.0, double dMeridianConvergence=-1.0, double dScale=0.0, PositionFixType eCoordinateAccuracyFixType=PositionFixType::eUNKNOWN, bool bIsDifferential=false, std::chrono::system_clock::time_point tmTimestamp=std::chrono::system_clock::time_point().min())
Construct a new GPSCoordinate object.
Definition GeospatialOperations.hpp:132
bool operator!=(const GPSCoordinate &stOtherCoordinate) const
Overridden operator not equals for GPSCoordinate struct.
Definition GeospatialOperations.hpp:184
bool operator==(const GPSCoordinate &stOtherCoordinate) const
Overridden operator equals for GPSCoordinate struct.
Definition GeospatialOperations.hpp:166
This struct is used to store the distance, arc length, and relative bearing for a calculated geodesic...
Definition GeospatialOperations.hpp:82
This struct is used by the WaypointHandler to provide an easy way to store all pose data about the ro...
Definition GeospatialOperations.hpp:677
RoverPose(const geoops::GPSCoordinate &stRoverPosition=geoops::GPSCoordinate(), const double dRoverHeading=0.0)
Construct a new Rover Pose object.
Definition GeospatialOperations.hpp:693
bool operator==(const RoverPose &stOtherRoverPose) const
Overridden operator equals for RoverPose struct.
Definition GeospatialOperations.hpp:768
const geoops::GPSCoordinate & GetGPSCoordinate() const
Accessor for the geoops::GPSCoordinate member variable.
Definition GeospatialOperations.hpp:725
bool operator!=(const RoverPose &stOtherRoverPose) const
Overridden operator equals for RoverPose struct.
Definition GeospatialOperations.hpp:785
double GetCompassHeading() const
Accessor for the Compass Heading private member.
Definition GeospatialOperations.hpp:756
const geoops::UTMCoordinate & GetUTMCoordinate() const
Accessor for the geoops::UTMCoordinate member variable.
Definition GeospatialOperations.hpp:736
RoverPose(const geoops::UTMCoordinate &stRoverPosition, const double dRoverHeading=0.0)
Construct a new Rover Pose object.
Definition GeospatialOperations.hpp:709
const geoops::Waypoint & GetWaypoint() const
Accessor for the Waypoint private member.
Definition GeospatialOperations.hpp:746
This struct stores/contains information about a UTM coordinate.
Definition GeospatialOperations.hpp:195
UTMCoordinate(double dEasting=0.0, double dNorthing=0.0, int nZone=0, bool bWithinNorthernHemisphere=true, double dAltitude=0.0, double d2DAccuracy=-1.0, double d3DAccuracy=-1.0, double dMeridianConvergence=-1.0, double dScale=0.0, PositionFixType eCoordinateAccuracyFixType=PositionFixType::eUNKNOWN, bool bIsDifferential=false, std::chrono::system_clock::time_point tmTimestamp=std::chrono::system_clock::time_point().min())
Construct a new UTMCoordinate object.
Definition GeospatialOperations.hpp:233
bool operator==(const UTMCoordinate &stOtherCoordinate) const
Overridden operator equals for UTMCoordinate struct.
Definition GeospatialOperations.hpp:271
bool operator!=(const UTMCoordinate &stOtherCoordinate) const
Overridden operator not equals for UTMCoordinate struct.
Definition GeospatialOperations.hpp:290
This struct is used by the WaypointHandler class to store location, size, and type information about ...
Definition GeospatialOperations.hpp:392
const geoops::GPSCoordinate & GetGPSCoordinate() const
Accessor for the geoops::GPSCoordinate member variable.
Definition GeospatialOperations.hpp:466
bool operator==(const Waypoint &stOtherWaypoint) const
Overridden operator equals for Waypoint struct.
Definition GeospatialOperations.hpp:489
Waypoint(const geoops::GPSCoordinate &stGPSLocation=geoops::GPSCoordinate(), const WaypointType &eType=WaypointType::eUNKNOWN, const double dRadius=0.0, const int nID=-1)
Construct a new Waypoint object.
Definition GeospatialOperations.hpp:419
bool operator!=(const Waypoint &stOtherWaypoint) const
Overridden operator equals for Waypoint struct.
Definition GeospatialOperations.hpp:506
Waypoint(const geoops::UTMCoordinate &stUTMLocation, const WaypointType &eType=WaypointType::eUNKNOWN, const double dRadius=0.0, const int nID=-1)
Construct a new Waypoint object.
Definition GeospatialOperations.hpp:447
const geoops::UTMCoordinate & GetUTMCoordinate() const
Accessor for the geoops::UTMCoordinate member variable.
Definition GeospatialOperations.hpp:477