diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c6cd3802f06a76c8dc5f9aff1cea5d460897a66..b3beddcb57454472c4f278701a5db658da2e4ae9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,9 +80,10 @@ SET(SOURCES src/utils/utils.cpp src/utils/transformations.cpp src/utils/rcv_position.cpp - src/utils/sat_position.cpp + src/utils/satellite.cpp src/observations.cpp src/navigation.cpp + src/snapshot.cpp src/tdcp.cpp src/ublox_raw.cpp) diff --git a/include/gnss_utils/observations.h b/include/gnss_utils/observations.h index f3a0846a26a39cdca1d688f3684e759452331f99..a4056d03b3a3fee72bb4424fbf0f4cee6c93a7e3 100644 --- a/include/gnss_utils/observations.h +++ b/include/gnss_utils/observations.h @@ -3,10 +3,13 @@ #include <vector> #include <map> +#include <set> #include <iostream> #include <memory> #include <cassert> +#include <eigen3/Eigen/Dense> + #include "gnss_utils/gnss_utils.h" #include "gnss_utils/utils/utils.h" @@ -60,6 +63,21 @@ public: void printByIdx(const int& _idx); void print(); + // TODO: +// std::set<int> filterEphemeris() const; +// std::set<int> removeSatellites() const; +// std::set<int> filterWrongCode() const; +// std::set<int> filterWrongCarrierPhase() const; +// std::set<int> filterConstellations() const; +// std::set<int> filterElevation() const; +// std::set<int> filterSnr() const; + std::set<int> filter(std::map<int, Eigen::Vector3d>& sats_pos, + std::set<int>& discarded_sats, + const Eigen::Vector3d& x_r, + const bool& check_code, + const bool& check_carrier_phase, + const prcopt_t& opt); + static void findCommonObservations(const Observations& obs_1, const Observations& obs_2, Observations& common_obs_1, diff --git a/include/gnss_utils/snapshot.h b/include/gnss_utils/snapshot.h new file mode 100644 index 0000000000000000000000000000000000000000..41c8dfcd681ffdd9a0168a1f011442869b38090d --- /dev/null +++ b/include/gnss_utils/snapshot.h @@ -0,0 +1,108 @@ +#ifndef INCLUDE_GNSS_UTILS_SNAPSHOT_H_ +#define INCLUDE_GNSS_UTILS_SNAPSHOT_H_ + +#include <map> +#include <set> +#include <iostream> +#include <memory> +#include <cassert> + +#include <eigen3/Eigen/Dense> + +#include "gnss_utils/observations.h" +#include "gnss_utils/navigation.h" + +namespace GnssUtils +{ +class Snapshot; +typedef std::shared_ptr<Snapshot> SnapshotPtr; +typedef std::shared_ptr<const Snapshot> SnapshotConstPtr; + +typedef std::map<int,Eigen::Vector3d> SatellitesPositions; + +class Snapshot +{ +public: + // Constructor & Destructor + Snapshot(); + Snapshot(ObservationsPtr obs, NavigationPtr nav); + ~Snapshot(){}; + + // Public objects + + // Public methods + void loadFromRinex(const std::string& rnx_file, gtime_t t_start, gtime_t t_end, double dt = 0.0, const char* opt = ""); + + ObservationsPtr getObservations() const; + NavigationPtr getNavigation() const; + const SatellitesPositions& getSatellitesPositions() const; + SatellitesPositions& getSatellitesPositions(); + void setObservations(ObservationsPtr obs); + void setNavigation(NavigationPtr nav); + + void computeSatellitesPositions(const int& eph_opt); // see rtklib.h L396); + bool satellitesPositionsComputed() const; + + std::set<int> filterObservations(std::set<int> &discarded_sats, + const Eigen::Vector3d &x_r, + const bool &check_code, + const bool &check_carrier_phase, + const prcopt_t &opt); + + void print(); + +private: + // Private objects + SatellitesPositions sats_pos_; //< key: sat number + ObservationsPtr obs_; + NavigationPtr nav_; + + // Private methods +}; + +inline GnssUtils::ObservationsPtr Snapshot::getObservations() const +{ + return obs_; +} + +inline GnssUtils::NavigationPtr Snapshot::getNavigation() const +{ + return nav_; +} + +inline SatellitesPositions& Snapshot::getSatellitesPositions() +{ + return sats_pos_; +} + +inline const SatellitesPositions& Snapshot::getSatellitesPositions() const +{ + return sats_pos_; +} + +inline void Snapshot::setObservations(ObservationsPtr obs) +{ + obs_ = obs; +} + +inline void Snapshot::setNavigation(NavigationPtr nav) +{ + nav_ = nav; +} + +inline bool Snapshot::satellitesPositionsComputed() const +{ + return !sats_pos_.empty(); +} + +inline std::set<int> Snapshot::filterObservations(std::set<int> &discarded_sats, + const Eigen::Vector3d &x_r, + const bool &check_code, + const bool &check_carrier_phase, + const prcopt_t &opt) +{ + return obs_->filter(sats_pos_, discarded_sats, x_r, check_code, check_carrier_phase, opt); +} + +} // namespace GnssUtils +#endif // INCLUDE_GNSS_UTILS_SNAPSHOT_H_ diff --git a/include/gnss_utils/tdcp.h b/include/gnss_utils/tdcp.h index 6d64e885bec90541f3fd4f3cc29fcc605576f277..0a0b2ffc5187d189d826eb3d531de9b1bbfa0f5c 100644 --- a/include/gnss_utils/tdcp.h +++ b/include/gnss_utils/tdcp.h @@ -8,11 +8,11 @@ #ifndef INCLUDE_GNSS_UTILS_TDCP_H_ #define INCLUDE_GNSS_UTILS_TDCP_H_ -#define GNSS_UTILS_TDCP_DEBUG 0 +#define GNSS_UTILS_TDCP_DEBUG 1 #include <set> #include "gnss_utils/utils/rcv_position.h" -#include "gnss_utils/utils/sat_position.h" +#include "utils/satellite.h" #include "gnss_utils/observations.h" #include "gnss_utils/navigation.h" @@ -72,14 +72,15 @@ bool Tdcp(const Observations& common_obs_r, std::set<int>& discarded_sats, const TdcpParams& sd_opt); -void filterCommonSatellites(Observations& common_obs_r, - std::map<int, Eigen::Vector3d>& common_sats_pos_r, - Observations& common_obs_k, - std::map<int, Eigen::Vector3d>& common_sats_pos_k, - std::set<int>& discarded_sats, - const Eigen::Vector3d& x_r, - const TdcpParams& sd_params, - const prcopt_t& opt); +void filterCommonObservations(Observations& common_obs_r, + std::map<int, Eigen::Vector3d>& common_sats_pos_r, + Observations& common_obs_k, + std::map<int, Eigen::Vector3d>& common_sats_pos_k, + std::set<int>& discarded_sats, + const Eigen::Vector3d& x_r, + const bool& check_code, + const bool& check_carrier_phase, + const prcopt_t& opt); } // namespace GnssUtils diff --git a/include/gnss_utils/utils/sat_position.h b/include/gnss_utils/utils/sat_position.h deleted file mode 100644 index 3e90436c2caea89e3e77fd57e99acbe8ce727813..0000000000000000000000000000000000000000 --- a/include/gnss_utils/utils/sat_position.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * sat_position.h - * - * Created on: April 3, 2020 - * Author: Joan Vallvé, Pep MartÃ-Saumell - */ - -#ifndef INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_ -#define INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_ - -#include <eigen3/Eigen/Dense> -#include <eigen3/Eigen/Geometry> -#include <eigen3/Eigen/Sparse> - -#include "gnss_utils/observations.h" -#include "gnss_utils/navigation.h" -#include "gnss_utils/utils/transformations.h" -#include "gnss_utils/gnss_utils.h" - -namespace GnssUtils -{ -double computeSatElevation(const Eigen::Vector3d& receiver_ecef, const Eigen::Vector3d& sat_ecef); - -void computeSatellitesPositions(const Observations& obs, - const Navigation& nav, - const prcopt_t& opt, - std::map<int, Eigen::Vector3d>& sats_pos); -} // namespace GnssUtils -#endif // INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_ \ No newline at end of file diff --git a/include/gnss_utils/utils/satellite.h b/include/gnss_utils/utils/satellite.h new file mode 100644 index 0000000000000000000000000000000000000000..665443d85d06af9fbf357b539bc15eda1a16f822 --- /dev/null +++ b/include/gnss_utils/utils/satellite.h @@ -0,0 +1,31 @@ +/* + * sat_position.h + * + * Created on: April 3, 2020 + * Author: Joan Vallvé, Pep MartÃ-Saumell + */ + +#ifndef INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_ +#define INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_ + +#include <eigen3/Eigen/Dense> +#include <eigen3/Eigen/Geometry> + +#include <set> + +#include "gnss_utils/observations.h" +#include "gnss_utils/navigation.h" +#include "gnss_utils/utils/transformations.h" +#include "gnss_utils/gnss_utils.h" + +namespace GnssUtils +{ + double computeSatElevation(const Eigen::Vector3d& receiver_ecef, const Eigen::Vector3d& sat_ecef); + + void computeSatellitesPositions(const Observations& obs, + const Navigation& nav, + const int& eph_opt, // see rtklib.h L396 + std::map<int, Eigen::Vector3d>& sats_pos); + +} // namespace GnssUtils +#endif // INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_ diff --git a/src/observations.cpp b/src/observations.cpp index 8f04ec1a62c866e58f074ef2468ade3a48ba5af7..4c455d0a43f459b3923ca9fd6e4335a100f78dfe 100644 --- a/src/observations.cpp +++ b/src/observations.cpp @@ -1,4 +1,5 @@ #include "gnss_utils/observations.h" +#include "gnss_utils/utils/satellite.h" using namespace GnssUtils; @@ -187,6 +188,99 @@ void Observations::print() } } +std::set<int> Observations::filter(std::map<int, Eigen::Vector3d>& sats_pos, + std::set<int>& discarded_sats, + const Eigen::Vector3d& x_r, + const bool& check_code, + const bool& check_carrier_phase, + const prcopt_t& opt) +{ + std::cout << "filterSatellites: initial size: " << obs_.size() << std::endl; + + std::set<int> remove_sats; + + for (int obs_i = 0; obs_i < obs_.size(); obs_i++) + { + auto&& obs_sat = getObservationByIdx(obs_i); + const int& sat_number = obs_sat.sat; + + // already discarded sats + if (discarded_sats.count(sat_number) != 0) + { + remove_sats.insert(sat_number); + continue; + } + + // wrong data (satellite is not included in the discarded list) + if (check_carrier_phase and std::abs(obs_sat.L[0]) < 1e-12) + { + std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_sat.L[0] << std::endl; + remove_sats.insert(sat_number); + continue; + } + if (check_code and std::abs(obs_sat.P[0]) < 1e-12) + { + std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_sat.P[0] << std::endl; + remove_sats.insert(sat_number); + continue; + } + + // bad or inexistent satellite position (satellite is not included in the discarded list) + if (sats_pos.count(sat_number) == 0 or + sats_pos[sat_number].isApprox(Eigen::Vector3d::Zero(), 1e-3) or + sats_pos[sat_number].isApprox(Eigen::Vector3d::Zero(), 1e-3)) + { + std::cout << "Discarding sat " << sat_number << ": wrong satellite position: \n\t" << sats_pos[sat_number].transpose() << std::endl; + remove_sats.insert(sat_number); + continue; + } + + // constellation + int sys = satsys(obs_sat.sat, NULL); + if (!(sys & opt.navsys)) + { + std::cout << "Discarding sat " << sat_number << ": not selected constellation " << sys << " - mask: " << opt.navsys << std::endl; + discarded_sats.insert(sat_number); + remove_sats.insert(sat_number); + continue; + } + + // check both elevations + double elevation = computeSatElevation(x_r, sats_pos[sat_number]); + if (elevation < opt.elmin) + { + std::cout << "Discarding sat " << sat_number << ": low elevation " << elevation << " - min: " << opt.elmin << std::endl; + discarded_sats.insert(sat_number); + remove_sats.insert(sat_number); + continue; + } + + // snr TODO: multifrequency (2nd param and 3rd idx) + if (testsnr(0, 0, elevation, obs_sat.SNR[0] * 0.25, &opt.snrmask) == 1) + { + std::cout << "Discarding sat " << sat_number << ": snr test " << std::endl; + discarded_sats.insert(sat_number); + remove_sats.insert(sat_number); + continue; + } + } + + // remove sats + // std::cout << "removing: " << remove_sats.size() << " satellites" << std::endl; + for (auto sat : remove_sats) + { + assert(hasSatellite(sat)); + assert(sats_pos.count(sat)); + removeObservationBySat(sat); + sats_pos.erase(sat); + } + + assert(obs_.size() == sats_pos.size()); + + return remove_sats; + // std::cout << "final size: " << obs_.size() << std::endl; +} + void Observations::findCommonObservations(const Observations& obs_1, const Observations& obs_2, Observations& common_obs_1, @@ -219,6 +313,7 @@ void Observations::findCommonObservations(const Observations& obs_1, // std::cout << std::endl; } + bool Observations::operator ==(const Observations &other_obs) const { diff --git a/src/snapshot.cpp b/src/snapshot.cpp new file mode 100644 index 0000000000000000000000000000000000000000..87a08ede1ce51e16b1dd3809aeb2039d553d9c23 --- /dev/null +++ b/src/snapshot.cpp @@ -0,0 +1,32 @@ +#include "gnss_utils/snapshot.h" +#include "gnss_utils/utils/satellite.h" + +using namespace GnssUtils; + +Snapshot::Snapshot() + : obs_(nullptr) + , nav_(nullptr) +{ + // +} + +Snapshot::Snapshot(ObservationsPtr obs, NavigationPtr nav) + : obs_(obs) + , nav_(nav) +{ + // +} + +void Snapshot::loadFromRinex(const std::string& rnx_file, gtime_t t_start, gtime_t t_end, double dt, const char* opt) +{ + throw std::runtime_error("not implemented!"); +} + +void Snapshot::computeSatellitesPositions(const int& eph_opt) +{ + assert(obs_!=nullptr && "null obs"); + assert(nav_!=nullptr && "null nav"); + assert(!satellitesPositionsComputed() && "satellites positions already computed"); + + GnssUtils::computeSatellitesPositions(*obs_, *nav_, eph_opt, sats_pos_); +} diff --git a/src/tdcp.cpp b/src/tdcp.cpp index b38f9e26bd0924f693d045437f3477245af4810d..a3d6d357cb2d6f33def9215c7c004aa88e963a01 100644 --- a/src/tdcp.cpp +++ b/src/tdcp.cpp @@ -53,12 +53,12 @@ bool Tdcp(const Observations& obs_r, // COMPUTE COMMON SATELLITES POSITION std::map<int, Eigen::Vector3d> common_sats_pos_r, common_sats_pos_k; - computeSatellitesPositions(common_obs_r, nav_r, opt, common_sats_pos_r); - computeSatellitesPositions(common_obs_k, sd_params.use_old_nav ? nav_r : nav_k, opt, common_sats_pos_k); + computeSatellitesPositions(common_obs_r, nav_r, opt.sateph, common_sats_pos_r); + computeSatellitesPositions(common_obs_k, sd_params.use_old_nav ? nav_r : nav_k, opt.sateph, common_sats_pos_k); // FILTER SATELLITES (ALREADY DISCARDED, CORRUPTED DATA, WRONG POSITION, CONSTELLATION, ELEVATION and SNR) - filterCommonSatellites( - common_obs_r, common_sats_pos_r, common_obs_k, common_sats_pos_k, discarded_sats, x_r, sd_params, opt); + filterCommonObservations( + common_obs_r, common_sats_pos_r, common_obs_k, common_sats_pos_k, discarded_sats, x_r, !sd_params.use_carrier_phase, sd_params.use_carrier_phase, opt); // COMPUTE SINGLE DIFFERENCES return Tdcp(common_obs_r, @@ -463,14 +463,15 @@ bool Tdcp(const Observations& common_obs_r, return true; } -void filterCommonSatellites(Observations& common_obs_r, - std::map<int, Eigen::Vector3d>& common_sats_pos_r, - Observations& common_obs_k, - std::map<int, Eigen::Vector3d>& common_sats_pos_k, - std::set<int>& discarded_sats, - const Eigen::Vector3d& x_r, - const TdcpParams& sd_params, - const prcopt_t& opt) +void filterCommonObservations(Observations& common_obs_r, + std::map<int, Eigen::Vector3d>& common_sats_pos_r, + Observations& common_obs_k, + std::map<int, Eigen::Vector3d>& common_sats_pos_k, + std::set<int>& discarded_sats, + const Eigen::Vector3d& x_r, + const bool& check_code, + const bool& check_carrier_phase, + const prcopt_t& opt) { assert(&common_obs_r != &common_obs_k); assert(&common_sats_pos_r != &common_sats_pos_k); @@ -478,7 +479,9 @@ void filterCommonSatellites(Observations& common_obs_r, assert(common_obs_r.size() == common_sats_pos_r.size()); assert(common_obs_r.size() == common_sats_pos_k.size()); - // std::cout << "filterCommonSatellites: initial size: " << common_obs_k.size() << std::endl; + // TODO: 2 calls to filterObservations and take the common again + + std::cout << "filterSatellites: initial size: " << common_obs_k.size() << std::endl; std::set<int> remove_sats; @@ -497,17 +500,15 @@ void filterCommonSatellites(Observations& common_obs_r, } // wrong data (satellite is not included in the discarded list) - if (sd_params.use_carrier_phase and (std::abs(obs_r.L[0]) < 1e-12 or std::abs(obs_k.L[0]) < 1e-12)) + if (check_carrier_phase and (std::abs(obs_r.L[0]) < 1e-12 or std::abs(obs_k.L[0]) < 1e-12)) { - // std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_r.L[0] << " " << - // obs_k.L[0] << std::endl; + std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_r.L[0] << " " << obs_k.L[0] << std::endl; remove_sats.insert(sat_number); continue; } - if (!sd_params.use_carrier_phase and (std::abs(obs_r.P[0]) < 1e-12 or std::abs(obs_k.L[0]) < 1e-12)) + if (check_code and (std::abs(obs_r.P[0]) < 1e-12 or std::abs(obs_k.L[0]) < 1e-12)) { - // std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_r.P[0] << " " << - // obs_k.P[0] << std::endl; + std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_r.P[0] << " " << obs_k.P[0] << std::endl; remove_sats.insert(sat_number); continue; } @@ -516,8 +517,7 @@ void filterCommonSatellites(Observations& common_obs_r, if (common_sats_pos_r[sat_number].isApprox(Eigen::Vector3d::Zero(), 1e-3) or common_sats_pos_r[sat_number].isApprox(Eigen::Vector3d::Zero(), 1e-3)) { - // std::cout << "Discarding sat " << sat_number << ": bad satellite position: \n\t" << - // common_sats_pos_r[sat_number].transpose() << "\n\t" << common_sats_pos_k[sat_number].transpose() << std::endl; + std::cout << "Discarding sat " << sat_number << ": wrong satellite position: \n\t" << common_sats_pos_r[sat_number].transpose() << "\n\t" << common_sats_pos_k[sat_number].transpose() << std::endl; remove_sats.insert(sat_number); continue; } @@ -526,8 +526,7 @@ void filterCommonSatellites(Observations& common_obs_r, int sys = satsys(obs_r.sat, NULL); if (!(sys & opt.navsys)) { - // std::cout << "Discarding sat " << sat_number << ": not selected constellation " << sys << " - mask: " << - // opt.navsys << std::endl; + std::cout << "Discarding sat " << sat_number << ": not selected constellation " << sys << " - mask: " << opt.navsys << std::endl; discarded_sats.insert(sat_number); remove_sats.insert(sat_number); continue; @@ -538,8 +537,7 @@ void filterCommonSatellites(Observations& common_obs_r, computeSatElevation(x_r, common_sats_pos_k[sat_number])); if (elevation < opt.elmin) { - // std::cout << "Discarding sat " << sat_number << ": low elevation " << elevation << " - min: " << opt.elmin << - // std::endl; + std::cout << "Discarding sat " << sat_number << ": low elevation " << elevation << " - min: " << opt.elmin << std::endl; discarded_sats.insert(sat_number); remove_sats.insert(sat_number); continue; @@ -548,7 +546,7 @@ void filterCommonSatellites(Observations& common_obs_r, // snr TODO: multifrequency (2nd param and 3rd idx) if (testsnr(0, 0, elevation, obs_r.SNR[0] * 0.25, &opt.snrmask) == 1) { - // std::cout << "Discarding sat " << sat_number << ": snr test " << std::endl; + std::cout << "Discarding sat " << sat_number << ": snr test " << std::endl; discarded_sats.insert(sat_number); remove_sats.insert(sat_number); continue; @@ -573,6 +571,7 @@ void filterCommonSatellites(Observations& common_obs_r, assert(common_obs_r.size() == common_sats_pos_r.size()); assert(common_obs_r.size() == common_sats_pos_k.size()); + return remove_sats; // std::cout << "final size: " << common_obs_k.size() << std::endl; } diff --git a/src/utils/sat_position.cpp b/src/utils/satellite.cpp similarity index 68% rename from src/utils/sat_position.cpp rename to src/utils/satellite.cpp index 750441eb04f8e94d998664dda1c121985248a678..0a9193044f11fcebea129e16cf21cae6a07032cf 100644 --- a/src/utils/sat_position.cpp +++ b/src/utils/satellite.cpp @@ -5,7 +5,7 @@ * Author: Joan Vallvé, Pep MartÃ-Saumell */ -#include "gnss_utils/utils/sat_position.h" +#include "gnss_utils/utils/satellite.h" using namespace GnssUtils; @@ -33,31 +33,31 @@ double computeSatElevation(const Eigen::Vector3d& receiver_ecef, const Eigen::Ve void computeSatellitesPositions(const Observations& obs, const Navigation& nav, - const prcopt_t& opt, + const int& eph_opt, std::map<int, Eigen::Vector3d>& sats_pos) { double rs[6 * obs.size()], dts[2 * obs.size()], var[obs.size()]; int svh[obs.size()]; - // std::cout << "computing sats position from sats: "; - // for (auto&& obs_ref : obs.getObservations()) - // std::cout << (int)obs_ref.sat << " "; - // std::cout << std::endl; +// std::cout << "computing position of sats: "; +// for (auto&& obs_ref : obs.getObservations()) +// std::cout << (int)obs_ref.sat << " "; +// std::cout << std::endl; // compute positions satposs( - obs.getObservations().front().time, obs.data(), obs.size(), &nav.getNavigation(), opt.sateph, rs, dts, var, svh); + obs.getObservations().front().time, obs.data(), obs.size(), &nav.getNavigation(), eph_opt, rs, dts, var, svh); // store positions // std::cout << "filling sats positions: \n"; for (int i = 0; i < obs.size(); i++) { - if (svh[i] < 0) // ephemeris unavailable - sats_pos[obs.getObservationByIdx(i).sat] = Eigen::Vector3d::Zero(); - else sats_pos[obs.getObservationByIdx(i).sat] << rs[6 * i], rs[6 * i + 1], rs[6 * i + 2]; - // std::cout << "\tsat: " << (int)obs.getObservationByIdx(i).sat << ": " << - // sats_pos[obs.getObservationByIdx(i).sat].transpose() << std::endl; + // std::cout << "\tsat: " << (int)obs.getObservationByIdx(i).sat << ": " << + // sats_pos[obs.getObservationByIdx(i).sat].transpose() << std::endl; + // if (sats_pos[obs.getObservationByIdx(i).sat] == Eigen::Vector3d::Zero()) + // std::cout << "ephemeris not available for sat " << int(obs.getObservationByIdx(i).sat) << std::endl; } } -} // namespace GnssUtils \ No newline at end of file + +} // namespace GnssUtils diff --git a/test/gtest_transformations.cpp b/test/gtest_transformations.cpp index 22f7831647c1b7ebd043de0e737459556f60a284..f142ba3e57e01109957d2506be7a133fa706bf06 100644 --- a/test/gtest_transformations.cpp +++ b/test/gtest_transformations.cpp @@ -1,5 +1,5 @@ #include "gtest/utils_gtest.h" -#include "gnss_utils/utils/sat_position.h" +#include "gnss_utils/utils/satellite.h" // Geodetic system parameters static double kSemimajorAxis = 6378137;