My Project 1.0
Holistic Fusion: A Generic Framework for Multimodal Sensor Fusion
Loading...
Searching...
No Matches
Gnss.h
Go to the documentation of this file.
1/*
2Copyright 2017 by Dominic Jud, Robotic Systems Lab, ETH Zurich.
3All rights reserved.
4This file is released under the "BSD-3-Clause License".
5Please see the LICENSE file that has been included as part of this package.
6 */
7
8#ifndef GNSS_H
9#define GNSS_H
10
11#pragma once
12
13#include <Eigen/Dense>
14
15namespace holistic_fusion {
16
17class Gnss {
18 public:
19 Gnss();
20 virtual ~Gnss() = default;
21
22 // Setters
23 void setReference(const double& referenceLatitude, const double& referenceLongitude, const double& referenceAltitude,
24 const double& referenceHeading);
25 void setMercatorReferenceFrame(const Eigen::Vector3d newReferencePoint);
26
27 // Conversion methods
28 // Default
29 Eigen::Vector3d gnssToCartesian(const double& latitudeInDegrees, const double& longitudeInDegrees, const double& altitude);
30 Eigen::Vector3d cartesianToGps(const Eigen::Matrix<double, 3, 1> position) const;
31 Eigen::Vector3d besselEllipsoidToMercator(const double& latitudeInRad, const double& longitudeInRad, const double& altitude);
32 // LV03
33 Eigen::Vector3d gnssToLv03Raw(const double latitude_in_degrees, const double longitude_in_degrees, const double altitude);
34 Eigen::Vector3d gnssToLv03(const double latitude_in_degrees, const double longitude_in_degrees, const double altitude);
35 double wGStoCHx(double lat, double lng);
36 double wGStoCHy(double lat, double lng);
37 double decToSexAngle(double dec);
38 double sexAngleToSeconds(double dms);
39
40 // Getters
41 double getReferenceLongitude() const { return referenceLongitude_; }
42 double getReferenceLatitude() const { return referenceLatitude_; }
43 double getReferenceAltitude() const { return referenceAltitude_; }
44 double getReferenceHeading() const { return referenceHeading_; }
45
46 protected:
48
50 double referenceLongitude_ = 7.43958;
51
53 double referenceLatitude_ = 46.95241;
54
56 double referenceAltitude_ = 0.0;
57
59 double referenceHeading_ = 0.0;
60
61 // LV03 Reference
62 Eigen::Vector3d referencePointLv03_ = Eigen::Vector3d::Zero();
63
64 // Conversion parameters
65 double earthRadiusN_ = 0.0;
66 double earthRadiusE_ = 0.0;
67
68 // WGS84 constants for conversion
69 const double equatorialRadius_ = 6378137.0;
70 const double flattening_ = 1.0 / 298.257223563;
71 // calculate WGS84 constants
73
74 // As described in :
75 // https://www.swisstopo.admin.ch/content/swisstopo-internet/de/topics/survey/reference-systems/switzerland/_jcr_content/contentPar/tabs/items/dokumente_publikatio/tabPar/downloadlist/downloadItems/517_1459343190376.download/refsys_d.pdf
76 // Major Axis Bessel Ellipsoid
77 const double a_ = 6377397.155;
78 // 1. numerical Excentricity Bessel Ellipsoid
79 const double e2_ = 0.006674372230614;
80 // Latitude Bern
81 const double phi0_ = 46.95241 * M_PI / 180.0;
82 // Longitude Bern
83 const double lambda0_ = 7.43958 * M_PI / 180.0;
84 // Projection Sphere Radius
85 const double r_ = a_ * sqrt(1 - e2_) / (1 - e2_ * sin(phi0_) * sin(phi0_));
86 // Ratio Sphere Length to Ellipsoid Length;
87 const double alpha_ = sqrt(1 + e2_ / (1 - e2_) * pow(cos(phi0_), 4));
88 // Latitude of Zero Point on Sphere
89 const double b0_ = asin(sin(phi0_) / alpha_);
90 // Konstante der Breitenformel
91 const double k_ = log(tan(M_PI_4 + b0_ / 2.0)) - alpha_ * log(tan(M_PI_4 + phi0_ / 2.0)) +
92 alpha_ * sqrt(e2_) / 2.0 * log((1 + sqrt(e2_) * sin(phi0_)) / (1 - sqrt(e2_) * sin(phi0_)));
93 // xyz-offset
94 Eigen::Vector3d xyzOffset_ = Eigen::Vector3d::Zero();
95};
96
97} // namespace holistic_fusion
98
99#endif // GNSS_H
double wGStoCHy(double lat, double lng)
Definition Gnss.cpp:121
double referenceLatitude_
Reference latitude of the GPS measurements [deg].
Definition Gnss.h:53
virtual ~Gnss()=default
Eigen::Vector3d besselEllipsoidToMercator(const double &latitudeInRad, const double &longitudeInRad, const double &altitude)
Definition Gnss.cpp:72
const double alpha_
Definition Gnss.h:87
double sexAngleToSeconds(double dms)
Definition Gnss.cpp:140
Eigen::Vector3d referencePointLv03_
Definition Gnss.h:62
const double b0_
Definition Gnss.h:89
double getReferenceHeading() const
Definition Gnss.h:44
double earthRadiusN_
Definition Gnss.h:65
double referenceAltitude_
Reference altitude of the GPS measurements [m].
Definition Gnss.h:56
void setMercatorReferenceFrame(const Eigen::Vector3d newReferencePoint)
Definition Gnss.cpp:39
Eigen::Vector3d xyzOffset_
Definition Gnss.h:94
const double excentricity2_
Definition Gnss.h:72
double getReferenceLatitude() const
Definition Gnss.h:42
double referenceLongitude_
Reference longitude of the GPS measurements [deg].
Definition Gnss.h:50
Eigen::Vector3d gnssToLv03(const double latitude_in_degrees, const double longitude_in_degrees, const double altitude)
Definition Gnss.cpp:92
const double k_
Definition Gnss.h:91
void setReference(const double &referenceLatitude, const double &referenceLongitude, const double &referenceAltitude, const double &referenceHeading)
Definition Gnss.cpp:24
const double r_
Definition Gnss.h:85
double referenceHeading_
Reference heading for the GPS measurements [rad].
Definition Gnss.h:59
double getReferenceLongitude() const
Definition Gnss.h:41
Eigen::Vector3d cartesianToGps(const Eigen::Matrix< double, 3, 1 > position) const
Definition Gnss.cpp:61
const double e2_
Definition Gnss.h:79
const double a_
Definition Gnss.h:77
const double flattening_
Definition Gnss.h:70
double wGStoCHx(double lat, double lng)
Definition Gnss.cpp:108
double getReferenceAltitude() const
Definition Gnss.h:43
const double phi0_
Definition Gnss.h:81
const double lambda0_
Definition Gnss.h:83
double earthRadiusE_
Definition Gnss.h:66
Eigen::Vector3d gnssToCartesian(const double &latitudeInDegrees, const double &longitudeInDegrees, const double &altitude)
Definition Gnss.cpp:45
void calculateConversionParameters()
Definition Gnss.cpp:16
Eigen::Vector3d gnssToLv03Raw(const double latitude_in_degrees, const double longitude_in_degrees, const double altitude)
Definition Gnss.cpp:102
double decToSexAngle(double dec)
Definition Gnss.cpp:133
const double equatorialRadius_
Definition Gnss.h:69