mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-06-08 09:34:10 +00:00
Re-enable RTCM and RINEX writing, average parameters removed
This commit is contained in:
parent
44f748cb41
commit
0b6affe38b
@ -57,10 +57,6 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration,
|
|||||||
dump_ = configuration->property(role + ".dump", false);
|
dump_ = configuration->property(role + ".dump", false);
|
||||||
dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename);
|
dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename);
|
||||||
|
|
||||||
// moving average depth parameters
|
|
||||||
int averaging_depth = configuration->property(role + ".averaging_depth", 10);
|
|
||||||
bool flag_averaging = configuration->property(role + ".flag_averaging", false);
|
|
||||||
|
|
||||||
// output rate
|
// output rate
|
||||||
int output_rate_ms = configuration->property(role + ".output_rate_ms", 500);
|
int output_rate_ms = configuration->property(role + ".output_rate_ms", 500);
|
||||||
|
|
||||||
@ -307,7 +303,7 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration,
|
|||||||
rtklib_options = rtklib_configuration_options;
|
rtklib_options = rtklib_configuration_options;
|
||||||
|
|
||||||
// make PVT object
|
// make PVT object
|
||||||
pvt_ = rtklib_make_pvt_cc(in_streams_, dump_, dump_filename_, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname, flag_rtcm_server, flag_rtcm_tty_port, rtcm_tcp_port, rtcm_station_id, rtcm_msg_rate_ms, rtcm_dump_devname, type_of_receiver, rtklib_options);
|
pvt_ = rtklib_make_pvt_cc(in_streams_, dump_, dump_filename_, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname, flag_rtcm_server, flag_rtcm_tty_port, rtcm_tcp_port, rtcm_station_id, rtcm_msg_rate_ms, rtcm_dump_devname, type_of_receiver, rtklib_options);
|
||||||
DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
|
DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,8 +47,6 @@ rtklib_pvt_cc_sptr
|
|||||||
rtklib_make_pvt_cc(unsigned int nchannels,
|
rtklib_make_pvt_cc(unsigned int nchannels,
|
||||||
bool dump,
|
bool dump,
|
||||||
std::string dump_filename,
|
std::string dump_filename,
|
||||||
int averaging_depth,
|
|
||||||
bool flag_averaging,
|
|
||||||
int output_rate_ms,
|
int output_rate_ms,
|
||||||
int display_rate_ms,
|
int display_rate_ms,
|
||||||
bool flag_nmea_tty_port,
|
bool flag_nmea_tty_port,
|
||||||
@ -66,8 +64,6 @@ rtklib_make_pvt_cc(unsigned int nchannels,
|
|||||||
return rtklib_pvt_cc_sptr(new rtklib_pvt_cc(nchannels,
|
return rtklib_pvt_cc_sptr(new rtklib_pvt_cc(nchannels,
|
||||||
dump,
|
dump,
|
||||||
dump_filename,
|
dump_filename,
|
||||||
averaging_depth,
|
|
||||||
flag_averaging,
|
|
||||||
output_rate_ms,
|
output_rate_ms,
|
||||||
display_rate_ms,
|
display_rate_ms,
|
||||||
flag_nmea_tty_port,
|
flag_nmea_tty_port,
|
||||||
@ -86,7 +82,8 @@ rtklib_make_pvt_cc(unsigned int nchannels,
|
|||||||
|
|
||||||
void rtklib_pvt_cc::msg_handler_telemetry(pmt::pmt_t msg)
|
void rtklib_pvt_cc::msg_handler_telemetry(pmt::pmt_t msg)
|
||||||
{
|
{
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
if( pmt::any_ref(msg).type() == typeid(std::shared_ptr<Gps_Ephemeris>) )
|
if( pmt::any_ref(msg).type() == typeid(std::shared_ptr<Gps_Ephemeris>) )
|
||||||
{
|
{
|
||||||
// ### GPS EPHEMERIS ###
|
// ### GPS EPHEMERIS ###
|
||||||
@ -200,15 +197,13 @@ std::map<int,Gps_Ephemeris> rtklib_pvt_cc::get_GPS_L1_ephemeris_map()
|
|||||||
|
|
||||||
|
|
||||||
rtklib_pvt_cc::rtklib_pvt_cc(unsigned int nchannels, bool dump, std::string dump_filename,
|
rtklib_pvt_cc::rtklib_pvt_cc(unsigned int nchannels, bool dump, std::string dump_filename,
|
||||||
int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port,
|
int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port,
|
||||||
std::string nmea_dump_filename, std::string nmea_dump_devname,
|
std::string nmea_dump_filename, std::string nmea_dump_devname,
|
||||||
bool flag_rtcm_server, bool flag_rtcm_tty_port, unsigned short rtcm_tcp_port,
|
bool flag_rtcm_server, bool flag_rtcm_tty_port, unsigned short rtcm_tcp_port,
|
||||||
unsigned short rtcm_station_id, std::map<int,int> rtcm_msg_rate_ms, std::string rtcm_dump_devname, const unsigned int type_of_receiver, const prcopt_t rtklib_opt) :
|
unsigned short rtcm_station_id, std::map<int,int> rtcm_msg_rate_ms, std::string rtcm_dump_devname, const unsigned int type_of_receiver, const prcopt_t rtklib_opt) :
|
||||||
gr::block("rtklib_pvt_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)),
|
gr::block("rtklib_pvt_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)),
|
||||||
gr::io_signature::make(0, 0, sizeof(gr_complex)))
|
gr::io_signature::make(0, 0, 0))
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
d_output_rate_ms = output_rate_ms;
|
d_output_rate_ms = output_rate_ms;
|
||||||
d_display_rate_ms = display_rate_ms;
|
d_display_rate_ms = display_rate_ms;
|
||||||
d_dump = dump;
|
d_dump = dump;
|
||||||
@ -280,14 +275,19 @@ rtklib_pvt_cc::rtklib_pvt_cc(unsigned int nchannels, bool dump, std::string dump
|
|||||||
|
|
||||||
d_dump_filename.append("_raw.dat");
|
d_dump_filename.append("_raw.dat");
|
||||||
dump_ls_pvt_filename.append("_ls_pvt.dat");
|
dump_ls_pvt_filename.append("_ls_pvt.dat");
|
||||||
d_averaging_depth = averaging_depth;
|
|
||||||
d_flag_averaging = flag_averaging;
|
|
||||||
|
|
||||||
d_ls_pvt = std::make_shared<rtklib_solver>((int)nchannels, dump_ls_pvt_filename, d_dump, rtklib_options);
|
d_ls_pvt = std::make_shared<rtklib_solver>((int)nchannels, dump_ls_pvt_filename, d_dump, rtklib_options);
|
||||||
d_ls_pvt->set_averaging_depth(d_averaging_depth);
|
d_ls_pvt->set_averaging_depth(1);
|
||||||
|
|
||||||
d_rx_time = 0.0;
|
d_rx_time = 0.0;
|
||||||
last_pvt_display_T_rx_s = 0.0;
|
last_pvt_display_T_rx_s = 0.0;
|
||||||
|
last_RTCM_1019_output_time = 0.0;
|
||||||
|
last_RTCM_1045_output_time = 0.0;
|
||||||
|
last_RTCM_1077_output_time = 0.0;
|
||||||
|
last_RTCM_1097_output_time = 0.0;
|
||||||
|
last_RTCM_MSM_output_time = 0.0;
|
||||||
|
last_RINEX_obs_output_time = 0.0;
|
||||||
|
last_RINEX_nav_output_time = 0.0;
|
||||||
|
|
||||||
b_rinex_header_written = false;
|
b_rinex_header_written = false;
|
||||||
b_rinex_header_updated = false;
|
b_rinex_header_updated = false;
|
||||||
@ -402,27 +402,12 @@ rtklib_pvt_cc::~rtklib_pvt_cc()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool rtklib_pvt_cc::observables_pairCompare_min(const std::pair<int,Gnss_Synchro>& a, const std::pair<int,Gnss_Synchro>& b)
|
bool rtklib_pvt_cc::observables_pairCompare_min(const std::pair<int,Gnss_Synchro>& a, const std::pair<int,Gnss_Synchro>& b)
|
||||||
{
|
{
|
||||||
return (a.second.Pseudorange_m) < (b.second.Pseudorange_m);
|
return (a.second.Pseudorange_m) < (b.second.Pseudorange_m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void rtklib_pvt_cc::print_receiver_status(Gnss_Synchro** channels_synchronization_data)
|
|
||||||
{
|
|
||||||
// Print the current receiver status using std::cout every second
|
|
||||||
int current_rx_seg = floor((double)channels_synchronization_data[0][0].Tracking_sample_counter/(double)channels_synchronization_data[0][0].fs);
|
|
||||||
if ( current_rx_seg != d_last_status_print_seg)
|
|
||||||
{
|
|
||||||
d_last_status_print_seg = current_rx_seg;
|
|
||||||
std::cout << "Current input signal time = " << current_rx_seg << " [s]" << std::endl << std::flush;
|
|
||||||
//DLOG(INFO) << "GPS L1 C/A Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN)
|
|
||||||
// << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]" << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool rtklib_pvt_cc::send_sys_v_ttff_msg(ttff_msgbuf ttff)
|
bool rtklib_pvt_cc::send_sys_v_ttff_msg(ttff_msgbuf ttff)
|
||||||
{
|
{
|
||||||
/* Fill Sys V message structures */
|
/* Fill Sys V message structures */
|
||||||
@ -439,26 +424,26 @@ bool rtklib_pvt_cc::send_sys_v_ttff_msg(ttff_msgbuf ttff)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
int rtklib_pvt_cc::general_work (int noutput_items, gr_vector_int &ninput_items,
|
||||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items __attribute__((unused)))
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items __attribute__((unused)))
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for(int epoch = 0; epoch < ninput_items[0]; epoch++)
|
for(int epoch = 0; epoch < ninput_items[0]; epoch++)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
bool flag_display_pvt = false;
|
bool flag_display_pvt = false;
|
||||||
bool flag_make_pvt_output=false;
|
bool flag_compute_pvt_output = false;
|
||||||
bool flag_make_RTCM_output=false;
|
bool flag_write_RTCM_1019_output = false;
|
||||||
|
bool flag_write_RTCM_1045_output = false;
|
||||||
|
bool flag_write_RTCM_1077_output = false;
|
||||||
|
bool flag_write_RTCM_1097_output = false;
|
||||||
|
bool flag_write_RTCM_MSM_output = false;
|
||||||
|
bool flag_write_RINEX_obs_output = false;
|
||||||
|
bool flag_write_RINEX_nav_output = false;
|
||||||
unsigned int gps_channel = 0;
|
unsigned int gps_channel = 0;
|
||||||
unsigned int gal_channel = 0;
|
unsigned int gal_channel = 0;
|
||||||
|
|
||||||
gnss_observables_map.clear();
|
gnss_observables_map.clear();
|
||||||
Gnss_Synchro **in = (Gnss_Synchro **) &input_items[0]; //Get the input pointer
|
Gnss_Synchro **in = (Gnss_Synchro **) &input_items[0]; //Get the input pointer
|
||||||
|
|
||||||
|
|
||||||
// ############ 1. READ PSEUDORANGES ####
|
// ############ 1. READ PSEUDORANGES ####
|
||||||
for (unsigned int i = 0; i < d_nchannels; i++)
|
for (unsigned int i = 0; i < d_nchannels; i++)
|
||||||
{
|
{
|
||||||
@ -493,10 +478,91 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<int, Galileo_Ephemeris>::iterator galileo_ephemeris_iter;
|
// ############ 2 COMPUTE THE PVT ################################
|
||||||
std::map<int, Gps_Ephemeris>::iterator gps_ephemeris_iter;
|
if (gnss_observables_map.size() > 0)
|
||||||
std::map<int, Gps_CNAV_Ephemeris>::iterator gps_cnav_ephemeris_iter;
|
{
|
||||||
std::map<int, Gnss_Synchro>::iterator gnss_observables_iter;
|
double current_RX_time = gnss_observables_map.begin()->second.RX_time;
|
||||||
|
|
||||||
|
if (fabs(current_RX_time - d_rx_time) * 1000.0 >= static_cast<double>(d_output_rate_ms))
|
||||||
|
{
|
||||||
|
flag_compute_pvt_output = true;
|
||||||
|
d_rx_time = current_RX_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
// compute on the fly PVT solution
|
||||||
|
if (flag_compute_pvt_output == true)
|
||||||
|
{
|
||||||
|
bool pvt_result;
|
||||||
|
pvt_result = d_ls_pvt->get_PVT(gnss_observables_map, d_rx_time, false);
|
||||||
|
|
||||||
|
if (pvt_result == true)
|
||||||
|
{
|
||||||
|
if (fabs(current_RX_time - last_pvt_display_T_rx_s) * 1000.0 >= static_cast<double>(d_display_rate_ms))
|
||||||
|
{
|
||||||
|
flag_display_pvt = true;
|
||||||
|
last_pvt_display_T_rx_s = current_RX_time;
|
||||||
|
}
|
||||||
|
if ((fabs(current_RX_time - last_RTCM_1019_output_time) * 1000.0 >= static_cast<double>(d_rtcm_MT1019_rate_ms)) && (d_rtcm_MT1019_rate_ms != 0) ) // allows deactivating messages by setting rate = 0
|
||||||
|
{
|
||||||
|
flag_write_RTCM_1019_output = true;
|
||||||
|
last_RTCM_1019_output_time = current_RX_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((fabs(current_RX_time - last_RTCM_1045_output_time) * 1000.0 >= static_cast<double>(d_rtcm_MT1045_rate_ms)) && (d_rtcm_MT1045_rate_ms != 0) )
|
||||||
|
{
|
||||||
|
flag_write_RTCM_1045_output = true;
|
||||||
|
last_RTCM_1045_output_time = current_RX_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((fabs(current_RX_time - last_RTCM_1077_output_time) * 1000.0 >= static_cast<double>(d_rtcm_MT1077_rate_ms)) && (d_rtcm_MT1077_rate_ms != 0) )
|
||||||
|
{
|
||||||
|
flag_write_RTCM_1077_output = true;
|
||||||
|
last_RTCM_1077_output_time = current_RX_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((fabs(current_RX_time - last_RTCM_1097_output_time) * 1000.0 >= static_cast<double>(d_rtcm_MT1097_rate_ms)) && (d_rtcm_MT1097_rate_ms != 0) )
|
||||||
|
{
|
||||||
|
flag_write_RTCM_1097_output = true;
|
||||||
|
last_RTCM_1097_output_time = current_RX_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((fabs(current_RX_time - last_RTCM_MSM_output_time) * 1000.0 >= static_cast<double>(d_rtcm_MSM_rate_ms)) && (d_rtcm_MSM_rate_ms != 0) )
|
||||||
|
{
|
||||||
|
flag_write_RTCM_MSM_output = true;
|
||||||
|
last_RTCM_MSM_output_time = current_RX_time;
|
||||||
|
}
|
||||||
|
if ((fabs(current_RX_time - last_RINEX_obs_output_time) >= 1.0) ) // TODO: Make it configurable
|
||||||
|
{
|
||||||
|
flag_write_RINEX_obs_output = true;
|
||||||
|
last_RINEX_obs_output_time = current_RX_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((fabs(current_RX_time - last_RINEX_nav_output_time) >= 6.0) ) // TODO: Make it configurable
|
||||||
|
{
|
||||||
|
flag_write_RINEX_nav_output = true;
|
||||||
|
last_RINEX_nav_output_time = current_RX_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
// correct the observable to account for the receiver clock offset
|
||||||
|
|
||||||
|
for (std::map<int,Gnss_Synchro>::iterator it = gnss_observables_map.begin(); it != gnss_observables_map.end(); ++it)
|
||||||
|
{
|
||||||
|
it->second.Pseudorange_m = it->second.Pseudorange_m - d_ls_pvt->d_rx_dt_s * GPS_C_m_s;
|
||||||
|
}
|
||||||
|
if(first_fix == true)
|
||||||
|
{
|
||||||
|
std::cout << "First position fix at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time)
|
||||||
|
<< " UTC is Lat = " << d_ls_pvt->d_latitude_d << " [deg], Long = " << d_ls_pvt->d_longitude_d
|
||||||
|
<< " [deg], Height= " << d_ls_pvt->d_height_m << " [m]" << std::endl;
|
||||||
|
ttff_msgbuf ttff;
|
||||||
|
ttff.mtype = 1;
|
||||||
|
ttff.ttff = 0; //d_sample_counter;
|
||||||
|
send_sys_v_ttff_msg(ttff);
|
||||||
|
first_fix = false;
|
||||||
|
}
|
||||||
|
d_kml_dump->print_position(d_ls_pvt, false);
|
||||||
|
d_geojson_printer->print_position(d_ls_pvt, false);
|
||||||
|
d_nmea_printer->Print_Nmea_Line(d_ls_pvt, false);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TYPE | RECEIVER
|
* TYPE | RECEIVER
|
||||||
@ -525,58 +591,13 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
* 22 | GPS L1 C/A + Galileo E1B + GPS L5
|
* 22 | GPS L1 C/A + Galileo E1B + GPS L5
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// ############ 2 COMPUTE THE PVT ################################
|
|
||||||
if (gnss_observables_map.size() > 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (fabs(gnss_observables_map.begin()->second.RX_time -last_pvt_display_T_rx_s)*1000.0>=(double)d_display_rate_ms)
|
|
||||||
{
|
|
||||||
flag_display_pvt=true;
|
|
||||||
last_pvt_display_T_rx_s=gnss_observables_map.begin()->second.RX_time;
|
|
||||||
}
|
|
||||||
if (fabs(gnss_observables_map.begin()->second.RX_time -d_rx_time)*1000.0>=(double)d_output_rate_ms)
|
|
||||||
{
|
|
||||||
flag_make_pvt_output=true;
|
|
||||||
d_rx_time =gnss_observables_map.begin()->second.RX_time;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fabs(gnss_observables_map.begin()->second.RX_time -d_rx_time)*1000.0>=(double)d_rtcm_MT1019_rate_ms)
|
|
||||||
{
|
|
||||||
flag_make_RTCM_output=true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// compute on the fly PVT solution
|
|
||||||
if (flag_make_pvt_output==true)
|
|
||||||
{
|
|
||||||
bool pvt_result;
|
|
||||||
pvt_result = d_ls_pvt->get_PVT(gnss_observables_map, d_rx_time, d_flag_averaging);
|
|
||||||
|
|
||||||
if (pvt_result == true)
|
|
||||||
{
|
|
||||||
// correct the observable to account for the receiver clock offset
|
|
||||||
|
|
||||||
for (std::map<int,Gnss_Synchro>::iterator it = gnss_observables_map.begin(); it != gnss_observables_map.end(); ++it)
|
|
||||||
{
|
|
||||||
it->second.Pseudorange_m = it->second.Pseudorange_m - d_ls_pvt->d_rx_dt_s * GPS_C_m_s;
|
|
||||||
}
|
|
||||||
if(first_fix == true)
|
|
||||||
{
|
|
||||||
std::cout << "First position fix at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time)
|
|
||||||
<< " UTC is Lat = " << d_ls_pvt->d_latitude_d << " [deg], Long = " << d_ls_pvt->d_longitude_d
|
|
||||||
<< " [deg], Height= " << d_ls_pvt->d_height_m << " [m]" << std::endl;
|
|
||||||
ttff_msgbuf ttff;
|
|
||||||
ttff.mtype = 1;
|
|
||||||
ttff.ttff = 0;//d_sample_counter;
|
|
||||||
send_sys_v_ttff_msg(ttff);
|
|
||||||
first_fix = false;
|
|
||||||
}
|
|
||||||
d_kml_dump->print_position(d_ls_pvt, d_flag_averaging);
|
|
||||||
d_geojson_printer->print_position(d_ls_pvt, d_flag_averaging);
|
|
||||||
d_nmea_printer->Print_Nmea_Line(d_ls_pvt, d_flag_averaging);
|
|
||||||
|
|
||||||
// ####################### RINEX FILES #################
|
// ####################### RINEX FILES #################
|
||||||
|
|
||||||
|
std::map<int, Galileo_Ephemeris>::iterator galileo_ephemeris_iter;
|
||||||
|
std::map<int, Gps_Ephemeris>::iterator gps_ephemeris_iter;
|
||||||
|
std::map<int, Gps_CNAV_Ephemeris>::iterator gps_cnav_ephemeris_iter;
|
||||||
|
std::map<int, Gnss_Synchro>::iterator gnss_observables_iter;
|
||||||
|
|
||||||
if (!b_rinex_header_written) // & we have utc data in nav message!
|
if (!b_rinex_header_written) // & we have utc data in nav message!
|
||||||
{
|
{
|
||||||
galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
|
galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
|
||||||
@ -590,6 +611,7 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, d_rx_time);
|
rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, d_rx_time);
|
||||||
rp->rinex_nav_header(rp->navFile, d_ls_pvt->gps_iono, d_ls_pvt->gps_utc_model);
|
rp->rinex_nav_header(rp->navFile, d_ls_pvt->gps_iono, d_ls_pvt->gps_utc_model);
|
||||||
b_rinex_header_written = true; // do not write header anymore
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(type_of_rx == 2) // GPS L2C only
|
if(type_of_rx == 2) // GPS L2C only
|
||||||
@ -693,10 +715,7 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
}
|
}
|
||||||
if(b_rinex_header_written) // The header is already written, we can now log the navigation message data
|
if(b_rinex_header_written) // The header is already written, we can now log the navigation message data
|
||||||
{
|
{
|
||||||
// Limit the RINEX navigation output rate
|
if(flag_write_RINEX_nav_output)
|
||||||
// Notice that d_sample_counter period is 4ms (for Galileo correlators)
|
|
||||||
// if ((d_sample_counter - d_last_sample_nav_output) >= 6000)
|
|
||||||
if(false)
|
|
||||||
{
|
{
|
||||||
if(type_of_rx == 1) // GPS L1 C/A only
|
if(type_of_rx == 1) // GPS L1 C/A only
|
||||||
{
|
{
|
||||||
@ -722,14 +741,14 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
{
|
{
|
||||||
rp->log_rinex_nav(rp->navGalFile, d_ls_pvt->galileo_ephemeris_map);
|
rp->log_rinex_nav(rp->navGalFile, d_ls_pvt->galileo_ephemeris_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
//d_last_sample_nav_output = 0;//d_sample_counter;
|
|
||||||
}
|
}
|
||||||
galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
|
galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
|
||||||
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin();
|
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin();
|
||||||
gps_cnav_ephemeris_iter = d_ls_pvt->gps_cnav_ephemeris_map.begin();
|
gps_cnav_ephemeris_iter = d_ls_pvt->gps_cnav_ephemeris_map.begin();
|
||||||
|
|
||||||
// Log observables into the RINEX file
|
// Log observables into the RINEX file
|
||||||
|
if(flag_write_RINEX_obs_output)
|
||||||
|
{
|
||||||
if(type_of_rx == 1) // GPS L1 C/A only
|
if(type_of_rx == 1) // GPS L1 C/A only
|
||||||
{
|
{
|
||||||
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end())
|
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end())
|
||||||
@ -848,20 +867,21 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ####################### RTCM MESSAGES #################
|
// ####################### RTCM MESSAGES #################
|
||||||
if(b_rtcm_writing_started)
|
if(b_rtcm_writing_started)
|
||||||
{
|
{
|
||||||
if(type_of_rx == 1) // GPS L1 C/A
|
if(type_of_rx == 1) // GPS L1 C/A
|
||||||
{
|
{
|
||||||
if(flag_make_RTCM_output)
|
if(flag_write_RTCM_1019_output == true)
|
||||||
{
|
{
|
||||||
for(std::map<int,Gps_Ephemeris>::iterator gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin(); gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end(); gps_ephemeris_iter++ )
|
for(std::map<int,Gps_Ephemeris>::iterator gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin(); gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end(); gps_ephemeris_iter++ )
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MT1019(gps_ephemeris_iter->second);
|
d_rtcm_printer->Print_Rtcm_MT1019(gps_ephemeris_iter->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(flag_make_RTCM_output)
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
{
|
{
|
||||||
std::map<int,Gps_Ephemeris>::iterator gps_ephemeris_iter;
|
std::map<int,Gps_Ephemeris>::iterator gps_ephemeris_iter;
|
||||||
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin();
|
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin();
|
||||||
@ -873,14 +893,14 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
}
|
}
|
||||||
if((type_of_rx == 4) || (type_of_rx == 5) || (type_of_rx == 6) || (type_of_rx == 14) || (type_of_rx == 15)) // Galileo
|
if((type_of_rx == 4) || (type_of_rx == 5) || (type_of_rx == 6) || (type_of_rx == 14) || (type_of_rx == 15)) // Galileo
|
||||||
{
|
{
|
||||||
if(flag_make_RTCM_output)
|
if(flag_write_RTCM_1045_output == true)
|
||||||
{
|
{
|
||||||
for(std::map<int,Galileo_Ephemeris>::iterator gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin(); gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end(); gal_ephemeris_iter++ )
|
for(std::map<int,Galileo_Ephemeris>::iterator gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin(); gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end(); gal_ephemeris_iter++ )
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MT1045(gal_ephemeris_iter->second);
|
d_rtcm_printer->Print_Rtcm_MT1045(gal_ephemeris_iter->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(flag_make_RTCM_output)
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
{
|
{
|
||||||
std::map<int,Galileo_Ephemeris>::iterator gal_ephemeris_iter;
|
std::map<int,Galileo_Ephemeris>::iterator gal_ephemeris_iter;
|
||||||
gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
|
gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
|
||||||
@ -892,14 +912,14 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
}
|
}
|
||||||
if(type_of_rx == 7) // GPS L1 C/A + GPS L2C
|
if(type_of_rx == 7) // GPS L1 C/A + GPS L2C
|
||||||
{
|
{
|
||||||
if(flag_make_RTCM_output)
|
if(flag_write_RTCM_1019_output == true)
|
||||||
{
|
{
|
||||||
for(std::map<int,Gps_Ephemeris>::iterator gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin(); gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end(); gps_ephemeris_iter++ )
|
for(std::map<int,Gps_Ephemeris>::iterator gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin(); gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end(); gps_ephemeris_iter++ )
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MT1019(gps_ephemeris_iter->second);
|
d_rtcm_printer->Print_Rtcm_MT1019(gps_ephemeris_iter->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(flag_make_RTCM_output)
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
{
|
{
|
||||||
std::map<int,Gps_Ephemeris>::iterator gps_ephemeris_iter;
|
std::map<int,Gps_Ephemeris>::iterator gps_ephemeris_iter;
|
||||||
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin();
|
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin();
|
||||||
@ -913,21 +933,21 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
}
|
}
|
||||||
if(type_of_rx == 9) // GPS L1 C/A + Galileo E1B
|
if(type_of_rx == 9) // GPS L1 C/A + Galileo E1B
|
||||||
{
|
{
|
||||||
if(flag_make_RTCM_output)
|
if(flag_write_RTCM_1019_output == true)
|
||||||
{
|
{
|
||||||
for(gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin(); gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end(); gps_ephemeris_iter++ )
|
for(gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin(); gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end(); gps_ephemeris_iter++ )
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MT1019(gps_ephemeris_iter->second);
|
d_rtcm_printer->Print_Rtcm_MT1019(gps_ephemeris_iter->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(flag_make_RTCM_output)
|
if(flag_write_RTCM_1045_output == true)
|
||||||
{
|
{
|
||||||
for(galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin(); galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end(); galileo_ephemeris_iter++ )
|
for(galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin(); galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end(); galileo_ephemeris_iter++ )
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MT1045(galileo_ephemeris_iter->second);
|
d_rtcm_printer->Print_Rtcm_MT1045(galileo_ephemeris_iter->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(flag_make_RTCM_output)
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
{
|
{
|
||||||
//gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.end();
|
//gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.end();
|
||||||
//galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.end();
|
//galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.end();
|
||||||
@ -960,7 +980,7 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if(flag_make_RTCM_output)
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end())
|
if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end())
|
||||||
@ -968,7 +988,7 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, galileo_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, galileo_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(flag_make_RTCM_output)
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
{
|
{
|
||||||
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end())
|
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end())
|
||||||
{
|
{
|
||||||
@ -1091,7 +1111,7 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DEBUG MESSAGE: Display position in console output
|
// DEBUG MESSAGE: Display position in console output
|
||||||
if(d_ls_pvt->b_valid_position==true && flag_display_pvt==true)
|
if( (d_ls_pvt->b_valid_position == true) && (flag_display_pvt == true) )
|
||||||
{
|
{
|
||||||
std::cout << "Position at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time)
|
std::cout << "Position at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time)
|
||||||
<< " UTC using "<< d_ls_pvt->d_valid_observations<<" observations is Lat = " << d_ls_pvt->d_latitude_d << " [deg], Long = " << d_ls_pvt->d_longitude_d
|
<< " UTC using "<< d_ls_pvt->d_valid_observations<<" observations is Lat = " << d_ls_pvt->d_latitude_d << " [deg], Long = " << d_ls_pvt->d_longitude_d
|
||||||
@ -1130,6 +1150,6 @@ int rtklib_pvt_cc::general_work (int noutput_items __attribute__((unused)), gr_v
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
consume_each(ninput_items[0]); //one by one
|
consume_each(ninput_items[0]);
|
||||||
return 1;
|
return noutput_items;
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,6 @@ typedef boost::shared_ptr<rtklib_pvt_cc> rtklib_pvt_cc_sptr;
|
|||||||
rtklib_pvt_cc_sptr rtklib_make_pvt_cc(unsigned int n_channels,
|
rtklib_pvt_cc_sptr rtklib_make_pvt_cc(unsigned int n_channels,
|
||||||
bool dump,
|
bool dump,
|
||||||
std::string dump_filename,
|
std::string dump_filename,
|
||||||
int averaging_depth,
|
|
||||||
bool flag_averaging,
|
|
||||||
int output_rate_ms,
|
int output_rate_ms,
|
||||||
int display_rate_ms,
|
int display_rate_ms,
|
||||||
bool flag_nmea_tty_port,
|
bool flag_nmea_tty_port,
|
||||||
@ -78,8 +76,6 @@ private:
|
|||||||
friend rtklib_pvt_cc_sptr rtklib_make_pvt_cc(unsigned int nchannels,
|
friend rtklib_pvt_cc_sptr rtklib_make_pvt_cc(unsigned int nchannels,
|
||||||
bool dump,
|
bool dump,
|
||||||
std::string dump_filename,
|
std::string dump_filename,
|
||||||
int averaging_depth,
|
|
||||||
bool flag_averaging,
|
|
||||||
int output_rate_ms,
|
int output_rate_ms,
|
||||||
int display_rate_ms,
|
int display_rate_ms,
|
||||||
bool flag_nmea_tty_port,
|
bool flag_nmea_tty_port,
|
||||||
@ -95,8 +91,6 @@ private:
|
|||||||
const prcopt_t rtklib_opt);
|
const prcopt_t rtklib_opt);
|
||||||
rtklib_pvt_cc(unsigned int nchannels,
|
rtklib_pvt_cc(unsigned int nchannels,
|
||||||
bool dump, std::string dump_filename,
|
bool dump, std::string dump_filename,
|
||||||
int averaging_depth,
|
|
||||||
bool flag_averaging,
|
|
||||||
int output_rate_ms,
|
int output_rate_ms,
|
||||||
int display_rate_ms,
|
int display_rate_ms,
|
||||||
bool flag_nmea_tty_port,
|
bool flag_nmea_tty_port,
|
||||||
@ -123,14 +117,12 @@ private:
|
|||||||
int d_rtcm_MT1097_rate_ms;
|
int d_rtcm_MT1097_rate_ms;
|
||||||
int d_rtcm_MSM_rate_ms;
|
int d_rtcm_MSM_rate_ms;
|
||||||
|
|
||||||
void print_receiver_status(Gnss_Synchro** channels_synchronization_data);
|
|
||||||
int d_last_status_print_seg; //for status printer
|
int d_last_status_print_seg; //for status printer
|
||||||
|
|
||||||
unsigned int d_nchannels;
|
unsigned int d_nchannels;
|
||||||
std::string d_dump_filename;
|
std::string d_dump_filename;
|
||||||
std::ofstream d_dump_file;
|
std::ofstream d_dump_file;
|
||||||
int d_averaging_depth;
|
|
||||||
bool d_flag_averaging;
|
|
||||||
int d_output_rate_ms;
|
int d_output_rate_ms;
|
||||||
int d_display_rate_ms;
|
int d_display_rate_ms;
|
||||||
//long unsigned int d_sample_counter;
|
//long unsigned int d_sample_counter;
|
||||||
@ -143,6 +135,13 @@ private:
|
|||||||
std::shared_ptr<Rtcm_Printer> d_rtcm_printer;
|
std::shared_ptr<Rtcm_Printer> d_rtcm_printer;
|
||||||
double d_rx_time;
|
double d_rx_time;
|
||||||
double last_pvt_display_T_rx_s;
|
double last_pvt_display_T_rx_s;
|
||||||
|
double last_RTCM_1019_output_time;
|
||||||
|
double last_RTCM_1045_output_time;
|
||||||
|
double last_RTCM_1077_output_time;
|
||||||
|
double last_RTCM_1097_output_time;
|
||||||
|
double last_RTCM_MSM_output_time;
|
||||||
|
double last_RINEX_obs_output_time;
|
||||||
|
double last_RINEX_nav_output_time;
|
||||||
std::shared_ptr<rtklib_solver> d_ls_pvt;
|
std::shared_ptr<rtklib_solver> d_ls_pvt;
|
||||||
prcopt_t rtklib_options;
|
prcopt_t rtklib_options;
|
||||||
std::map<int,Gnss_Synchro> gnss_observables_map;
|
std::map<int,Gnss_Synchro> gnss_observables_map;
|
||||||
|
@ -672,7 +672,10 @@ TEST_F(Obs_Gps_L1_System_Test, Observables_system_test)
|
|||||||
configure_generator();
|
configure_generator();
|
||||||
|
|
||||||
// Generate signal raw signal samples and observations RINEX file
|
// Generate signal raw signal samples and observations RINEX file
|
||||||
|
if(!FLAGS_disable_generator)
|
||||||
|
{
|
||||||
generate_signal();
|
generate_signal();
|
||||||
|
}
|
||||||
|
|
||||||
std::cout << "Validating generated reference RINEX obs file: " << FLAGS_filename_rinex_obs << " ..." << std::endl;
|
std::cout << "Validating generated reference RINEX obs file: " << FLAGS_filename_rinex_obs << " ..." << std::endl;
|
||||||
bool is_gen_rinex_obs_valid = check_valid_rinex_obs( "./" + FLAGS_filename_rinex_obs);
|
bool is_gen_rinex_obs_valid = check_valid_rinex_obs( "./" + FLAGS_filename_rinex_obs);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user