From e767417c649c3fe781eca3b122cd7738cf9ee62e Mon Sep 17 00:00:00 2001 From: pedromiguelcp Date: Thu, 3 Jul 2025 19:05:55 +0100 Subject: [PATCH] refactor: consolidate per-satellite observations into a new sat_obs_t struct --- .../MultiCons/gnss-sdr_GPS_Galileo_VTL.conf | 4 +- src/algorithms/PVT/libs/rtklib_solver.cc | 41 +++---- src/algorithms/libs/rtklib/rtklib.h | 11 ++ src/algorithms/libs/rtklib/rtklib_pntpos.cc | 103 ++++++++++-------- src/algorithms/libs/rtklib/rtklib_pntpos.h | 17 ++- src/algorithms/libs/rtklib/rtklib_rtkpos.cc | 11 +- src/algorithms/libs/rtklib/rtklib_rtkpos.h | 5 +- src/algorithms/libs/rtklib/rtklib_rtksvr.cc | 10 +- 8 files changed, 99 insertions(+), 103 deletions(-) diff --git a/conf/File_input/MultiCons/gnss-sdr_GPS_Galileo_VTL.conf b/conf/File_input/MultiCons/gnss-sdr_GPS_Galileo_VTL.conf index bb959ab66..51ed79ac7 100755 --- a/conf/File_input/MultiCons/gnss-sdr_GPS_Galileo_VTL.conf +++ b/conf/File_input/MultiCons/gnss-sdr_GPS_Galileo_VTL.conf @@ -238,8 +238,8 @@ PVT.kf_system_ecef_pos_sd_m=0.001 ; static scenario PVT.kf_system_ecef_pos_sd_m=0.001 ;# VECTOR TRACKING CONFIG PVT.enable_pvt_vtl=true ; enable/disable VTL -PVT.enable_pvt_output_vtl=false ; enable/disable receiver to use VTL solution -PVT.enable_pvt_closure_vtl=false ; enable/disable VTL feedback to tracking loops +PVT.enable_pvt_output_vtl=true ; enable/disable receiver to use VTL solution +PVT.enable_pvt_closure_vtl=true ; enable/disable VTL feedback to tracking loops PVT.vtl_kinematic=false ; enable/disable kinematic model PVT.vtl_init_pos_ecef_sd_m=10.0 PVT.vtl_init_vel_ecef_sd_ms=5.0 diff --git a/src/algorithms/PVT/libs/rtklib_solver.cc b/src/algorithms/PVT/libs/rtklib_solver.cc index 83ecc834f..5d4d3af02 100644 --- a/src/algorithms/PVT/libs/rtklib_solver.cc +++ b/src/algorithms/PVT/libs/rtklib_solver.cc @@ -1520,18 +1520,7 @@ bool Rtklib_Solver::get_PVT(const std::map &gnss_observables_ } } - int N_sv = valid_obs + glo_valid_obs; - std::vector obs_pr_vec; - std::vector tropo_m_vec; - std::vector iono_m_vec; - std::vector code_bias_m_vec; - std::vector rho_vec; - double *rs; - double *dts; - rs = mat(6, N_sv); - dts = mat(2, N_sv); - - result = rtkpos(&d_rtk, d_obs_data.data(), valid_obs + glo_valid_obs, &d_nav_data, obs_pr_vec, tropo_m_vec, iono_m_vec, code_bias_m_vec, rs, dts); + result = rtkpos(&d_rtk, d_obs_data.data(), valid_obs + glo_valid_obs, &d_nav_data); if (result == 0) { @@ -1647,36 +1636,32 @@ bool Rtklib_Solver::get_PVT(const std::map &gnss_observables_ int j = 0; for (int n = 0; n < d_rtk.sol.ns; n++) { - // one observation per satellite - exclude invalid observables - while (gnss_observables_iter->second.Pseudorange_m != obs_pr_vec[j]) + // one observation per satellite (IFLC) - exclude invalid observables + while (gnss_observables_iter->second.Pseudorange_m != d_rtk.ssat[d_obs_data.at(j).sat - 1].sat_obs[0].prange) { - if (obs_pr_vec[j] == 0) + ++gnss_observables_iter; + if (!d_rtk.ssat[d_obs_data.at(j).sat - 1].vs) { j++; } - else - { - ++gnss_observables_iter; - } } - const uint8_t idx6n = 6 * j; - const uint8_t idx2n = 2 * j; - // channel id ch_id = gnss_observables_iter->second.Channel_ID; vtl_data->rx_ch(ch_id) = ch_id; // satellite info vtl_data->sv_id(ch_id) = gnss_observables_iter->second.PRN; - vtl_data->sv_p.row(ch_id) = arma::Row({rs[0 + idx6n], rs[1 + idx6n], rs[2 + idx6n]}); - vtl_data->sv_v.row(ch_id) = arma::Row({rs[3 + idx6n], rs[4 + idx6n], rs[5 + idx6n]}); - vtl_data->sv_clk.row(ch_id) = arma::Row({dts[0 + idx2n] * SPEED_OF_LIGHT_M_S, dts[1 + idx2n] * SPEED_OF_LIGHT_M_S}); + double *svPosVel = d_rtk.ssat[d_obs_data.at(j).sat - 1].sat_obs[0].rs; + double *svClk = d_rtk.ssat[d_obs_data.at(j).sat - 1].sat_obs[0].dts; + vtl_data->sv_p.row(ch_id) = arma::Row({svPosVel[0], svPosVel[1], svPosVel[2]}); + vtl_data->sv_v.row(ch_id) = arma::Row({svPosVel[3], svPosVel[4], svPosVel[5]}); + vtl_data->sv_clk.row(ch_id) = arma::Row({svClk[0] * SPEED_OF_LIGHT_M_S, svClk[1] * SPEED_OF_LIGHT_M_S}); vtl_data->sv_elev(ch_id) = d_rtk.ssat[d_obs_data.at(j).sat - 1].azel[1]; // atmosferic and code bias - vtl_data->tropo_bias(ch_id) = tropo_m_vec[j]; - vtl_data->iono_bias(ch_id) = iono_m_vec[j]; - vtl_data->code_bias(ch_id) = code_bias_m_vec[j]; + vtl_data->tropo_bias(ch_id) = d_rtk.ssat[d_obs_data.at(j).sat - 1].sat_obs[0].dtrp; + vtl_data->iono_bias(ch_id) = d_rtk.ssat[d_obs_data.at(j).sat - 1].sat_obs[0].dion; + vtl_data->code_bias(ch_id) = d_rtk.ssat[d_obs_data.at(j).sat - 1].sat_obs[0].dcb; // tracking info vtl_data->CN0_dB_hz(ch_id) = gnss_observables_iter->second.CN0_dB_hz; diff --git a/src/algorithms/libs/rtklib/rtklib.h b/src/algorithms/libs/rtklib/rtklib.h index 4d33cad0b..1301070d7 100644 --- a/src/algorithms/libs/rtklib/rtklib.h +++ b/src/algorithms/libs/rtklib/rtklib.h @@ -1027,6 +1027,16 @@ typedef struct } solopt_t; +typedef struct { + double rs[6]; /* satellite position|velocity (ecef) (m|m/s) */ + double dts[2]; /* satellite clock bias/drift (s|s/s) */ + double prange; /* pseudorange (m) */ + double dtrp; /* tropospheric delay (m) */ + double dion; /* ionospheric delay (m) */ + double dcb; /* code bias delay (m) */ +} sat_obs_t; + + typedef struct { /* satellite status type */ unsigned char sys; /* navigation system */ @@ -1049,6 +1059,7 @@ typedef struct double phw; /* phase windup (cycle) */ gtime_t pt[2][NFREQ]; /* previous carrier-phase time */ double ph[2][NFREQ]; /* previous carrier-phase observable (cycle) */ + sat_obs_t sat_obs[NFREQ]; /* satellite observations */ } ssat_t; diff --git a/src/algorithms/libs/rtklib/rtklib_pntpos.cc b/src/algorithms/libs/rtklib/rtklib_pntpos.cc index c21fe7974..260c9873c 100644 --- a/src/algorithms/libs/rtklib/rtklib_pntpos.cc +++ b/src/algorithms/libs/rtklib/rtklib_pntpos.cc @@ -409,11 +409,10 @@ int rescode(int iter, const obsd_t *obs, int n, const double *rs, const double *dts, const double *vare, const int *svh, const nav_t *nav, const double *x, const prcopt_t *opt, double *v, double *H, double *var, double *azel, int *vsat, - double *resp, int *ns, double *obs_pr, double *tropo_m, double *iono_m, double *code_bias_m) + double *resp, int *ns, double *pr, double *dion, + double *dtrp, double *dcb) { double r; - double dion; - double dtrp; double vmeas; double vion; double vtrp; @@ -443,7 +442,7 @@ int rescode(int iter, const obsd_t *obs, int n, const double *rs, { vsat[i] = 0; azel[i * 2] = azel[1 + i * 2] = resp[i] = 0.0; - obs_pr[i] = 0; + pr[i] = 0; if (!(sys = satsys(obs[i].sat, nullptr))) { @@ -486,7 +485,7 @@ int rescode(int iter, const obsd_t *obs, int n, const double *rs, /* ionospheric corrections */ if (!ionocorr(obs[i].time, nav, obs[i].sat, pos, azel + i * 2, - iter > 0 ? opt->ionoopt : IONOOPT_BRDC, &dion, &vion)) + iter > 0 ? opt->ionoopt : IONOOPT_BRDC, dion + i, &vion)) { trace(4, "ionocorr error\n"); continue; @@ -495,19 +494,17 @@ int rescode(int iter, const obsd_t *obs, int n, const double *rs, /* GPS-L1 -> L1/B1 */ if ((lam_L1 = nav->lam[obs[i].sat - 1][0]) > 0.0) { - dion *= std::pow(lam_L1 / LAM_CARR[0], 2.0); + dion[i] *= std::pow(lam_L1 / LAM_CARR[0], 2.0); } /* tropospheric corrections */ if (!tropcorr(obs[i].time, nav, pos, azel + i * 2, - iter > 0 ? opt->tropopt : TROPOPT_SAAS, &dtrp, &vtrp)) + iter > 0 ? opt->tropopt : TROPOPT_SAAS, dtrp + i, &vtrp)) { trace(4, "tropocorr error\n"); continue; } /* pseudorange residual */ - v[nv] = P - (r + dtr - SPEED_OF_LIGHT_M_S * dts[i * 2] + dion + dtrp); - iono_m[i] = dion; - tropo_m[i] = dtrp; + v[nv] = P - (r + dtr - SPEED_OF_LIGHT_M_S * dts[i * 2] + dion[i] + dtrp[i]); int j; if (obs[i].code[0] != CODE_NONE) { @@ -521,8 +518,8 @@ int rescode(int iter, const obsd_t *obs, int n, const double *rs, { j = 2; } - code_bias_m[i] = obs[i].P[j] - P; - obs_pr[i] = obs[i].P[j]; + dcb[i] = obs[i].P[j] - P; + pr[i] = obs[i].P[j]; /* design matrix */ for (j = 0; j < NX; j++) @@ -702,8 +699,8 @@ arma::vec rough_bancroft(const arma::mat &B_pass) int estpos(const obsd_t *obs, int n, const double *rs, const double *dts, const double *vare, const int *svh, const nav_t *nav, const prcopt_t *opt, sol_t *sol, double *azel, int *vsat, - double *resp, char *msg, std::vector &obs_pr_vec, std::vector &tropo_m_vec, - std::vector &iono_m_vec, std::vector &code_bias_m_vec) + double *resp, char *msg, double *prange, double *dion, double *dtrp, + double *dcb) { double x[NX] = {0}; double dx[NX]; @@ -720,14 +717,6 @@ int estpos(const obsd_t *obs, int n, const double *rs, const double *dts, int nv; int ns; char msg_aux[128]; - double *obs_pr; - double *tropo_m; - double *iono_m; - double *code_bias_m; - obs_pr = mat(n + 4, 1); - tropo_m = mat(n + 4, 1); - iono_m = mat(n + 4, 1); - code_bias_m = mat(n + 4, 1); trace(3, "estpos : n=%d\n", n); @@ -771,7 +760,7 @@ int estpos(const obsd_t *obs, int n, const double *rs, const double *dts, for (i = 0; i < MAXITR; i++) { /* pseudorange residuals */ - nv = rescode(i, obs, n, rs, dts, vare, svh, nav, x, opt, v, H, var, azel, vsat, resp, &ns, obs_pr, tropo_m, iono_m, code_bias_m); + nv = rescode(i, obs, n, rs, dts, vare, svh, nav, x, opt, v, H, var, azel, vsat, resp, &ns, prange, dion, dtrp, dcb); if (nv < NX) { @@ -826,13 +815,6 @@ int estpos(const obsd_t *obs, int n, const double *rs, const double *dts, { sol->stat = opt->sateph == EPHOPT_SBAS ? SOLQ_SBAS : SOLQ_SINGLE; } - for (k = 0; k < n; k++) - { - obs_pr_vec.push_back(obs_pr[k]); - tropo_m_vec.push_back(tropo_m[k]); - iono_m_vec.push_back(iono_m[k]); - code_bias_m_vec.push_back(code_bias_m[k]); - } free(v); free(H); free(var); @@ -858,7 +840,9 @@ int estpos(const obsd_t *obs, int n, const double *rs, const double *dts, int raim_fde(const obsd_t *obs, int n, const double *rs, const double *dts, const double *vare, const int *svh, const nav_t *nav, const prcopt_t *opt, sol_t *sol, - double *azel, int *vsat, double *resp, char *msg) + double *azel, int *vsat, double *resp, char *msg, + double *prange, double *dion, double *dtrp, + double *dcb) { obsd_t *obs_e; sol_t sol_e = {{0, 0}, {}, {}, {}, '0', '0', '0', 0.0, 0.0, 0.0}; @@ -869,6 +853,10 @@ int raim_fde(const obsd_t *obs, int n, const double *rs, double *vare_e; double *azel_e; double *resp_e; + double *prange_e; + double *dion_e; + double *dtrp_e; + double *dcb_e; double rms_e; double rms = 100.0; int i; @@ -893,6 +881,10 @@ int raim_fde(const obsd_t *obs, int n, const double *rs, svh_e = imat(1, n); vsat_e = imat(1, n); resp_e = mat(1, n); + prange_e = mat(1, n); + dion_e = mat(1, n); + dtrp_e = mat(1, n); + dcb_e = mat(1, n); for (i = 0; i < n; i++) { @@ -915,7 +907,7 @@ int raim_fde(const obsd_t *obs, int n, const double *rs, std::vector iono_m_vec; std::vector code_bias_m_vec; if (!estpos(obs_e, n - 1, rs_e, dts_e, vare_e, svh_e, nav, opt, &sol_e, azel_e, - vsat_e, resp_e, msg_e, obs_pr_vec, tropo_m_vec, iono_m_vec, code_bias_m_vec)) + vsat_e, resp_e, msg_e, prange_e, dion_e, dtrp_e, dcb_e)) { trace(3, "raim_fde: exsat=%2d (%s)\n", obs[i].sat, msg); continue; @@ -953,7 +945,11 @@ int raim_fde(const obsd_t *obs, int n, const double *rs, } matcpy(azel + 2 * j, azel_e + 2 * k, 2, 1); vsat[j] = vsat_e[k]; - resp[j] = resp_e[k++]; + resp[j] = resp_e[k]; + prange[j] = prange_e[k]; + dion[j] = dion_e[k]; + dtrp[j] = dtrp_e[k]; + dcb[j] = dcb_e[k++]; } stat = 1; *sol = sol_e; @@ -1125,15 +1121,18 @@ void estvel(const obsd_t *obs, int n, const double *rs, const double *dts, *-----------------------------------------------------------------------------*/ int pntpos(const obsd_t *obs, int n, const nav_t *nav, const prcopt_t *opt, sol_t *sol, double *azel, ssat_t *ssat, - char *msg, std::vector &obs_pr_vec, std::vector &tropo_m_vec, - std::vector &iono_m_vec, std::vector &code_bias_m_vec, double *rs, double *dts) + char *msg) { prcopt_t opt_ = *opt; - // double *rs; - // double *dts; + double *rs; + double *dts; double *var; double *azel_; double *resp; + double *prange; + double *dion; + double *dtrp; + double *dcb; int i; int stat; std::vector vsat(MAXOBS, 0); @@ -1152,11 +1151,15 @@ int pntpos(const obsd_t *obs, int n, const nav_t *nav, sol->time = obs[0].time; msg[0] = '\0'; - // rs = mat(6, n); - // dts = mat(2, n); + rs = mat(6, n); + dts = mat(2, n); var = mat(1, n); azel_ = zeros(2, n); resp = mat(1, n); + prange = mat(1, n); + dion = mat(1, n); + dtrp = mat(1, n); + dcb = mat(1, n); if (opt_.mode != PMODE_SINGLE) { /* for precise positioning */ @@ -1170,13 +1173,14 @@ int pntpos(const obsd_t *obs, int n, const nav_t *nav, satposs(sol->time, obs, n, nav, opt_.sateph, rs, dts, var, svh.data()); /* estimate receiver position with pseudorange */ - stat = estpos(obs, n, rs, dts, var, svh.data(), nav, &opt_, sol, azel_, vsat.data(), resp, msg, obs_pr_vec, tropo_m_vec, - iono_m_vec, code_bias_m_vec); + stat = estpos(obs, n, rs, dts, var, svh.data(), nav, &opt_, sol, azel_, vsat.data(), resp, msg, prange, dion, + dtrp, dcb); /* raim fde */ if (!stat && n >= 6 && opt->posopt[4]) { - stat = raim_fde(obs, n, rs, dts, var, svh.data(), nav, &opt_, sol, azel_, vsat.data(), resp, msg); + stat = raim_fde(obs, n, rs, dts, var, svh.data(), nav, &opt_, sol, azel_, vsat.data(), resp, msg, + prange, dion, dtrp, dcb); } /* estimate receiver velocity with doppler */ if (stat) @@ -1205,18 +1209,29 @@ int pntpos(const obsd_t *obs, int n, const nav_t *nav, ssat[obs[i].sat - 1].azel[0] = azel_[i * 2]; ssat[obs[i].sat - 1].azel[1] = azel_[1 + i * 2]; ssat[obs[i].sat - 1].snr[0] = obs[i].SNR[0]; + std::memcpy(ssat[obs[i].sat - 1].sat_obs[0].rs, &rs[i * 6], 6 * sizeof(double)); + ssat[obs[i].sat - 1].sat_obs[0].prange = prange[i]; if (!vsat[i]) { continue; } ssat[obs[i].sat - 1].vs = 1; ssat[obs[i].sat - 1].resp[0] = resp[i]; + ssat[obs[i].sat - 1].sat_obs[0].dts[0] = dts[i * 2 + 0]; + ssat[obs[i].sat - 1].sat_obs[0].dts[1] = dts[i * 2 + 1]; + ssat[obs[i].sat - 1].sat_obs[0].dion = dion[i]; + ssat[obs[i].sat - 1].sat_obs[0].dtrp = dtrp[i]; + ssat[obs[i].sat - 1].sat_obs[0].dcb = dcb[i]; } } - // free(rs); - // free(dts); + free(rs); + free(dts); free(var); free(azel_); free(resp); + free(prange); + free(dion); + free(dtrp); + free(dcb); return stat; } diff --git a/src/algorithms/libs/rtklib/rtklib_pntpos.h b/src/algorithms/libs/rtklib/rtklib_pntpos.h index 592110bcb..e92005ea5 100644 --- a/src/algorithms/libs/rtklib/rtklib_pntpos.h +++ b/src/algorithms/libs/rtklib/rtklib_pntpos.h @@ -93,8 +93,8 @@ int rescode(int iter, const obsd_t *obs, int n, const double *rs, const double *dts, const double *vare, const int *svh, const nav_t *nav, const double *x, const prcopt_t *opt, double *v, double *H, double *var, double *azel, int *vsat, - double *resp, int *ns, double *obs_pr, double *tropo_m, double *iono_m, - double *code_bias_m); + double *resp, int *ns, double *pr, double *dion, + double *dtrp, double *dcb); /* validate solution ---------------------------------------------------------*/ int valsol(const double *azel, const int *vsat, int n, @@ -105,15 +105,16 @@ int valsol(const double *azel, const int *vsat, int n, int estpos(const obsd_t *obs, int n, const double *rs, const double *dts, const double *vare, const int *svh, const nav_t *nav, const prcopt_t *opt, sol_t *sol, double *azel, int *vsat, - double *resp, char *msg, std::vector &obs_pr_vec, - std::vector &tropo_m_vec, std::vector &iono_m_vec, - std::vector &code_bias_m_vec); + double *resp, char *msg, double *prange,double *dion, double *dtrp, + double *dcb); /* raim fde (failure detection and exclution) -------------------------------*/ int raim_fde(const obsd_t *obs, int n, const double *rs, const double *dts, const double *vare, const int *svh, const nav_t *nav, const prcopt_t *opt, sol_t *sol, - double *azel, int *vsat, double *resp, char *msg); + double *azel, int *vsat, double *resp, char *msg, + double *prange, double *dion, double *dtrp, + double *dcb); /* doppler residuals ---------------------------------------------------------*/ int resdop(const obsd_t *obs, int n, const double *rs, const double *dts, @@ -144,8 +145,6 @@ void estvel(const obsd_t *obs, int n, const double *rs, const double *dts, */ int pntpos(const obsd_t *obs, int n, const nav_t *nav, const prcopt_t *opt, sol_t *sol, double *azel, ssat_t *ssat, - char *msg, std::vector &obs_pr_vec, std::vector &tropo_m_vec, - std::vector &iono_m_vec, std::vector &code_bias_m_vec, - double *rs, double *dts); + char *msg); #endif // GNSS_SDR_RTKLIB_PNTPOS_H diff --git a/src/algorithms/libs/rtklib/rtklib_rtkpos.cc b/src/algorithms/libs/rtklib/rtklib_rtkpos.cc index 8baf10ba4..77c062e18 100644 --- a/src/algorithms/libs/rtklib/rtklib_rtkpos.cc +++ b/src/algorithms/libs/rtklib/rtklib_rtkpos.cc @@ -2652,7 +2652,7 @@ void rtkinit(rtk_t *rtk, const prcopt_t *opt) { sol_t sol0 = {{0, 0}, {}, {}, {}, '0', '0', '0', 0.0, 0.0, 0.0}; ambc_t ambc0 = {{{0, 0}, {0, 0}, {0, 0}, {0, 0}}, {}, {}, {}, 0, {}}; - ssat_t ssat0 = {0, 0, {0.0}, {0.0}, {0.0}, {'0'}, {'0'}, {'0'}, {'0'}, {'0'}, {}, {}, {}, {}, 0.0, 0.0, 0.0, 0.0, {{{0, 0}}, {{0, 0}}}, {{}, {}}}; + ssat_t ssat0 = {0, 0, {0.0}, {0.0}, {0.0}, {'0'}, {'0'}, {'0'}, {'0'}, {'0'}, {}, {}, {}, {}, 0.0, 0.0, 0.0, 0.0, {{{0, 0}}, {{0, 0}}}, {{}, {}}, {}}; int i; trace(3, "rtkinit :\n"); @@ -2762,8 +2762,7 @@ void rtkfree(rtk_t *rtk) * notes : before calling function, base station position rtk->sol.rb[] should * be properly set for relative mode except for moving-baseline *-----------------------------------------------------------------------------*/ -int rtkpos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav, std::vector &obs_pr_vec, std::vector &tropo_m_vec, - std::vector &iono_m_vec, std::vector &code_bias_m_vec, double *rs, double *dts) +int rtkpos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav) { prcopt_t *opt = &rtk->opt; sol_t solb = {{0, 0}, {}, {}, {}, '0', '0', '0', 0.0, 0.0, 0.0}; @@ -2798,8 +2797,7 @@ int rtkpos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav, std::vectorsol.time; /* previous epoch */ /* rover position by single point positioning */ - if (!pntpos(obs, nu, nav, &rtk->opt, &rtk->sol, nullptr, rtk->ssat, msg, obs_pr_vec, tropo_m_vec, - iono_m_vec, code_bias_m_vec, rs, dts)) + if (!pntpos(obs, nu, nav, &rtk->opt, &rtk->sol, nullptr, rtk->ssat, msg)) { errmsg(rtk, "point pos error (%s)\n", msg); if (!rtk->opt.dynamics) @@ -2841,8 +2839,7 @@ int rtkpos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav, std::vectormode == PMODE_MOVEB) { /* moving baseline */ /* estimate position/velocity of base station */ - if (!pntpos(obs + nu, nr, nav, &rtk->opt, &solb, nullptr, nullptr, msg, obs_pr_vec, tropo_m_vec, - iono_m_vec, code_bias_m_vec, rs, dts)) + if (!pntpos(obs + nu, nr, nav, &rtk->opt, &solb, nullptr, nullptr, msg)) { errmsg(rtk, "base station position error (%s)\n", msg); return 0; diff --git a/src/algorithms/libs/rtklib/rtklib_rtkpos.h b/src/algorithms/libs/rtklib/rtklib_rtkpos.h index 6e85ef7e4..8e669396f 100644 --- a/src/algorithms/libs/rtklib/rtklib_rtkpos.h +++ b/src/algorithms/libs/rtklib/rtklib_rtkpos.h @@ -175,10 +175,7 @@ void rtkinit(rtk_t *rtk, const prcopt_t *opt); void rtkfree(rtk_t *rtk); -int rtkpos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav, - std::vector &obs_pr_vec, std::vector &tropo_m_vec, - std::vector &iono_m_vec, std::vector &code_bias_m_vec, - double *rs, double *dts); +int rtkpos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav); /** \} */ diff --git a/src/algorithms/libs/rtklib/rtklib_rtksvr.cc b/src/algorithms/libs/rtklib/rtklib_rtksvr.cc index 4b172c9b2..7593eb0bc 100644 --- a/src/algorithms/libs/rtklib/rtklib_rtksvr.cc +++ b/src/algorithms/libs/rtklib/rtklib_rtksvr.cc @@ -602,15 +602,7 @@ void *rtksvrthread(void *arg) } /* rtk positioning */ rtksvrlock(svr); - std::vector obs_pr_vec; - std::vector tropo_m_vec; - std::vector iono_m_vec; - std::vector code_bias_m_vec; - double *rs; - double *dts; - rs = mat(6, 2); - dts = mat(2, 2); - rtkpos(&svr->rtk, obs.data, obs.n, &svr->nav, obs_pr_vec, tropo_m_vec, iono_m_vec, code_bias_m_vec, rs, dts); + rtkpos(&svr->rtk, obs.data, obs.n, &svr->nav); rtksvrunlock(svr); if (svr->rtk.sol.stat != SOLQ_NONE)