mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-03-20 02:17:02 +00:00
Commit from GSoC Mara branzanti (27 August)
- Galileo Ephemeris collector thread git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@410 64b25241-fba3-4117-9849-534c7e92360d
This commit is contained in:
parent
545f50fa47
commit
5b7027206b
src
algorithms/telemetry_decoder/gnuradio_blocks
core
@ -292,6 +292,8 @@ int galileo_e1b_telemetry_decoder_cc::general_work (int noutput_items, gr_vector
|
||||
//decode_page.split_page(page_String, flag_even_word_arrived);
|
||||
flag_even_word_arrived=0;
|
||||
//std::cout << "page odd" << page_String << std::endl;
|
||||
DLOG(INFO) << "mara prova print page odd" << page_String;
|
||||
|
||||
//std::cout<<"Page type ="<< page_part_bits[1]<<std::endl;
|
||||
}
|
||||
else
|
||||
@ -300,6 +302,7 @@ int galileo_e1b_telemetry_decoder_cc::general_work (int noutput_items, gr_vector
|
||||
d_nav.split_page(page_String.c_str(), flag_even_word_arrived);
|
||||
flag_even_word_arrived=1;
|
||||
//std::cout << "page even" << std::endl << page_String << std::endl;
|
||||
DLOG(INFO) << "Page type =" << page_part_bits[1];
|
||||
//std::cout<<"Page type ="<< page_part_bits[1]<<std::endl;
|
||||
}
|
||||
|
||||
|
@ -38,6 +38,12 @@
|
||||
#include "gps_iono.h"
|
||||
#include "gps_utc_model.h"
|
||||
#include "gps_almanac.h"
|
||||
|
||||
#include "galileo_ephemeris.h"
|
||||
#include "galileo_iono.h"
|
||||
#include "galileo_utc_model.h"
|
||||
#include "galileo_almanac.h"
|
||||
|
||||
#include "concurrent_queue.h"
|
||||
#include "concurrent_map.h"
|
||||
#include <unistd.h>
|
||||
@ -63,6 +69,19 @@ extern concurrent_queue<Gps_Utc_Model> global_gps_utc_model_queue;
|
||||
extern concurrent_queue<Gps_Almanac> global_gps_almanac_queue;
|
||||
extern concurrent_queue<Gps_Acq_Assist> global_gps_acq_assist_queue;
|
||||
|
||||
extern concurrent_map<Galileo_Ephemeris> global_galileo_ephemeris_map;
|
||||
extern concurrent_map<Galileo_Iono> global_galileo_iono_map;
|
||||
extern concurrent_map<Galileo_Utc_Model> global_galileo_utc_model_map;
|
||||
extern concurrent_map<Galileo_Almanac> global_galileo_almanac_map;
|
||||
//extern concurrent_map<Galileo_Acq_Assist> global_gps_acq_assist_map;
|
||||
|
||||
extern concurrent_queue<Galileo_Ephemeris> global_galileo_ephemeris_queue;
|
||||
extern concurrent_queue<Galileo_Iono> global_galileo_iono_queue;
|
||||
extern concurrent_queue<Galileo_Utc_Model> global_galileo_utc_model_queue;
|
||||
extern concurrent_queue<Galileo_Almanac> global_galileo_almanac_queue;
|
||||
//extern concurrent_queue<Galileo_Acq_Assist> global_gps_acq_assist_queue;
|
||||
|
||||
|
||||
using google::LogMessage;
|
||||
|
||||
DEFINE_string(config_file, "../conf/gnss-sdr.conf",
|
||||
@ -141,6 +160,8 @@ void ControlThread::run()
|
||||
gps_utc_model_data_collector_thread_ =boost::thread(&ControlThread::gps_utc_model_data_collector, this);
|
||||
gps_acq_assist_data_collector_thread_=boost::thread(&ControlThread::gps_acq_assist_data_collector,this);
|
||||
|
||||
galileo_ephemeris_data_collector_thread_ =boost::thread(&ControlThread::galileo_ephemeris_data_collector, this);
|
||||
|
||||
// Main loop to read and process the control messages
|
||||
while (flowgraph_->running() && !stop_)
|
||||
{
|
||||
@ -150,10 +171,17 @@ void ControlThread::run()
|
||||
}
|
||||
std::cout<<"Stopping GNSS-SDR, please wait!"<<std::endl;
|
||||
flowgraph_->stop();
|
||||
|
||||
// Join GPS threads
|
||||
gps_ephemeris_data_collector_thread_.timed_join(boost::posix_time::seconds(1));
|
||||
gps_iono_data_collector_thread_.timed_join(boost::posix_time::seconds(1));
|
||||
gps_utc_model_data_collector_thread_.timed_join(boost::posix_time::seconds(1));
|
||||
gps_acq_assist_data_collector_thread_.timed_join(boost::posix_time::seconds(1));
|
||||
|
||||
//Join Galileo threads
|
||||
galileo_ephemeris_data_collector_thread_.timed_join(boost::posix_time::seconds(1));
|
||||
|
||||
//Join keyboard threads
|
||||
keyboard_thread_.timed_join(boost::posix_time::seconds(1));
|
||||
|
||||
LOG_AT_LEVEL(INFO) << "Flowgraph stopped";
|
||||
@ -451,6 +479,51 @@ void ControlThread::gps_ephemeris_data_collector()
|
||||
}
|
||||
}
|
||||
|
||||
void ControlThread::galileo_ephemeris_data_collector()
|
||||
{
|
||||
|
||||
// ############ 1.bis READ EPHEMERIS/UTC_MODE/IONO QUEUE ####################
|
||||
Galileo_Ephemeris galileo_eph;
|
||||
Galileo_Ephemeris galileo_eph_old;
|
||||
while(stop_==false)
|
||||
{
|
||||
global_galileo_ephemeris_queue.wait_and_pop(galileo_eph);
|
||||
|
||||
// DEBUG MESSAGE
|
||||
std::cout << "Ephemeris record has arrived from SAT ID "
|
||||
<< galileo_eph.SV_ID_PRN_4 << std::endl;
|
||||
// insert new ephemeris record to the global ephemeris map
|
||||
if (global_galileo_ephemeris_map.read(galileo_eph.SV_ID_PRN_4,galileo_eph_old))
|
||||
{
|
||||
// Check the EPHEMERIS timestamp. If it is newer, then update the ephemeris
|
||||
if (galileo_eph.WN_5 > galileo_eph_old.WN_5)
|
||||
{
|
||||
std::cout << "Ephemeris record updated -- GALILEO Week Number ="<<galileo_eph.WN_5<<std::endl;
|
||||
global_galileo_ephemeris_map.write(galileo_eph.SV_ID_PRN_4,galileo_eph);
|
||||
}else{
|
||||
if (galileo_eph.TOW_5 > galileo_eph_old.TOW_5)
|
||||
{
|
||||
std::cout << "Ephemeris record updated -- GALILEO TOW ="<<galileo_eph.TOW_5<<std::endl;
|
||||
global_galileo_ephemeris_map.write(galileo_eph.SV_ID_PRN_4,galileo_eph);
|
||||
|
||||
std::cout << "Ephemeris tow OLD: " << galileo_eph_old.TOW_5<<std::endl;
|
||||
std::cout << "Ephemeris satellite: " << galileo_eph.SV_ID_PRN_4<<std::endl;
|
||||
|
||||
}else{
|
||||
std::cout<<"Not updating the existing ephemeris"<<std::endl;
|
||||
}
|
||||
}
|
||||
//
|
||||
}else{
|
||||
// insert new ephemeris record
|
||||
std::cout << "New Ephemeris record inserted with TOW="<<galileo_eph.TOW_5<<" and GALILEO Week Number="<< galileo_eph.WN_5 << std::endl;
|
||||
global_galileo_ephemeris_map.write(galileo_eph.SV_ID_PRN_4, galileo_eph);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void ControlThread::gps_iono_data_collector()
|
||||
{
|
||||
|
||||
|
@ -159,6 +159,13 @@ private:
|
||||
*/
|
||||
void gps_acq_assist_data_collector();
|
||||
|
||||
/*
|
||||
* \brief Blocking function that reads the Galileo ephemeris queue and updates the shared ephemeris map, accessible from the PVT block
|
||||
*/
|
||||
void galileo_ephemeris_data_collector();
|
||||
|
||||
|
||||
|
||||
void apply_action(unsigned int what);
|
||||
GNSSFlowgraph *flowgraph_;
|
||||
ConfigurationInterface *configuration_;
|
||||
@ -174,6 +181,9 @@ private:
|
||||
boost::thread gps_iono_data_collector_thread_;
|
||||
boost::thread gps_utc_model_data_collector_thread_;
|
||||
boost::thread gps_acq_assist_data_collector_thread_;
|
||||
|
||||
boost::thread galileo_ephemeris_data_collector_thread_;
|
||||
|
||||
void keyboard_listener();
|
||||
};
|
||||
|
||||
|
@ -35,32 +35,33 @@
|
||||
|
||||
Galileo_Ephemeris::Galileo_Ephemeris()
|
||||
{
|
||||
double M0_1 = 0; // Mean anomaly at reference time [semi-circles]
|
||||
double delta_n_3 = 0; // Mean motion difference from computed value [semi-circles/sec]
|
||||
double e_1 = 0; // Eccentricity
|
||||
double A_1 = 0; // Square root of the semi-major axis [metres^1/2]
|
||||
double OMEGA_0_2 = 0; // Longitude of ascending node of orbital plane at weekly epoch [semi-circles]
|
||||
double i_0_2 = 0; // Inclination angle at reference time [semi-circles]
|
||||
double omega_2 = 0; // Argument of perigee [semi-circles]
|
||||
double OMEGA_dot_3 = 0; // Rate of right ascension [semi-circles/sec]
|
||||
double iDot_2 = 0; // Rate of inclination angle [semi-circles/sec]
|
||||
double C_uc_3 = 0; // Amplitude of the cosine harmonic correction term to the argument of latitude [radians]
|
||||
double C_us_3 = 0; // Amplitude of the sine harmonic correction term to the argument of latitude [radians]
|
||||
double C_rc_3 = 0; // Amplitude of the cosine harmonic correction term to the orbit radius [meters]
|
||||
double C_rs_3 = 0; // Amplitude of the sine harmonic correction term to the orbit radius [meters]
|
||||
double C_ic_4 = 0; // Amplitude of the cosine harmonic correction term to the angle of inclination [radians]
|
||||
double C_is_4 = 0; // Amplitude of the sine harmonic correction term to the angle of inclination [radians]
|
||||
double t0e_1 = 0; // Ephemeris reference time [s]
|
||||
SV_ID_PRN_4 = 0;
|
||||
M0_1 = 0; // Mean anomaly at reference time [semi-circles]
|
||||
delta_n_3 = 0; // Mean motion difference from computed value [semi-circles/sec]
|
||||
e_1 = 0; // Eccentricity
|
||||
A_1 = 0; // Square root of the semi-major axis [metres^1/2]
|
||||
OMEGA_0_2 = 0; // Longitude of ascending node of orbital plane at weekly epoch [semi-circles]
|
||||
i_0_2 = 0; // Inclination angle at reference time [semi-circles]
|
||||
omega_2 = 0; // Argument of perigee [semi-circles]
|
||||
OMEGA_dot_3 = 0; // Rate of right ascension [semi-circles/sec]
|
||||
iDot_2 = 0; // Rate of inclination angle [semi-circles/sec]
|
||||
C_uc_3 = 0; // Amplitude of the cosine harmonic correction term to the argument of latitude [radians]
|
||||
C_us_3 = 0; // Amplitude of the sine harmonic correction term to the argument of latitude [radians]
|
||||
C_rc_3 = 0; // Amplitude of the cosine harmonic correction term to the orbit radius [meters]
|
||||
C_rs_3 = 0; // Amplitude of the sine harmonic correction term to the orbit radius [meters]
|
||||
C_ic_4 = 0; // Amplitude of the cosine harmonic correction term to the angle of inclination [radians]
|
||||
C_is_4 = 0; // Amplitude of the sine harmonic correction term to the angle of inclination [radians]
|
||||
t0e_1 = 0; // Ephemeris reference time [s]
|
||||
|
||||
/*Clock correction parameters*/
|
||||
double t0c_4 = 0; //Clock correction data reference Time of Week [sec]
|
||||
double af0_4 = 0; //SV clock bias correction coefficient [s]
|
||||
double af1_4 = 0; //SV clock drift correction coefficient [s/s]
|
||||
double af2_4 = 0; //SV clock drift rate correction coefficient [s/s^2]
|
||||
/*Clock correction parameters*/
|
||||
t0c_4 = 0; //Clock correction data reference Time of Week [sec]
|
||||
af0_4 = 0; //SV clock bias correction coefficient [s]
|
||||
af1_4 = 0; //SV clock drift correction coefficient [s/s]
|
||||
af2_4 = 0; //SV clock drift rate correction coefficient [s/s^2]
|
||||
|
||||
/*GST*/
|
||||
double WN_5 = 0;
|
||||
double TOW_5 = 0;
|
||||
/*GST*/
|
||||
WN_5 = 0;
|
||||
TOW_5 = 0;
|
||||
|
||||
}
|
||||
|
||||
|
@ -52,6 +52,7 @@ public:
|
||||
/*Galileo ephemeris are 16 parameters and here are reported following the ICD order, paragraph 5.1.1.
|
||||
The number in the name after underscore (_1, _2, _3 and so on) refers to the page were we can find that parameter */
|
||||
|
||||
int SV_ID_PRN_4;
|
||||
double M0_1; // Mean anomaly at reference time [semi-circles]
|
||||
double delta_n_3; // Mean motion difference from computed value [semi-circles/sec]
|
||||
double e_1; // Eccentricity
|
||||
|
@ -553,6 +553,7 @@ Galileo_Ephemeris Galileo_Navigation_Message::get_ephemeris()
|
||||
{
|
||||
|
||||
Galileo_Ephemeris ephemeris;
|
||||
ephemeris.SV_ID_PRN_4 = SV_ID_PRN_4;
|
||||
ephemeris.M0_1 = M0_1; // Mean anomaly at reference time [semi-circles]
|
||||
ephemeris.delta_n_3 = delta_n_3; // Mean motion difference from computed value [semi-circles/sec]
|
||||
ephemeris.e_1 = e_1; // Eccentricity
|
||||
|
Loading…
x
Reference in New Issue
Block a user