diff --git a/deps/RTKLIB b/deps/RTKLIB index f37a58057ce5ca45d46c492dacd8105f6f9e4d70..0260d91932df0ca0691842aa99b39acde5d49c45 160000 --- a/deps/RTKLIB +++ b/deps/RTKLIB @@ -1 +1 @@ -Subproject commit f37a58057ce5ca45d46c492dacd8105f6f9e4d70 +Subproject commit 0260d91932df0ca0691842aa99b39acde5d49c45 diff --git a/include/gnss_utils/gnss_utils.h b/include/gnss_utils/gnss_utils.h index 16dbcce589aa878705c44e452309beeefb96539e..ddfe20259ed47c88633a859f351b510ed1dcb9e2 100644 --- a/include/gnss_utils/gnss_utils.h +++ b/include/gnss_utils/gnss_utils.h @@ -113,15 +113,15 @@ struct TdcpOptions struct Options { - int sateph; // satellite ephemeris option: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris - int ionoopt; // ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode - int tropopt; // troposphere option: TROPOPT_OFF(0):correction off, TROPOPT_SAAS(1):Saastamoinen model, TROPOPT_SBAS(2):SBAS model, TROPOPT_EST(3):troposphere option: ZTD estimation, TROPOPT_ESTG(4):ZTD+grad estimation, TROPOPT_ZTD(5):ZTD correction,6:ZTD+grad correction - int sbascorr; // SBAS correction options (can be added): SBSOPT_LCORR(1): long term correction, SBSOPT_FCORR(2): fast correction, SBSOPT_ICORR(4): ionosphere correction, SBSOPT_RANGE(8): ranging - int raim; // RAIM removed sats - double elmin; // min elevation (degrees) - double maxgdop; // maxgdop: reject threshold of gdop + int sateph; // satellite ephemeris option: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris, EPHOPT_SBAS2(6):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), EPHOPT_SBAS3(7):broadcast + SBAS(2 if possible, otherwise 6), EPHOPT_SBAS4(8):broadcast + SBAS(2 if possible, otherwise 0) + int ionoopt; // ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode + int tropopt; // troposphere option: TROPOPT_OFF(0):correction off, TROPOPT_SAAS(1):Saastamoinen model, TROPOPT_SBAS(2):SBAS model, TROPOPT_EST(3):troposphere option: ZTD estimation, TROPOPT_ESTG(4):ZTD+grad estimation, TROPOPT_ZTD(5):ZTD correction,6:ZTD+grad correction + int sbascorr; // SBAS correction options (can be added): SBSOPT_LCORR(1): long term correction, SBSOPT_FCORR(2): fast correction, SBSOPT_ICORR(4): ionosphere correction, SBSOPT_RANGE(8): ranging + int raim; // RAIM removed sats + double elmin; // min elevation (degrees) + double maxgdop; // maxgdop: reject threshold of gdop bool GPS,SBS,GLO,GAL,QZS,CMP,IRN,LEO; // constellations used - TdcpOptions tdcp; // TDCP options + TdcpOptions tdcp; // TDCP options // compute navsys int int getNavSys() const @@ -152,10 +152,10 @@ struct Options const Options default_options = { - EPHOPT_BRDC, // satellite ephemeris option: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris - IONOOPT_BRDC, // ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode + EPHOPT_SBAS2, // satellite ephemeris option: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris, EPHOPT_SBAS2(6):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), EPHOPT_SBAS3(7):broadcast + SBAS(EPHOPT_SBAS if possible, otherwise EPHOPT_SBAS2), EPHOPT_SBAS4(8):broadcast + SBAS(EPHOPT_SBAS if possible, otherwise EPHOPT_BRDC) + IONOOPT_SBAS2, // ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode, IONOOPT_SBAS2(9):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), IONOOPT_SBAS3(10):broadcast + SBAS(IONOOPT_SBAS if possible, otherwise IONOOPT_SBAS2), IONOOPT_SBAS4(8):broadcast + SBAS(IONOOPT_SBAS if possible, otherwise IONOOPT_BRDC) TROPOPT_SAAS, // troposphere option: TROPOPT_OFF(0):correction off, TROPOPT_SAAS(1):Saastamoinen model, TROPOPT_SBAS(2):SBAS model, TROPOPT_EST(3):troposphere option: ZTD estimation, TROPOPT_ESTG(4):ZTD+grad estimation, TROPOPT_ZTD(5):ZTD correction,6:ZTD+grad correction - 0, // SBAS correction options (can be added): SBSOPT_LCORR(1): long term correction, SBSOPT_FCORR(2): fast correction, SBSOPT_ICORR(4): ionosphere correction, SBSOPT_RANGE(8): ranging + 15, // SBAS correction options (can be added): SBSOPT_LCORR(1): long term correction, SBSOPT_FCORR(2): fast correction, SBSOPT_ICORR(4): ionosphere correction, SBSOPT_RANGE(8): ranging 1, // RAIM enabled D2R*15.0, // min elevation (degrees) 30.0, // maxgdop: reject threshold of gdop diff --git a/include/gnss_utils/utils/satellite.h b/include/gnss_utils/utils/satellite.h index 0b15acdb2f68ef1fa6e316888d31e54a0d8c5a3c..4cfda619d786bef11a5640ea73a950a1408ac70b 100644 --- a/include/gnss_utils/utils/satellite.h +++ b/include/gnss_utils/utils/satellite.h @@ -35,7 +35,6 @@ namespace GnssUtils double clock_bias; double clock_drift; int svh; - int eph_mode; }; } // namespace GnssUtils diff --git a/src/utils/satellite.cpp b/src/utils/satellite.cpp index 8abc4af4d1c7df8a6a403fbd0e3ffe628697db37..15e0666dc850edc5ee7fbf3371a1f9d8edd59482 100644 --- a/src/utils/satellite.cpp +++ b/src/utils/satellite.cpp @@ -39,9 +39,7 @@ Satellites computeSatellites(const Observations& obs, const int& eph_opt) { double rs[6 * obs.size()], dts[2 * obs.size()], var[obs.size()]; - double rs_brdc[6 * obs.size()], dts_brdc[2 * obs.size()], var_brdc[obs.size()]; int svh[obs.size()]; - int svh_brdc[obs.size()]; // std::cout << "computing position of sats: "; // for (auto&& obs_ref : obs.getObservations()) @@ -49,68 +47,30 @@ Satellites computeSatellites(const Observations& obs, // std::cout << std::endl; // compute positions - // first compute all broadcasted ephemeris satposs(obs.getObservations().front().time, obs.data(), obs.size(), &nav.getNavigation(), - 0, - rs_brdc, - dts_brdc, - var_brdc, - svh_brdc); - /* DEBUG - std::cout << "Sats positions with broadcasted ephemeris: \n"; - for (int i = 0; i < obs.size(); i++) - { - if (rs_brdc[6*i] == 0 and rs_brdc[6*i+1] == 0 and rs_brdc[6*i+2] == 0) - std::cout << "\tsat: " << (int)obs.getObservationByIdx(i).sat << " ephemeris not available" << std::endl; - else - { - std::cout << "\tsat: " << (int)obs.getObservationByIdx(i).sat << std::endl - << "\t\tpos: " << rs_brdc[6*i] << " " << rs_brdc[6*i+1] << " " << rs_brdc[6*i+2] << std::endl - << "\t\tvel: " << rs_brdc[6*i+3] << " " << rs_brdc[6*i+4] << " " << rs_brdc[6*i+5] << std::endl - << "\t\tvar: " << var_brdc[i] << std::endl - << "\t\tclock bias: " << dts_brdc[2*i] << std::endl - << "\t\tclock drift: " << dts_brdc[2*i+1] << std::endl - << "\t\tsvh: " << svh_brdc[i] << std::endl; - } - } - //*/ - - // compute SBAS ephemeris - if (eph_opt != 0) - satposs(obs.getObservations().front().time, - obs.data(), - obs.size(), - &nav.getNavigation(), - eph_opt, - rs, - dts, - var, - svh); + eph_opt, + rs, + dts, + var, + svh); // fill Satellites Satellites sats; //std::cout << "computeSatellites: filling satellites: \n"; for (int i = 0; i < obs.size(); i++) { - bool brdc_eph = eph_opt == 0 or (rs[6*i] == 0 and rs[6*i+1] == 0 and rs[6*i+2] == 0); - auto sat_pair = sats.emplace(obs.getObservationByIdx(i).sat, // Key Satellite({satsys(obs.getObservationByIdx(i).sat,NULL), obs.getObservationByIdx(i).sat, // Constructor... - brdc_eph ? - (Eigen::Vector3d() << rs_brdc[6*i],rs_brdc[6*i+1],rs_brdc[6*i+2]).finished() : (Eigen::Vector3d() << rs[6*i],rs[6*i+1],rs[6*i+2]).finished(), - brdc_eph ? - (Eigen::Vector3d() << rs_brdc[6*i+3], rs_brdc[6*i+4], rs_brdc[6*i+5]).finished() : (Eigen::Vector3d() << rs[6*i+3], rs[6*i+4], rs[6*i+5]).finished() , - brdc_eph ? var_brdc[i] : var[i], - brdc_eph ? dts_brdc[2*i] : dts[2*i], - brdc_eph ? dts_brdc[2*i+1] : dts[2*i+1], - brdc_eph ? svh_brdc[i] : svh[i], - brdc_eph ? 0 : 2})); + var[i], + dts[2*i], + dts[2*i+1], + svh[i]})); assert(sat_pair.second && "satellite already computed");