[hamradio-commits] [gnss-sdr] 227/303: Bug fix in LS PVT solver in troposphere corrections causing erratic position fixes in high altitude GNSS receiver operations (>15 km)

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Mon Feb 13 22:36:03 UTC 2017


This is an automated email from the git hooks/post-receive script.

carles_fernandez-guest pushed a commit to branch master
in repository gnss-sdr.

commit 235aa7735795d8ae32e0d70f820e1cb81097f161
Author: Javier Arribas <javiarribas at gmail.com>
Date:   Wed Jan 11 17:31:22 2017 +0100

    Bug fix in LS PVT solver in troposphere corrections causing erratic position fixes in high altitude GNSS receiver operations (>15 km)
---
 src/algorithms/PVT/libs/galileo_e1_ls_pvt.cc |  6 ------
 src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.cc  |  9 +--------
 src/algorithms/PVT/libs/hybrid_ls_pvt.cc     | 11 +----------
 src/algorithms/PVT/libs/ls_pvt.cc            | 13 ++++++++++---
 4 files changed, 12 insertions(+), 27 deletions(-)

diff --git a/src/algorithms/PVT/libs/galileo_e1_ls_pvt.cc b/src/algorithms/PVT/libs/galileo_e1_ls_pvt.cc
index 5a7bb82..7517cae 100644
--- a/src/algorithms/PVT/libs/galileo_e1_ls_pvt.cc
+++ b/src/algorithms/PVT/libs/galileo_e1_ls_pvt.cc
@@ -178,12 +178,6 @@ bool galileo_e1_ls_pvt::get_PVT(std::map<int,Gnss_Synchro> gnss_pseudoranges_map
 
             cart2geo(static_cast<double>(mypos(0)), static_cast<double>(mypos(1)), static_cast<double>(mypos(2)), 4);
             d_rx_dt_m = mypos(3)/GALILEO_C_m_s; // Convert RX time offset from meters to seconds
-            //ToDo: Find an Observables/PVT random bug with some satellite configurations that gives an erratic PVT solution (i.e. height>50 km)
-            if (d_height_m > 50000)
-                {
-                    b_valid_position = false;
-                    return false;
-                }
             DLOG(INFO) << "Galileo Position at " << boost::posix_time::to_simple_string(p_time)
                       << " is Lat = " << d_latitude_d << " [deg], Long = " << d_longitude_d
                       << " [deg], Height= " << d_height_m << " [m]" << " RX time offset= " << d_rx_dt_m << " [s]";
diff --git a/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.cc b/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.cc
index 89f73c9..d888948 100644
--- a/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.cc
+++ b/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.cc
@@ -174,13 +174,6 @@ bool gps_l1_ca_ls_pvt::get_PVT(std::map<int,Gnss_Synchro> gnss_pseudoranges_map,
 
             d_rx_dt_m = mypos(3)/GPS_C_m_s; // Convert RX time offset from meters to seconds
 
-            //ToDo: Find an Observables/PVT random bug with some satellite configurations that gives an erratic PVT solution (i.e. height>50 km)
-            if (d_height_m > 50000)
-                {
-		    DLOG(INFO)<<"LS: bad height\n";
-                    b_valid_position = false;
-                    return false;
-                }
             // Compute UTC time and print PVT solution
             double secondsperweek = 604800.0; // number of seconds in one week (7*24*60*60)
             boost::posix_time::time_duration t = boost::posix_time::seconds(utc + secondsperweek * static_cast<double>(GPS_week));
@@ -188,7 +181,7 @@ bool gps_l1_ca_ls_pvt::get_PVT(std::map<int,Gnss_Synchro> gnss_pseudoranges_map,
             boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t);
             d_position_UTC_time = p_time;
 
-            LOG(INFO) << "(new)Position at " << boost::posix_time::to_simple_string(p_time)
+            DLOG(INFO) << "Position at " << boost::posix_time::to_simple_string(p_time)
             << " is Lat = " << d_latitude_d << " [deg], Long = " << d_longitude_d
             << " [deg], Height= " << d_height_m << " [m]" << " RX time offset= " << d_rx_dt_m << " [s]";
 
diff --git a/src/algorithms/PVT/libs/hybrid_ls_pvt.cc b/src/algorithms/PVT/libs/hybrid_ls_pvt.cc
index 12bb7c2..ea16dbf 100644
--- a/src/algorithms/PVT/libs/hybrid_ls_pvt.cc
+++ b/src/algorithms/PVT/libs/hybrid_ls_pvt.cc
@@ -297,17 +297,8 @@ bool hybrid_ls_pvt::get_PVT(std::map<int,Gnss_Synchro> gnss_observables_map, dou
             DLOG(INFO) << "HYBRID Position at TOW=" << hybrid_current_time << " in ECEF (X,Y,Z) = " << mypos;
 
             cart2geo(static_cast<double>(mypos(0)), static_cast<double>(mypos(1)), static_cast<double>(mypos(2)), 4);
-            //ToDo: Find an Observables/PVT random bug with some satellite configurations that gives an erratic PVT solution (i.e. height>50 km)
-            if (d_height_m > 50000)
-                {
-                    b_valid_position = false;
-                    LOG(INFO) << "Hybrid Position at " << boost::posix_time::to_simple_string(p_time)
-                    << " is Lat = " << d_latitude_d << " [deg], Long = " << d_longitude_d
-                    << " [deg], Height= " << d_height_m << " [m]" << " RX time offset= " << mypos(3) << " [s]";
-                    return false;
-                }
 
-            LOG(INFO) << "Hybrid Position at " << boost::posix_time::to_simple_string(p_time)
+            DLOG(INFO) << "Hybrid Position at " << boost::posix_time::to_simple_string(p_time)
             << " is Lat = " << d_latitude_d << " [deg], Long = " << d_longitude_d
             << " [deg], Height= " << d_height_m << " [m]" << " RX time offset= " << d_rx_dt_m << " [s]";
 
diff --git a/src/algorithms/PVT/libs/ls_pvt.cc b/src/algorithms/PVT/libs/ls_pvt.cc
index d2251e2..1c92d4d 100644
--- a/src/algorithms/PVT/libs/ls_pvt.cc
+++ b/src/algorithms/PVT/libs/ls_pvt.cc
@@ -116,10 +116,17 @@ arma::vec Ls_Pvt::leastSquarePos(const arma::mat & satpos, const arma::vec & obs
                                 {
                                     //--- Find receiver's height
                                     Ls_Pvt::togeod(&dphi, &dlambda, &h, 6378137.0, 298.257223563, pos(0), pos(1), pos(2));
+                                    // Add troposphere correction if the receiver is below the troposphere
+                                    if (h > 15000)
+                                        {
+                                            //receiver is above the troposphere
+                                            trop = 0.0;
+                                        }else{
+                                            //--- Find delay due to troposphere (in meters)
+                                            Ls_Pvt::tropo(&trop, sin(d_visible_satellites_El[i] * GPS_PI / 180.0), h / 1000.0, 1013.0, 293.0, 50.0, 0.0, 0.0, 0.0);
+                                            if(trop > 5.0 ) trop = 0.0; //check for erratic values
+                                        }
 
-                                    //--- Find delay due to troposphere (in meters)
-                                    Ls_Pvt::tropo(&trop, sin(d_visible_satellites_El[i] * GPS_PI / 180.0), h / 1000.0, 1013.0, 293.0, 50.0, 0.0, 0.0, 0.0);
-                                    if(trop > 50.0 ) trop = 0.0;
                                 }
                         }
                     //--- Apply the corrections ----------------------------------------

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git



More information about the pkg-hamradio-commits mailing list