diff --git a/docs/changelog b/docs/changelog index 74f263c33..7c8d1918e 100644 --- a/docs/changelog +++ b/docs/changelog @@ -4,7 +4,7 @@ Next release will have several improvements in different dimensions, addition of ### Improvements in Accuracy: -- Part of the RTKLIB core libraries has been integrated into GNSS-SDR. There is now a single PVT block implementation which makes use of RTKLIB to deliver PVT solutions, including Single and PPP navigation modes. +- Part of the RTKLIB core library has been integrated into GNSS-SDR. There is now a single PVT block implementation which makes use of RTKLIB to deliver PVT solutions, including Single and PPP navigation modes. - Fixed CN0 estimation for other correlation times than 1 ms. - Improved computation of tracking parameters and GNSS observables. - Other minor bug fixes. @@ -14,7 +14,7 @@ Next release will have several improvements in different dimensions, addition of - Internal Finite State Machines rewritten for improved continuity in delivering position fixes. This fixes a bug that was stalling the receiver after about six hours of continuous operation. - Redesign of the time counter for enhanced continuity. -- Improved acquisition and tracking sensibility. +- Improved acquisition and tracking sensitivity. - Other minor bug fixes. @@ -22,7 +22,7 @@ Next release will have several improvements in different dimensions, addition of - Added the possibility of non-blocking acquisition, which works well when using real-time data from an RF front-end. - Complex local codes have been replaced by real codes, alleviating the computational burden. -- New kernels: volk_gnsssdr_16i_xn_resampler_16i_xn.h, volk_gnsssdr_16ic_16i_rotator_dot_prod_16ic_xn.h, volk_gnsssdr_32f_xn_resampler_32f_xn.h, volk_gnsssdr_32fc_32f_rotator_dot_prod_32fc_xn.h +- New volk_gnsssdr kernels: volk_gnsssdr_16i_xn_resampler_16i_xn.h, volk_gnsssdr_16ic_16i_rotator_dot_prod_16ic_xn.h, volk_gnsssdr_32f_xn_resampler_32f_xn.h, volk_gnsssdr_32fc_32f_rotator_dot_prod_32fc_xn.h - Some AVX2 implementations added to the volk_gnsssdr library. - Improvement in C++ usage: Use of const container calls when result is immediately converted to a const iterator. Using these members removes an implicit conversion from iterator to const_iterator. - A number of code optimizations here and there. @@ -124,7 +124,7 @@ Next release will have several improvements in different dimensions, addition of - Updated and improved documentation of processing blocks at https://gnss-sdr.org/docs/sp-blocks/ - Improved documentation of required dependency packages in several GNU/Linux distributions. - Parameter names with the same role have been harmonized within different block implementations. -- Added a chnagelog, a code of conduct, a contributing guide and a pull-request template in the source tree. +- Added a changelog, a code of conduct, a contributing guide and a pull-request template in the source tree. - Added colors to the commandline user interface. - Updated manfiles. diff --git a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_cc.cc b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_cc.cc index 2863795ca..1fc243cb3 100644 --- a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_cc.cc +++ b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_cc.cc @@ -2091,9 +2091,9 @@ int rtklib_pvt_cc::work(int noutput_items, gr_vector_const_void_star& input_item std::cout << TEXT_BOLD_GREEN << "Position at " << d_ls_pvt->get_position_UTC_time() << " UTC using " << d_ls_pvt->get_num_valid_observations() - << std::setprecision(10) + << std::fixed << std::setprecision(9) << " observations is Lat = " << d_ls_pvt->get_latitude() << " [deg], Long = " << d_ls_pvt->get_longitude() - << std::setprecision(4) + << std::fixed << std::setprecision(3) << " [deg], Height = " << d_ls_pvt->get_height() << " [m]" << TEXT_RESET << std::endl; std::cout << std::setprecision(ss); LOG(INFO) << "RX clock offset: " << d_ls_pvt->get_time_offset_s() << "[s]"; diff --git a/src/algorithms/PVT/libs/rtklib_solver.cc b/src/algorithms/PVT/libs/rtklib_solver.cc index 1b77582f4..436ff9aaf 100644 --- a/src/algorithms/PVT/libs/rtklib_solver.cc +++ b/src/algorithms/PVT/libs/rtklib_solver.cc @@ -154,9 +154,38 @@ bool rtklib_solver::get_PVT(const std::map& gnss_observables_ eph_t eph_data[MAXOBS]; geph_t geph_data[MAXOBS]; + // Workaround for NAV/CNAV clash problem + bool gps_dual_band = false; + bool band1 = false; + bool band2 = false; for (gnss_observables_iter = gnss_observables_map.cbegin(); gnss_observables_iter != gnss_observables_map.cend(); - gnss_observables_iter++) // CHECK INCONSISTENCY when combining GLONASS + other system + ++gnss_observables_iter) + { + switch (gnss_observables_iter->second.System) + { + case 'G': + { + std::string sig_(gnss_observables_iter->second.Signal); + if (sig_.compare("1C") == 0) + { + band1 = true; + } + if (sig_.compare("2S") == 0) + { + band2 = true; + } + } + default: + { + } + } + } + if (band1 == true and band2 == true) gps_dual_band = true; + + for (gnss_observables_iter = gnss_observables_map.cbegin(); + gnss_observables_iter != gnss_observables_map.cend(); + ++gnss_observables_iter) // CHECK INCONSISTENCY when combining GLONASS + other system { switch (gnss_observables_iter->second.System) { @@ -255,8 +284,8 @@ bool rtklib_solver::get_PVT(const std::map& gnss_observables_ DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->first; } } - // GPS L2 (ephemeris disabled due to an incompatibility with RTKLIB solver) - if (sig_.compare("2S_disabled") == 0) + // GPS L2 (todo: solve NAV/CNAV clash) + if ((sig_.compare("2S") == 0) and (gps_dual_band == false)) { gps_cnav_ephemeris_iter = gps_cnav_ephemeris_map.find(gnss_observables_iter->second.PRN); if (gps_cnav_ephemeris_iter != gps_cnav_ephemeris_map.cend()) diff --git a/src/tests/system-tests/position_test.cc b/src/tests/system-tests/position_test.cc index c66e50246..857b2f489 100644 --- a/src/tests/system-tests/position_test.cc +++ b/src/tests/system-tests/position_test.cc @@ -277,7 +277,7 @@ int StaticPositionSystemTest::configure_receiver() const int extend_correlation_ms = 1; const int display_rate_ms = 500; - const int output_rate_ms = 10; + const int output_rate_ms = 100; config->set_property("GNSS-SDR.internal_fs_sps", std::to_string(sampling_rate_internal));