mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-14 20:20:35 +00:00
Add Galileo UTC and iono model parameters to the assistance system
This commit is contained in:
parent
5181c640a3
commit
aca2b28a4d
@ -474,6 +474,25 @@ bool gnss_sdr_supl_client::load_utc_xml(const std::string file_name)
|
||||
}
|
||||
|
||||
|
||||
bool gnss_sdr_supl_client::load_gal_utc_xml(const std::string file_name)
|
||||
{
|
||||
std::ifstream ifs;
|
||||
try
|
||||
{
|
||||
ifs.open(file_name.c_str(), std::ifstream::binary | std::ifstream::in);
|
||||
boost::archive::xml_iarchive xml(ifs);
|
||||
xml >> boost::serialization::make_nvp("GNSS-SDR_gal_utc_map", this->gal_utc);
|
||||
LOG(INFO) << "Loaded Galileo UTC model data";
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
LOG(WARNING) << e.what() << "File: " << file_name;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool gnss_sdr_supl_client::save_utc_map_xml(const std::string file_name, std::map<int, Gps_Utc_Model> utc_map)
|
||||
{
|
||||
if (utc_map.empty() == false)
|
||||
@ -520,6 +539,25 @@ bool gnss_sdr_supl_client::load_iono_xml(const std::string file_name)
|
||||
}
|
||||
|
||||
|
||||
bool gnss_sdr_supl_client::load_gal_iono_xml(const std::string file_name)
|
||||
{
|
||||
std::ifstream ifs;
|
||||
try
|
||||
{
|
||||
ifs.open(file_name.c_str(), std::ifstream::binary | std::ifstream::in);
|
||||
boost::archive::xml_iarchive xml(ifs);
|
||||
xml >> boost::serialization::make_nvp("GNSS-SDR_iono_gal_map", this->gal_iono);
|
||||
LOG(INFO) << "Loaded Galileo IONO model data";
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
LOG(WARNING) << e.what() << "File: " << file_name;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool gnss_sdr_supl_client::save_iono_map_xml(const std::string file_name, std::map<int, Gps_Iono> iono_map)
|
||||
{
|
||||
if (iono_map.empty() == false)
|
||||
|
@ -48,6 +48,8 @@ extern "C"
|
||||
#include "gps_ref_location.h"
|
||||
#include "gps_cnav_ephemeris.h"
|
||||
#include "galileo_ephemeris.h"
|
||||
#include "galileo_utc_model.h"
|
||||
#include "galileo_iono.h"
|
||||
#include <boost/archive/xml_oarchive.hpp>
|
||||
#include <boost/archive/xml_iarchive.hpp>
|
||||
#include <boost/serialization/map.hpp>
|
||||
@ -86,10 +88,12 @@ public:
|
||||
|
||||
// ionospheric model
|
||||
Gps_Iono gps_iono;
|
||||
Galileo_Iono gal_iono;
|
||||
// reference time
|
||||
Gps_Ref_Time gps_time;
|
||||
// UTC model
|
||||
Gps_Utc_Model gps_utc;
|
||||
Galileo_Utc_Model gal_utc;
|
||||
// reference location
|
||||
Gps_Ref_Location gps_ref_loc;
|
||||
// Acquisition Assistance map
|
||||
@ -132,10 +136,15 @@ public:
|
||||
std::map<int, Gps_Ephemeris> eph_map);
|
||||
|
||||
/*!
|
||||
* \brief Read utc model from XML file
|
||||
* \brief Read GPS utc model from XML file
|
||||
*/
|
||||
bool load_utc_xml(const std::string file_name);
|
||||
|
||||
/*!
|
||||
* \brief Read Galileo utc model from XML file
|
||||
*/
|
||||
bool load_gal_utc_xml(const std::string file_name);
|
||||
|
||||
/*!
|
||||
* \brief Save utc model map to XML file
|
||||
* To be called by ControlThread::gps_utc_model_data_write_to_XML()
|
||||
@ -148,6 +157,11 @@ public:
|
||||
*/
|
||||
bool load_iono_xml(const std::string file_name);
|
||||
|
||||
/*!
|
||||
* \brief Read Galileo iono from XML file
|
||||
*/
|
||||
bool load_gal_iono_xml(const std::string file_name);
|
||||
|
||||
/*!
|
||||
* \brief Save iono map to XML file
|
||||
*/
|
||||
|
@ -201,10 +201,12 @@ bool ControlThread::read_assistance_from_XML()
|
||||
std::string eph_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ephemeris_xml", eph_default_xml_filename);
|
||||
std::string utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_utc_model.xml", utc_default_xml_filename);
|
||||
std::string iono_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_iono_xml", iono_default_xml_filename);
|
||||
std::string gal_iono_xml_filename = configuration_->property("GNSS-SDR.SUPL_gal_iono_xml", gal_iono_default_xml_filename);
|
||||
std::string ref_time_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_time_xml", ref_time_default_xml_filename);
|
||||
std::string ref_location_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_location_xml", ref_location_default_xml_filename);
|
||||
std::string eph_gal_xml_filename = configuration_->property("GNSS-SDR.SUPL_gal_ephemeris_xml", eph_gal_default_xml_filename);
|
||||
std::string eph_cnav_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_cnav_ephemeris_xml", eph_cnav_default_xml_filename);
|
||||
std::string gal_utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_gal_utc_model.xml", gal_utc_default_xml_filename);
|
||||
|
||||
std::cout << "Trying to read GNSS ephemeris from XML file(s): "
|
||||
<< ((eph_xml_filename.compare(eph_default_xml_filename) != 0) ? eph_xml_filename + " " : "")
|
||||
@ -253,39 +255,49 @@ bool ControlThread::read_assistance_from_XML()
|
||||
}
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (supl_client_acquisition_.load_utc_xml(utc_xml_filename) == true)
|
||||
{
|
||||
std::shared_ptr<Gps_Utc_Model> tmp_obj = std::make_shared<Gps_Utc_Model>(supl_client_acquisition_.gps_utc);
|
||||
flowgraph_->send_telemetry_msg(pmt::make_any(tmp_obj));
|
||||
std::cout << "From XML file: Read GPS UTC parameters." << std::endl;
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (supl_client_acquisition_.load_iono_xml(iono_xml_filename) == true)
|
||||
{
|
||||
std::shared_ptr<Gps_Iono> tmp_obj = std::make_shared<Gps_Iono>(supl_client_acquisition_.gps_iono);
|
||||
flowgraph_->send_telemetry_msg(pmt::make_any(tmp_obj));
|
||||
std::cout << "From XML file: Read GPS iono parameters." << std::endl;
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (supl_client_acquisition_.load_gal_iono_xml(gal_iono_xml_filename) == true)
|
||||
{
|
||||
std::shared_ptr<Galileo_Iono> tmp_obj = std::make_shared<Galileo_Iono>(supl_client_acquisition_.gal_iono);
|
||||
flowgraph_->send_telemetry_msg(pmt::make_any(tmp_obj));
|
||||
std::cout << "From XML file: Read Galileo iono parameters." << std::endl;
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (supl_client_acquisition_.load_gal_utc_xml(gal_utc_xml_filename) == true)
|
||||
{
|
||||
std::shared_ptr<Galileo_Utc_Model> tmp_obj = std::make_shared<Galileo_Utc_Model>(supl_client_acquisition_.gal_utc);
|
||||
flowgraph_->send_telemetry_msg(pmt::make_any(tmp_obj));
|
||||
std::cout << "From XML file: Read Galileo iono parameters." << std::endl;
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (ret == false)
|
||||
{
|
||||
std::cout << "ERROR: SUPL client error reading XML" << std::endl;
|
||||
std::cout << "Disabling SUPL assistance..." << std::endl;
|
||||
}
|
||||
// Only look for {utc, iono, ref time, ref location} if SUPL is enabled
|
||||
|
||||
// Only look for {ref time, ref location} if SUPL is enabled
|
||||
bool enable_gps_supl_assistance = configuration_->property("GNSS-SDR.SUPL_gps_enabled", false);
|
||||
if (enable_gps_supl_assistance == true)
|
||||
{
|
||||
// Try to read UTC model from XML
|
||||
if (supl_client_acquisition_.load_utc_xml(utc_xml_filename) == true)
|
||||
{
|
||||
LOG(INFO) << "SUPL: Read XML UTC model";
|
||||
std::shared_ptr<Gps_Utc_Model> tmp_obj = std::make_shared<Gps_Utc_Model>(supl_client_acquisition_.gps_utc);
|
||||
flowgraph_->send_telemetry_msg(pmt::make_any(tmp_obj));
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(INFO) << "SUPL: couldn't read UTC model XML";
|
||||
}
|
||||
|
||||
// Try to read Iono model from XML
|
||||
if (supl_client_acquisition_.load_iono_xml(iono_xml_filename) == true)
|
||||
{
|
||||
LOG(INFO) << "SUPL: Read XML IONO model";
|
||||
std::shared_ptr<Gps_Iono> tmp_obj = std::make_shared<Gps_Iono>(supl_client_acquisition_.gps_iono);
|
||||
flowgraph_->send_telemetry_msg(pmt::make_any(tmp_obj));
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(INFO) << "SUPL: couldn't read IONO model XML";
|
||||
}
|
||||
|
||||
// Try to read Ref Time from XML
|
||||
if (supl_client_acquisition_.load_ref_time_xml(ref_time_xml_filename) == true)
|
||||
{
|
||||
|
@ -169,6 +169,8 @@ private:
|
||||
const std::string ref_location_default_xml_filename = "./gps_ref_location.xml";
|
||||
const std::string eph_gal_default_xml_filename = "./gal_ephemeris.xml";
|
||||
const std::string eph_cnav_default_xml_filename = "./gps_cnav_ephemeris.xml";
|
||||
const std::string gal_iono_default_xml_filename = "./gal_iono.xml";
|
||||
const std::string gal_utc_default_xml_filename = "./gal_utc_model.xml";
|
||||
};
|
||||
|
||||
#endif /*GNSS_SDR_CONTROL_THREAD_H_*/
|
||||
|
@ -34,6 +34,8 @@
|
||||
#include "galileo_ephemeris.h"
|
||||
#include "gps_utc_model.h"
|
||||
#include "gps_iono.h"
|
||||
#include "galileo_utc_model.h"
|
||||
#include "galileo_iono.h"
|
||||
#include <gflags/gflags.h>
|
||||
#include <gpstk/Rinex3NavHeader.hpp>
|
||||
#include <gpstk/Rinex3NavData.hpp>
|
||||
@ -73,6 +75,8 @@ int main(int argc, char** argv)
|
||||
|
||||
Gps_Utc_Model gps_utc_model;
|
||||
Gps_Iono gps_iono;
|
||||
Galileo_Utc_Model gal_utc_model;
|
||||
Galileo_Iono gal_iono;
|
||||
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
@ -118,6 +122,27 @@ int main(int argc, char** argv)
|
||||
gps_iono.d_beta2 = hdr.mapIonoCorr["GPSB"].param[2];
|
||||
gps_iono.d_beta3 = hdr.mapIonoCorr["GPSB"].param[3];
|
||||
}
|
||||
if (hdr.fileSys.compare("E: (GAL)") == 0 || hdr.fileSys.compare("MIXED") == 0)
|
||||
{
|
||||
gal_utc_model.A0_6 = hdr.mapTimeCorr["GAUT"].A0;
|
||||
gal_utc_model.A1_6 = hdr.mapTimeCorr["GAUT"].A1;
|
||||
gal_utc_model.Delta_tLS_6 = hdr.leapSeconds;
|
||||
gal_utc_model.t0t_6 = hdr.mapTimeCorr["GAUT"].refSOW;
|
||||
gal_utc_model.WNot_6 = hdr.mapTimeCorr["GAUT"].refWeek;
|
||||
gal_utc_model.WN_LSF_6 = hdr.leapWeek;
|
||||
gal_utc_model.DN_6 = hdr.leapDay;
|
||||
gal_utc_model.Delta_tLSF_6 = hdr.leapDelta;
|
||||
gal_iono.ai0_5 = hdr.mapIonoCorr["GAL"].param[0];
|
||||
gal_iono.ai1_5 = hdr.mapIonoCorr["GAL"].param[1];
|
||||
gal_iono.ai2_5 = hdr.mapIonoCorr["GAL"].param[2];
|
||||
gal_iono.Region1_flag_5 = false;
|
||||
gal_iono.Region2_flag_5 = false;
|
||||
gal_iono.Region3_flag_5 = false;
|
||||
gal_iono.Region4_flag_5 = false;
|
||||
gal_iono.Region5_flag_5 = false;
|
||||
gal_iono.TOW_5 = 0.0;
|
||||
gal_iono.WN_5 = 0.0;
|
||||
}
|
||||
|
||||
// Read navigation data
|
||||
while (rnffs >> rne)
|
||||
@ -292,6 +317,42 @@ int main(int argc, char** argv)
|
||||
std::cout << "Generated file: " << xml_filename << std::endl;
|
||||
}
|
||||
|
||||
if (gal_utc_model.A0_6 != 0)
|
||||
{
|
||||
std::ofstream ofs5;
|
||||
xml_filename = "gal_utc.xml";
|
||||
try
|
||||
{
|
||||
ofs5.open(xml_filename.c_str(), std::ofstream::trunc | std::ofstream::out);
|
||||
boost::archive::xml_oarchive xml(ofs5);
|
||||
xml << boost::serialization::make_nvp("GNSS-SDR_gal_utc", gal_utc_model);
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << std::endl;
|
||||
google::ShutDownCommandLineFlags();
|
||||
return 1;
|
||||
}
|
||||
std::cout << "Generated file: " << xml_filename << std::endl;
|
||||
}
|
||||
if (gal_iono.ai0_5 != 0)
|
||||
{
|
||||
std::ofstream ofs7;
|
||||
xml_filename = "gal_iono.xml";
|
||||
try
|
||||
{
|
||||
ofs7.open(xml_filename.c_str(), std::ofstream::trunc | std::ofstream::out);
|
||||
boost::archive::xml_oarchive xml(ofs7);
|
||||
xml << boost::serialization::make_nvp("GNSS-SDR_gal_iono", gal_iono);
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << std::endl;
|
||||
google::ShutDownCommandLineFlags();
|
||||
return 1;
|
||||
}
|
||||
std::cout << "Generated file: " << xml_filename << std::endl;
|
||||
}
|
||||
google::ShutDownCommandLineFlags();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user