diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..8ae397c5fba281f4455a6042d5d6727a96e94f25 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +#Ignore build, bin and lib folders +bin/ +build/ +lib/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000000000000000000000000000000000..0433a4f7287f938695a2c0a6912b1270ff8929e9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "deps/RTKLIB"] + path = deps/RTKLIB + url = https://github.com/tomojitakasu/RTKLIB.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ddfb998b6c1640d5fb46d6a57d8a469f5b74b06..7fdfa2d7db4b06b68091b3877a52ca3fdda23502 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,13 +28,17 @@ CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX11) message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has C++11 support.") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c99") elseif(COMPILER_SUPPORTS_CXX0X) message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has C++0x support.") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") + #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c99") else() message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") endif() +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive") + ADD_SUBDIRECTORY(src) FIND_PACKAGE(Doxygen) diff --git a/Findgnss_utils.cmake b/Findgnss_utils.cmake index 85306e55c56ff0aea7537dcf31d091f2a426d9dc..4c0429fc6831b279bbeb005cdfcb976bf2dc2881 100644 --- a/Findgnss_utils.cmake +++ b/Findgnss_utils.cmake @@ -1,9 +1,9 @@ #edit the following line to add the librarie's header files -FIND_PATH(gnss_utils_INCLUDE_DIR gnss_utils.h obervation.h /usr/include/iridrivers /usr/local/lib) +FIND_PATH(gnss_utils_INCLUDE_DIR observations.h navigation.h /usr/include/iridrivers /usr/local/include) FIND_LIBRARY(gnss_utils_LIBRARY NAMES gnss_utils - PATHS /usr/lib /usr/local/lib /usr/local/lib) + PATHS /usr/lib /usr/local/lib) IF (gnss_utils_INCLUDE_DIR AND gnss_utils_LIBRARY) SET(gnss_utils_FOUND TRUE) @@ -18,4 +18,3 @@ ELSE (gnss_utils_FOUND) MESSAGE(FATAL_ERROR "Could not find gnss_utils") ENDIF (gnss_utils_FIND_REQUIRED) ENDIF (gnss_utils_FOUND) - diff --git a/cmake_modules/FindRTKLIB.cmake b/cmake_modules/FindRTKLIB.cmake deleted file mode 100644 index 41289eba5411914f02094b1541e01d573682cd93..0000000000000000000000000000000000000000 --- a/cmake_modules/FindRTKLIB.cmake +++ /dev/null @@ -1,18 +0,0 @@ -#edit the following line to add the librarie's header files - -FIND_PATH(RTKLIB_INCLUDE_DIR rtklib.h /usr/include /usr/local/include ~/RTKLIB/src) -GET_FILENAME_COMPONENT(RTK_LIB_PATH ${RTKLIB_INCLUDE_DIR} DIRECTORY) - -IF (RTKLIB_INCLUDE_DIR) - SET(RTKLIB_FOUND TRUE) -ENDIF (RTKLIB_INCLUDE_DIR) - -IF (RTKLIB_FOUND) - IF (NOT RTKLIB_FOUND_QUIETLY) - MESSAGE(STATUS "Found RTKLIB: ${RTKLIB_INCLUDE_DIR}") - ENDIF (NOT RTKLIB_FOUND_QUIETLY) -ELSE (RTKLIB_FOUND) - IF (RTKLIB_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Could not find RTKLIB") - ENDIF (RTKLIB_FIND_REQUIRED) -ENDIF (RTKLIB_FOUND) diff --git a/deps/RTKLIB b/deps/RTKLIB new file mode 160000 index 0000000000000000000000000000000000000000..71db0ffa0d9735697c6adfd06fdf766d0e5ce807 --- /dev/null +++ b/deps/RTKLIB @@ -0,0 +1 @@ +Subproject commit 71db0ffa0d9735697c6adfd06fdf766d0e5ce807 diff --git a/include/gnss_utils.h b/include/gnss_utils.h deleted file mode 100644 index 0c5b6ed4320ee047358ce6f0c56592714b069f7d..0000000000000000000000000000000000000000 --- a/include/gnss_utils.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef GNSS_UTILS_H -#define GNSS_UTILS_H - -#include <vector> -#include <iostream> -#include <memory> - -#include "observation.h" - -extern "C" -{ - #include "/home/jlaplaza/RTKLIB/src/rtklib.h" -} - -namespace GNSSUtils -{ - class Receiver - { - public: - // Constructor & Destructor - Receiver(); - ~Receiver(); - - // Public objects - - // Public methods - - - /* - Observations - */ - - void clearObservations(); - - void pushObservation(obsd_t obs); - - std::vector<obsd_t> getObservations(); - - - /* - Navigation - */ - - void clearNavigation(); - - void pushNavigation(nav_t nav); - - std::vector<nav_t> getNavigation(); - - - /* - Processing Options - */ - - void clearOptions(); - - void pushOption(prcopt_t opt); - - std::vector<prcopt_t> getOptions(); - - - /* - Solution - */ - - - /* - Satellite status - */ - - /* - Compute Fix - */ - - int computeSPP(double *azel, char *msg); - - private: - // rtklib-like attribute to represent the different observation msgs for a given epoch - std::vector<obsd_t> _obsVector; - - // rtklib-like attribute to represent the different navigation msgs for a given epoch - std::vector<nav_t> _navVector; - - // rtklib-like attribute to represent the different options for a given epoch - std::vector<prcopt_t> _opt; - - // rtklib-like attribute to represent the solution for a given epoch - std::Vector<sol_t> _sol; - - // rtklib-like attribute to represent the satellite status for a given epoch - std::vector<ssat_t> _ssat; - - - - - - }; -} -#endif diff --git a/include/gnss_utils/gnss_utils.h b/include/gnss_utils/gnss_utils.h new file mode 100644 index 0000000000000000000000000000000000000000..f77bf48f3c1fa5ce540ea6d83904c8d684aa8dfd --- /dev/null +++ b/include/gnss_utils/gnss_utils.h @@ -0,0 +1,45 @@ +#ifndef GNSS_UTILS_H +#define GNSS_UTILS_H + +#include <vector> +#include <iostream> +#include <memory> + +#include <eigen3/Eigen/Dense> +#include <eigen3/Eigen/Geometry> +#include <eigen3/Eigen/Sparse> + +#include "observations.h" +#include "navigation.h" + +extern "C" +{ + #include "../deps/RTKLIB/src/rtklib.h" +} + +namespace GNSSUtils +{ + struct getPosOutput{ + time_t time; + double sec; + Eigen::Vector3d pos; // position (m) + Eigen::Vector3d vel; // velocity (m/s) + Eigen::Matrix3d pos_covar; // position covariance (m^2) + // {c_xx,c_yy,c_zz,c_xy,c_yz,c_zx} + Eigen::VectorXd rcv_bias; // receiver clock bias to time systems (s) + int type; // type (0:xyz-ecef,1:enu-baseline) + int stat; // solution status (SOLQ_???) + int ns; // number of valid satellites + double age; // age of differential (s) + double ratio; // AR ratio factor for valiation + + int pos_stat; // return from pntpos + Eigen::Vector3d lat_lon; // latitude_longitude_altitude + }; + + GNSSUtils::getPosOutput getPos(const std::shared_ptr<Observations> & _observations, + const std::shared_ptr<Navigation> & _navigation); + + Eigen::Vector3d ecefToLatLon(const Eigen::Vector3d & _ecef); +} +#endif diff --git a/include/gnss_utils/navigation.h b/include/gnss_utils/navigation.h new file mode 100644 index 0000000000000000000000000000000000000000..a58c834e807cf31950b5b3a9ea705e30ca685f1a --- /dev/null +++ b/include/gnss_utils/navigation.h @@ -0,0 +1,61 @@ +#ifndef NAVIGATION_H +#define NAVIGATION_H + +#include <vector> +#include <iostream> +#include <memory> + + +extern "C" +{ + #include "../deps/RTKLIB/src/rtklib.h" +} + +namespace GNSSUtils +{ + class Navigation + { + public: + // Constructor & Destructor + Navigation(); + ~Navigation(); + + // Public objects + + // Public methods + + void clearNavigation(); + + void setNavigation(nav_t nav); + + const nav_t & getNavigation() const; + nav_t & getNavigation(); + + + /****************** Array memory management ******************/ + + + // Ephemeris + void allocateEphemeris(int n_sat = MAXSAT); + void deleteEphemeris(); + + void allocateGLONASSEphemeris(int n_sat = NSATGLO); + void deleteGLONASSEphemeris(); + + void allocateSBASEphemeris(int n_sat = NSATSBS*2); //SBAS + void deleteSBASEphemeris(); + + void allocateAlmanac(int n_sat = MAXSAT); + void deleteAlmanac(); + + private: + + // rtklib-like attribute to represent the different navigation msgs for a given epoch + nav_t nav_; + + // Private methods + + + }; +} +#endif diff --git a/include/gnss_utils/observations.h b/include/gnss_utils/observations.h new file mode 100644 index 0000000000000000000000000000000000000000..4293b07ba6d2f1a8c39d364ef2c9253ff41e96c4 --- /dev/null +++ b/include/gnss_utils/observations.h @@ -0,0 +1,50 @@ +#ifndef OBSEVATIONS_H +#define OBSERVATIONS_H + +#include <vector> +#include <iostream> +#include <memory> + + + +extern "C" +{ + #include "../deps/RTKLIB/src/rtklib.h" +} + +namespace GNSSUtils +{ + class Observations + { + public: + // Constructor & Destructor + Observations(); + ~Observations(); + + // Public objects + + // Public methods + + + /* - Observations - */ + + void clearObservations(); + + void pushObservation(obsd_t obs); + + std::vector<obsd_t> getObservations(); + + + + private: + // Private objects + // rtklib-like attribute to represent the different observation msgs for a given epoch + std::vector<obsd_t> obs_vector_; + + + // Private methods + + + }; +} +#endif diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cc0421b22732bbc4d4f41d7d6415b8bdb0175d6f..407da06c9b0e07578e289988563c99090156825d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,11 +1,33 @@ +# rtklib path +SET(RTKLIB_DIR ../deps/RTKLIB) +SET(RTKLIB_SRC_DIR ${RTKLIB_DIR}/src) + # driver source files -SET(sources gnss_utils.cpp observation.cpp) +SET(SOURCES + gnss_utils.cpp + observations.cpp + navigation.cpp) + +SET(RTKLIB_SRC + ${RTKLIB_SRC_DIR}/pntpos.c + ${RTKLIB_SRC_DIR}/rtkcmn.c + ${RTKLIB_SRC_DIR}/sbas.c + ${RTKLIB_SRC_DIR}/ephemeris.c + ${RTKLIB_SRC_DIR}/preceph.c + ${RTKLIB_SRC_DIR}/qzslex.c + ${RTKLIB_SRC_DIR}/rtcm.c + ${RTKLIB_SRC_DIR}/rtcm2.c + ${RTKLIB_SRC_DIR}/rtcm3.c + ${RTKLIB_SRC_DIR}/rtcm3e.c + ${RTKLIB_SRC_DIR}/ionex.c + ${RTKLIB_SRC_DIR}/rinex.c) -# application header files -SET(headers ../include/gnss_utils.h ../include/observation.h) -# RTKLIB -INCLUDE (${PROJECT_SOURCE_DIR}/cmake_modules/FindRTKLIB.cmake) +# application header files +SET(HEADERS + ../include/gnss_utils/gnss_utils.h + ../include/gnss_utils/observations.h + ../include/gnss_utils/navigation.h) # Eigen ####### FIND_PACKAGE(Eigen3 REQUIRED) @@ -20,10 +42,10 @@ FIND_PACKAGE(Boost REQUIRED) link_directories(/usr/lib/x86_64-linux-gnu/) # Adding include directories -INCLUDE_DIRECTORIES(. ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${RTK_LIB_PATH}) +INCLUDE_DIRECTORIES(../include/ ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${RTK_LIB_PATH}) # create the shared library -ADD_LIBRARY(gnss_utils SHARED ${sources}) +ADD_LIBRARY(gnss_utils SHARED ${SOURCES} ${RTKLIB_SRC}) TARGET_LINK_LIBRARIES(gnss_utils ${Boost_LIBRARIES}) # Installing @@ -31,7 +53,7 @@ INSTALL(TARGETS gnss_utils RUNTIME DESTINATION bin LIBRARY DESTINATION /usr/local/lib ARCHIVE DESTINATION lib) -INSTALL(FILES ${headers} DESTINATION include/gnss_utils) +INSTALL(FILES ${HEADERS} DESTINATION include/gnss_utils) # INSTALL(FILES ../gnss_utils.cmake DESTINATION ${CMAKE_ROOT}/Modules/) INSTALL(FILES ../Findgnss_utils.cmake DESTINATION ${CMAKE_ROOT}/Modules/) ADD_SUBDIRECTORY(examples) diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index ece32987fb14d662a1e2bef7d9f0d848dbb7f2f0..12d787d210f74ab3fa8ddfe041661bd77684b075 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -1,4 +1,8 @@ +# include headers +INCLUDE_DIRECTORIES(../../include) + # create an example application ADD_EXECUTABLE(gnss_utils_test gnss_utils_test.cpp) + # link necessary libraries TARGET_LINK_LIBRARIES(gnss_utils_test gnss_utils) diff --git a/src/examples/gnss_utils_test.cpp b/src/examples/gnss_utils_test.cpp index 8fd4243b068ee72957dfd3bf6a81682e9b367b6a..569d1448d6cf5b8451f2b8acae56108cf24e825f 100644 --- a/src/examples/gnss_utils_test.cpp +++ b/src/examples/gnss_utils_test.cpp @@ -1,40 +1,213 @@ -#include "../../include/gnss_utils.h" -#include "../../include/observation.h" +#include "gnss_utils/observations.h" +#include "gnss_utils/navigation.h" + +#include <typeinfo> + +#include <boost/typeof/typeof.hpp> + #include <iostream> +extern "C" +{ + #include "../deps/RTKLIB/src/rinex.c" +} + using namespace GNSSUtils; + +int createObsAndNav(Observations* observations, char* obs_path, Navigation* navigation, char* nav_path) +{ + // Time + double ts_d[] = {2018, 5, 17, 14, 1, 2}; + gtime_t ts = epoch2time(ts_d); + + double te_d[] = {2018, 5, 17, 14, 42, 8}; + gtime_t te = epoch2time(te_d); + + double tint = 0.1; + + // Create options container + char* opt = "-SYS=G"; + + // Create receiver identifier + int rcv = 1; + + // Create object types + rnxopt_t rnx_opt; + + // Create obsd_t object to hold the observations + obs_t obs; + obs.data = (obsd_t *) malloc(sizeof(obsd_t)*MAXSAT); + + /* header */ + std::cout << "------------" << std::endl; + std::cout << "Observations" << std::endl; + std::cout << "------------" << std::endl; + + if (readrnx(obs_path, rcv, opt, &obs, NULL, NULL)) + { + sortobs(&obs); + obs.data[0].P[0] = 21597659.275; + obs.data[1].P[0] = 22348322.550; + obs.data[2].P[0] = 20873167.574; + obs.data[3].P[0] = 20920707.830; + + std::cout << "Obs number: " << obs.n << std::endl; + + + } + + + else + { + std::cout << "Couldn't load provided observation file" << std::endl; + return 0; + } + + + + for (int i=0; i < obs.n; i++) + { + std::cout << "time: " << time_str(obs.data[i].time, 3) << " | sat: " << int(obs.data[i].sat) << " | rcv: " << obs.data[i].rcv << + " | SNR: " << obs.data[i].SNR[0] << " | LLI: " << obs.data[i].LLI[0] << " | code: " << obs.data[i].code[0] << + " | L: " << obs.data[i].L[0] << " | P: " << obs.data[i].P[0] << " | D: " << obs.data[i].D[0] << std::endl; + observations->pushObservation(obs.data[i]); + } + + free(obs.data); + + /* header */ + std::cout << "----------" << std::endl; + std::cout << "Navigation" << std::endl; + std::cout << "----------" << std::endl; + + /* Load _nav attribute into nav variable */ + nav_t nav = navigation->getNavigation(); + + + if (readrnx(nav_path, rcv, opt, NULL, &nav, NULL)) + { + std::cout << "Navigation file loaded." << std::endl; + std::cout << "GPS satellites in navigation file: " << nav.n << std::endl; + std::cout << "GLONASS satellites in navigation file: " << nav.ng << std::endl; + std::cout << "SBAS satellites in navigation file: " << nav.ns << std::endl; + std::cout << "Almanac satellites in navigation file: " << nav.na << std::endl; + uniqnav(&nav); + } + + + else + { + std::cout << "Couldn't load provided navigation file" << std::endl; + return 0; + } + + + /* Print Constellation Satellites ids */ + for (int i=0;i<nav.n;i++) + { + std::cout << i << " GPS Sat Id: " << nav.eph[i].sat << std::endl; + } + + for (int i=0;i<nav.ng;i++) + { + std::cout << i << " GLONASS Sat Id: " << nav.geph[i].sat << std::endl; + } + + for (int i=0;i<nav.ns;i++) + { + std::cout << i << " SBAS Sat Id: " << nav.seph[i].sat << std::endl; + } + + + /* Load nav into Navigation object*/ + navigation->setNavigation(nav); + + std::cout << "Navigation message loaded to Navigation class." << std::endl; + + return 1; +} + + + + + int main(int argc, char *argv[]) { - // header + /* header */ std::cout << "--------------------------" << std::endl; std::cout << "GNSS Utils Library Example" << std::endl; std::cout << "--------------------------" << std::endl; - // create a Receiver object - GNSSUtils::Receiver test_rcv; - - // create a Observation object - gtime_t ts={0}; - unsigned char q=1, w=2, e=3; - std::vector<unsigned char> vu({q, w, e}); - std::vector<double> vd({1., 2., 3.}); - std::vector<float> vf({1., 2., 3.}); - Observation test_obs(ts, 1, 1, vu, vu, vu, vd, vd, vf); - - // Display current Observation - std::cout << "Current observation (sat): " << "(" << test_obs.getSat() << ")" << std::endl; - std::cout << "Current observation (SNR): " << "(" ; - - - - for (unsigned char i=0; i < 3; ++i) - std::cout << test_obs.getSNR()[i] << ", "; - std::cout << ")" << std::endl; - - - obsd_t obs = test_obs.convert2rtk(); - std::cout << "Observation SNR in RTKLIB format: " << "("; - for (unsigned char i=0; i < 3; ++i) - std::cout << obs.SNR[i] << ", "; - std::cout << ")" << std::endl; + + + // create Observations object + Observations observations; + + // create Navigation object + Navigation navigation; + + createObsAndNav(&observations, "../src/examples/raw_201805171357.obs", &navigation, "../src/examples/raw_201805171357.nav"); + + nav_t nav = navigation.getNavigation(); + + std::cout << "Navigation eph number " << nav.n << std::endl; + + /* Set processing options */ + + /* header */ + std::cout << "------------------" << std::endl; + std::cout << "Processing options" << std::endl; + std::cout << "------------------" << std::endl; + + prcopt_t prcopt = prcopt_default; + prcopt.mode = PMODE_SINGLE; + prcopt.soltype = 0; + prcopt.nf = 1; + prcopt.navsys = SYS_GPS; + //prcopt.elmin = 1.05; // 60 degrees = 1.05 rad + prcopt.sateph = EPHOPT_BRDC; + prcopt.ionoopt = IONOOPT_OFF; + prcopt.tropopt = TROPOPT_OFF; + prcopt.dynamics = 0; + prcopt.tidecorr = 0; + prcopt.sbascorr = SBSOPT_FCORR; + prcopt.ru[0] = 4789374.0336; + prcopt.ru[1] = 177048.3292; + prcopt.ru[2] = 4194542.6444; + + std::cout << "Processing options defined" << std::endl; + + + //Compute spp + + /* header */ + std::cout << "-----------" << std::endl; + std::cout << "pntpos call" << std::endl; + std::cout << "-----------" << std::endl; + + int stat; + + sol_t solb={{0}}; + + char msg[128]=""; + + std::vector<obsd_t> obs = observations.getObservations(); + + for (int i=0; i < obs.size(); i++) + { + std::cout << "time: " << time_str(obs[i].time, 3) << " | sat: " << int(obs[i].sat) << " | rcv: " << obs[i].rcv << + " | SNR: " << obs[i].SNR[0] << " | LLI: " << obs[i].LLI[0] << " | code: " << obs[i].code[0] << + " | L: " << obs[i].L[0] << " | P: " << obs[i].P[0] << " | D: " << obs[i].D[0] << std::endl; + } + + std::cout << "obs.size(): " << obs.size() << std::endl; + + stat = pntpos(&obs[0], obs.size(), &nav, &prcopt, &solb, NULL, NULL, msg); + + std::cout << "msg: " << msg << std::endl; + + std::cout << "sol.stat: " << solb.stat << std::endl; + + std::cout << "Position: " << solb.rr[0] << ", " << solb.rr[1] << ", " << solb.rr[2] << std::endl; + } diff --git a/src/examples/raw_201805171357.nav b/src/examples/raw_201805171357.nav new file mode 100644 index 0000000000000000000000000000000000000000..fcd505727f62595cdcb7d6609f229eba3d34bcea --- /dev/null +++ b/src/examples/raw_201805171357.nav @@ -0,0 +1,241 @@ + 3.03 N: GNSS NAV DATA M: Mixed RINEX VERSION / TYPE +RTKCONV-QT 2.4.3 Eml 20180518 083005 UTC PGM / RUN BY / DATE +log: /home/fherrero/Desktop/rtk_data/may17_street/rover/ra COMMENT +format: u-blox COMMENT + END OF HEADER +G21 2018 5 17 16 0 0 -.393872614950E-03 .488853402203E-11 .000000000000E+00 + .180000000000E+02 -.716562500000E+02 .427089218552E-08 .277512804670E+01 + -.366568565369E-05 .243949498981E-01 .127293169498E-04 .515371633720E+04 + .403200000000E+06 .251457095146E-06 -.255327447920E+01 -.633299350739E-07 + .943966348285E+00 .117093750000E+03 -.155820813323E+01 -.742388066300E-08 + .232509684962E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .200000000000E+01 .000000000000E+00 -.102445483208E-07 .180000000000E+02 + .396066000000E+06 .400000000000E+01 +S23 2018 5 17 14 0 0 .000000000000E+00 .000000000000E+00 .396084000000E+06 + .359446000000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .220441400000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +R11 2018 5 17 14 15 0 -.290172174573E-04 -.909494701773E-12 .396060000000E+06 + .236135693359E+05 .480520248413E+00 .465661287308E-08 .000000000000E+00 + .897833935547E+04 .531091690063E-01 -.279396772385E-08 .000000000000E+00 + .336017822266E+04 -.353190040588E+01 .279396772385E-08 .000000000000E+00 +G 4 2018 5 17 16 0 0 .617303885520E-04 .318323145621E-11 .000000000000E+00 + .490000000000E+02 .813125000000E+02 .586095841816E-08 .168147704406E+01 + .409968197346E-05 .984852679539E-02 .142678618431E-05 .515369743729E+04 + .403200000000E+06 -.257045030594E-06 .171283210665E+01 -.856816768646E-07 + .978868924311E+00 .363875000000E+03 .925765003885E+00 -.844285167866E-08 + .201794119821E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .280000000000E+01 .630000000000E+02 -.195577740669E-07 .490000000000E+02 + .396096000000E+06 .400000000000E+01 +S36 2018 5 17 14 1 52 .000000000000E+00 .000000000000E+00 .396121000000E+06 + .420036880000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .367484696000E+04 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +G25 2018 5 17 16 0 0 -.586538109928E-03 -.591171556152E-11 .000000000000E+00 + .960000000000E+02 .790625000000E+02 .450768776329E-08 .282650655180E+01 + .393204391003E-05 .748547178227E-02 .985339283943E-06 .515364713287E+04 + .403200000000E+06 .167638063431E-07 .168792924864E+01 -.130385160446E-06 + .974054297066E+00 .366156250000E+03 .859234222371E+00 -.824998650220E-08 + .172507185617E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .200000000000E+01 .000000000000E+00 .605359673500E-08 .960000000000E+02 + .396126000000E+06 .400000000000E+01 +S23 2018 5 17 14 2 40 .000000000000E+00 .000000000000E+00 .396165000000E+06 + .359446000000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .220441400000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +G29 2018 5 17 16 0 0 .448422506452E-03 -.636646291241E-11 .000000000000E+00 + .100000000000E+02 -.134218750000E+03 .398873757550E-08 .151837862906E+01 + -.712089240551E-05 .758121139370E-03 .585615634918E-05 .515369779968E+04 + .403200000000E+06 -.782310962677E-07 .279259841043E+01 .931322574615E-08 + .984149274453E+00 .279031250000E+03 .109062292313E+01 -.796068873750E-08 + -.435375277985E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .200000000000E+01 .000000000000E+00 -.102445483208E-07 .100000000000E+02 + .396156000000E+06 .400000000000E+01 +G31 2018 5 17 16 0 0 .121017917991E-03 -.261479726760E-11 .000000000000E+00 + .130000000000E+02 .135562500000E+03 .417624538595E-08 -.258010292801E+01 + .694207847118E-05 .874089112040E-02 .114534050226E-04 .515367195892E+04 + .403200000000E+06 -.199303030968E-06 .667414181645E+00 -.428408384323E-07 + .963670683015E+00 .163718750000E+03 -.129508508058E+00 -.771246411223E-08 + -.253581991279E-10 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .200000000000E+01 .000000000000E+00 -.135041773319E-07 .130000000000E+02 + .396156000000E+06 .400000000000E+01 +G26 2018 5 17 16 0 0 -.146218109876E-03 .127329258248E-10 .000000000000E+00 + .190000000000E+02 .955937500000E+02 .508271171534E-08 .229150417812E+01 + .499933958054E-05 .278105866164E-02 .127218663692E-05 .515365811539E+04 + .403200000000E+06 -.745058059692E-07 .166613425329E+01 .353902578354E-07 + .955604430680E+00 .354000000000E+03 .123824483227E+00 -.863714548606E-08 + .240367155114E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .200000000000E+01 .000000000000E+00 .745058059692E-08 .190000000000E+02 + .396156000000E+06 .400000000000E+01 +G20 2018 5 17 16 0 0 .508385710418E-03 .909494701773E-12 .000000000000E+00 + .550000000000E+02 .305312500000E+02 .550415784170E-08 -.143910495771E+01 + .176578760147E-05 .424874294549E-02 .653788447380E-05 .515483108330E+04 + .403200000000E+06 -.428408384323E-07 -.156561886368E+01 .819563865662E-07 + .927860664755E+00 .238250000000E+03 .194382841914E+01 -.851535469870E-08 + .584667210879E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .200000000000E+01 .000000000000E+00 -.838190317154E-08 .550000000000E+02 + .396156000000E+06 .400000000000E+01 +R22 2018 5 17 14 15 0 -.436417758465E-04 -.363797880709E-11 .396150000000E+06 + .174836372070E+05 -.213147068024E+01 .558793544769E-08 .000000000000E+00 + -.223983789062E+04 .135918807983E+01 -.931322574615E-09 -.300000000000E+01 + .183794223633E+05 .220586490631E+01 .000000000000E+00 .000000000000E+00 +R12 2018 5 17 14 15 0 -.314591452479E-04 .000000000000E+00 .396150000000E+06 + .187842797852E+05 .221794128418E+01 .651925802231E-08 .000000000000E+00 + -.611366699219E+03 .832158088684E+00 -.931322574615E-09 -.100000000000E+01 + .172705292969E+05 -.237456703186E+01 .000000000000E+00 .000000000000E+00 +R21 2018 5 17 14 15 0 .161034986377E-04 -.181898940355E-11 .396150000000E+06 + .268202294922E+04 -.252502918243E+01 .186264514923E-08 .000000000000E+00 + .109598642578E+05 .185894107819E+01 -.186264514923E-08 .400000000000E+01 + .228750024414E+05 -.595973968506E+00 -.186264514923E-08 .000000000000E+00 +R23 2018 5 17 14 15 0 .154180452228E-03 .181898940355E-11 .396150000000E+06 + .210692055664E+05 -.285812377930E+00 .558793544769E-08 .000000000000E+00 + -.143027485352E+05 -.724935531616E-01 .000000000000E+00 .300000000000E+01 + .137911767578E+04 .359415912628E+01 .279396772385E-08 .000000000000E+00 +E24 2018 5 17 13 50 0 .670211907709E-02 -.201794136956E-10 .000000000000E+00 + .190000000000E+02 .242875000000E+03 .291512142651E-08 .109551416340E+01 + .112410634756E-04 .485833035782E-03 .496208667755E-05 .544061313057E+04 + .395400000000E+06 .372529029846E-08 .126283855082E+01 -.372529029846E-08 + .990511584178E+00 .248343750000E+03 .110117432072E+01 -.567559355411E-08 + .396445084958E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .312000000000E+01 .000000000000E+00 .440049916506E-07 .493600964546E-07 + .396169000000E+06 .000000000000E+00 +G16 2018 5 17 16 0 0 .245096161962E-04 -.125055521494E-11 .000000000000E+00 + .790000000000E+02 .737187500000E+02 .444411368660E-08 .140168875341E+01 + .403448939323E-05 .100266055670E-01 .130012631416E-05 .515363121033E+04 + .403200000000E+06 -.502914190292E-07 .176651804026E+01 .137835741043E-06 + .986822970829E+00 .370343750000E+03 .514283072240E+00 -.844606609827E-08 + .700029159024E-10 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .200000000000E+01 .000000000000E+00 -.107102096081E-07 .790000000000E+02 + .396186000000E+06 .400000000000E+01 +G 5 2018 5 17 15 59 44 -.777514651418E-05 .682121026330E-12 .000000000000E+00 + .170000000000E+02 .269375000000E+02 .513057085173E-08 .129549284559E+01 + .147894024849E-05 .535089964978E-02 .625289976597E-05 .515369559669E+04 + .403184000000E+06 -.745058059692E-07 -.147810732801E+01 .372529029846E-07 + .947400843985E+00 .253656250000E+03 .608252324768E+00 -.836320550394E-08 + .368229623956E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .200000000000E+01 .000000000000E+00 -.111758708954E-07 .170000000000E+02 + .396186000000E+06 .400000000000E+01 +G14 2018 5 17 16 0 0 -.969334505498E-04 -.227373675443E-12 .000000000000E+00 + .510000000000E+02 -.840625000000E+01 .468733810359E-08 .989432442176E-01 + -.545755028725E-06 .978497182950E-02 .894069671631E-05 .515375780869E+04 + .403200000000E+06 -.108033418655E-06 -.332595167021E+00 .987201929092E-07 + .961268653452E+00 .210375000000E+03 -.195648402689E+01 -.810640909305E-08 + -.559309011751E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .200000000000E+01 .000000000000E+00 -.977888703346E-08 .510000000000E+02 + .396186000000E+06 .400000000000E+01 +E14 2018 5 17 12 40 0 .658168265363E-02 -.619593265583E-11 .000000000000E+00 + .120000000000E+02 -.468750000000E+02 .613489840029E-08 -.827456973327E+00 + -.192783772945E-05 .165251873434E+00 .759772956371E-05 .528934380722E+04 + .391200000000E+06 -.192970037460E-05 .279632045438E+01 .322423875332E-05 + .881842556282E+00 .208812500000E+03 .131753832323E+01 -.104768649749E-07 + -.677171064036E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .312000000000E+01 .455000000000E+03 .346917659044E-07 .386498868465E-07 + .396199000000E+06 .000000000000E+00 +S20 2018 5 17 14 2 40 .000000000000E+00 .000000000000E+00 .396242000000E+06 + .406367200000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + -.112459160000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S36 2018 5 17 14 4 32 .000000000000E+00 .000000000000E+00 .396282000000E+06 + .420036880000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .367484696000E+04 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S20 2018 5 17 14 5 20 .000000000000E+00 .000000000000E+00 .396322000000E+06 + .406367200000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + -.112459160000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S23 2018 5 17 14 5 20 .000000000000E+00 .000000000000E+00 .396324000000E+06 + .359446000000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .220441400000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +E14 2018 5 17 13 50 0 .658165744971E-02 -.616751094640E-11 .000000000000E+00 + .190000000000E+02 -.665625000000E+02 .678813989613E-08 -.260792610990E+00 + -.358372926712E-05 .165245657437E+00 .691227614880E-05 .528932658958E+04 + .395400000000E+06 -.215321779251E-05 .279627172604E+01 .100582838058E-05 + .881839133054E+00 .222968750000E+03 .131754849636E+01 -.116819151701E-07 + -.657884546389E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .312000000000E+01 .455000000000E+03 .346917659044E-07 .386498868465E-07 + .396409000000E+06 .000000000000E+00 +S36 2018 5 17 14 7 12 .000000000000E+00 .000000000000E+00 .396442000000E+06 + .420036880000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .367484696000E+04 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S20 2018 5 17 14 8 0 .000000000000E+00 .000000000000E+00 .396482000000E+06 + .406367200000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + -.112459160000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S23 2018 5 17 14 8 0 .000000000000E+00 .000000000000E+00 .396484000000E+06 + .359446000000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .220441400000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +E12 2018 5 17 13 50 0 .417666573776E-02 .843130010253E-10 .000000000000E+00 + .190000000000E+02 -.192437500000E+03 .233795452805E-08 .115788182092E+01 + -.890344381332E-05 .501386122778E-03 .132191926241E-04 .544061606026E+04 + .395400000000E+06 -.353902578354E-07 -.293672768750E+01 .763684511185E-07 + .979283181750E+00 .628437500000E+02 -.264081628266E+00 -.521593155020E-08 + -.657170230921E-10 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .312000000000E+01 .000000000000E+00 -.144354999065E-07 -.146683305502E-07 + .396499000000E+06 .000000000000E+00 +S36 2018 5 17 14 9 52 .000000000000E+00 .000000000000E+00 .396603000000E+06 + .420036880000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .367484696000E+04 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S20 2018 5 17 14 10 40 .000000000000E+00 .000000000000E+00 .396642000000E+06 + .406367200000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + -.112459160000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S23 2018 5 17 14 10 40 .000000000000E+00 .000000000000E+00 .396645000000E+06 + .359446000000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .220441400000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +E12 2018 5 17 14 0 0 .417671643663E-02 .843272118800E-10 .000000000000E+00 + .200000000000E+02 -.191718750000E+03 .233259716203E-08 .123187689323E+01 + -.886805355549E-05 .501382863149E-03 .132862478495E-04 .544061645317E+04 + .396000000000E+06 -.447034835815E-07 -.293673076987E+01 .670552253723E-07 + .979283174435E+00 .615000000000E+02 -.263691855687E+00 -.521307428833E-08 + -.742888087128E-10 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .312000000000E+01 .000000000000E+00 -.144354999065E-07 -.146683305502E-07 + .396679000000E+06 .000000000000E+00 +E14 2018 5 17 14 0 0 .658165384084E-02 -.616751094640E-11 .000000000000E+00 + .200000000000E+02 -.666250000000E+02 .681171230659E-08 -.179837825870E+00 + -.358745455742E-05 .165245189099E+00 .697560608387E-05 .528932536125E+04 + .396000000000E+06 -.233761966228E-05 .279626537259E+01 .836327672005E-06 + .881839071611E+00 .225500000000E+03 .131754730408E+01 -.115954829984E-07 + -.851821196058E-09 .100000000000E+01 .200100000000E+04 .000000000000E+00 + .312000000000E+01 .455000000000E+03 .346917659044E-07 .386498868465E-07 + .396679000000E+06 .000000000000E+00 +S36 2018 5 17 14 12 32 .000000000000E+00 .000000000000E+00 .396764000000E+06 + .420036880000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .367484696000E+04 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S20 2018 5 17 14 13 20 .000000000000E+00 .000000000000E+00 .396802000000E+06 + .406367200000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + -.112459160000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S23 2018 5 17 14 13 20 .000000000000E+00 .000000000000E+00 .396804000000E+06 + .359446000000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .220441400000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S36 2018 5 17 14 15 12 .000000000000E+00 .000000000000E+00 .396924000000E+06 + .420036880000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .367484696000E+04 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S20 2018 5 17 14 16 0 .000000000000E+00 .000000000000E+00 .396962000000E+06 + .406367200000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + -.112459160000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S23 2018 5 17 14 16 0 .000000000000E+00 .000000000000E+00 .396964000000E+06 + .359446000000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .220441400000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S36 2018 5 17 14 17 52 .000000000000E+00 .000000000000E+00 .397085000000E+06 + .420036880000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + .367484696000E+04 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +S20 2018 5 17 14 18 40 .000000000000E+00 .000000000000E+00 .397122000000E+06 + .406367200000E+05 .000000000000E+00 .000000000000E+00 .100000000000E+01 + -.112459160000E+05 .000000000000E+00 .000000000000E+00 .819200000000E+04 + .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 +R13 2018 5 17 14 15 0 -.105034559965E-04 .000000000000E+00 .397290000000E+06 + .663370605469E+03 .285760593414E+01 .372529029846E-08 .000000000000E+00 + -.113617504883E+05 .127725887299E+01 .000000000000E+00 -.200000000000E+01 + .228060634766E+05 .551796913147E+00 -.186264514923E-08 .000000000000E+00 diff --git a/src/examples/raw_201805171357.obs b/src/examples/raw_201805171357.obs new file mode 100644 index 0000000000000000000000000000000000000000..cf18d78b9c11bf8ca48f2fea2bb01bb2db3e344a --- /dev/null +++ b/src/examples/raw_201805171357.obs @@ -0,0 +1,36 @@ + 3.03 OBSERVATION DATA M: Mixed RINEX VERSION / TYPE +RTKCONV-QT 2.4.3 Eml 20180518 083005 UTC PGM / RUN BY / DATE +log: /home/fherrero/Desktop/rtk_data/may17_street/rover/ra COMMENT +format: u-blox COMMENT + MARKER NAME + MARKER NUMBER + MARKER TYPE + OBSERVER / AGENCY + REC # / TYPE / VERS + ANT # / TYPE + 4789374.0336 177048.3292 4194542.6444 APPROX POSITION XYZ + 0.0000 0.0000 0.0000 ANTENNA: DELTA H/E/N +G 4 C1C L1C D1C S1C SYS / # / OBS TYPES +R 4 C1C L1C D1C S1C SYS / # / OBS TYPES +E 4 C1C L1C D1C S1C SYS / # / OBS TYPES +J 4 C1C L1C D1C S1C SYS / # / OBS TYPES +S 4 C1C L1C D1C S1C SYS / # / OBS TYPES +C 4 C1I L1I D1I S1I SYS / # / OBS TYPES + 2018 5 17 14 1 2.0020000 GPS TIME OF FIRST OBS + 2018 5 17 14 42 8.6010000 GPS TIME OF LAST OBS +G SYS / PHASE SHIFT +R SYS / PHASE SHIFT +E SYS / PHASE SHIFT +J SYS / PHASE SHIFT +S SYS / PHASE SHIFT +C SYS / PHASE SHIFT + 0 GLONASS SLOT / FRQ # + C1C 0.000 C1P 0.000 C2C 0.000 C2P 0.000 GLONASS COD/PHS/BIS + END OF HEADER +> 2018 5 17 14 1 2.0020000 0 5 +G25 22348322.550 2 117441226.71621 -3039.055 45.000 +G29 20873167.574 9 -2449.652 23.000 +R11 20330782.856 9 108641485.22725 -3329.648 32.000 +G31 20920707.830 8 109939061.00922 -1587.315 39.000 +G21 21597659.275 8 113496465.14223 1343.465 37.000 + diff --git a/src/examples/raw_201805171357.pos b/src/examples/raw_201805171357.pos new file mode 100644 index 0000000000000000000000000000000000000000..7030b0bf011cd2c18784093eceb12137873521f9 --- /dev/null +++ b/src/examples/raw_201805171357.pos @@ -0,0 +1,12 @@ +% program : RTKPOST-QT ver.2.4.3 Emlid b28 +% inp file : /home/fherrero/Desktop/rtk_data/may17_street/rover/raw_201805171357.obs +% inp file : /home/fherrero/Desktop/rtk_data/may17_street/base/raw_201805171405.obs +% inp file : /home/fherrero/Desktop/rtk_data/may17_street/rover/raw_201805171357.nav +% obs start : 2018/05/17 14:01:02.0 GPST (week2001 396062.0s) +% obs end : 2018/05/17 14:42:08.6 GPST (week2001 398528.6s) +% ref pos : 41.383326247 2.117100983 105.6453 +% +% (lat/lon/height=WGS84/ellipsoidal,Q=1:fix,2:float,3:sbas,4:dgps,5:single,6:ppp,ns=# of satellites) +% GPST latitude(deg) longitude(deg) height(m) Q ns sdn(m) sde(m) sdu(m) sdne(m) sdeu(m) sdun(m) age(s) ratio +2018/05/17 14:01:02.002 41.383293114 2.116101115 -91.6641 5 5 11.9771 18.8489 79.2352 -14.4364 38.1163 -29.5030 -330.00 0.0 + diff --git a/src/gnss_utils.cpp b/src/gnss_utils.cpp index 16f173b9ee18f2a690af3dbd67574c852d222b89..ed36ae3e1e92c58b0bb2b9f27ed360cd8a4246ac 100644 --- a/src/gnss_utils.cpp +++ b/src/gnss_utils.cpp @@ -1,71 +1,69 @@ -#include "../include/gnss_utils.h" +#include "gnss_utils/gnss_utils.h" -using namespace GNSSUtils; - -/******************************* RECEIVER CLASS *******************************************/ - -Receiver::Receiver() -{ - -} - -Receiver::~Receiver() -{ - -} - - -/* - Observation - */ - -void Receiver::clearObservations() -{ - _obsVector.clear(); -} - -void Receiver::pushObservation(obsd_t obs) -{ - _obsVector.push_back(obs); -} - -std::vector<obsd_t> Receiver::getObservations() -{ - return this->_obsVector; -} - - -/* - Navigation - */ - -void Receiver::clearNavigation() +namespace GNSSUtils { - _navVector.clear(); -} + GNSSUtils::getPosOutput getPos(const std::shared_ptr<GNSSUtils::Observations> & _observations, + const std::shared_ptr<GNSSUtils::Navigation> & _navigation) + { + // Remove duplicated satellites + uniqnav(&(_navigation->getNavigation())); + + // Define processing options + prcopt_t prcopt = prcopt_default; + prcopt.mode = PMODE_SINGLE; + prcopt.soltype = 0; + prcopt.nf = 1; + prcopt.navsys = SYS_GPS; + //prcopt.elmin = 1.05; // 60 degrees = 1.05 rad + prcopt.sateph = EPHOPT_BRDC; + prcopt.ionoopt = IONOOPT_OFF; + prcopt.tropopt = TROPOPT_OFF; + prcopt.dynamics = 0; + prcopt.tidecorr = 0; + prcopt.sbascorr = SBSOPT_FCORR; + + // Define error msg + char msg[128] = ""; + + GNSSUtils::getPosOutput output; + sol_t sol; + sol = {{0}}; + + output.pos_stat = pntpos(&(_observations->getObservations()[0]), _observations->getObservations().size(), + &(_navigation->getNavigation()), + &prcopt, &sol, NULL, NULL, msg); + + output.time = sol.time.time; + output.time = sol.time.sec; + output.pos = Eigen::Map<Eigen::Vector3d>(sol.rr); + output.vel = Eigen::Map<Eigen::Vector3d>(&sol.rr[3]); + output.pos_covar << sol.qr[0], sol.qr[3], sol.qr[5], + sol.qr[3], sol.qr[1], sol.qr[4], + sol.qr[5], sol.qr[3], sol.qr[2]; + + // XXX: segmentation fault here. + // if (sol.dtr != NULL) + // { + // output.rcv_bias << sol.dtr[0], sol.dtr[1], sol.dtr[2], sol.dtr[3], sol.dtr[4], sol.dtr[5]; + // } + + output.type = sol.type; + output.stat = sol.stat; + output.ns = sol.ns; + output.age = sol.age; + output.ratio = sol.ratio; + output.lat_lon = ecefToLatLon(output.pos); + + return output; + } + + Eigen::Vector3d ecefToLatLon(const Eigen::Vector3d & _ecef) + { + double pos[3]; + ecef2pos(&_ecef(0), pos); + + return Eigen::Map<Eigen::Vector3d>(pos); + } -void Receiver::pushNavigation(nav_t nav) -{ - _navVector.push_back(nav); -} -std::vector<nav_t> Receiver::getNavigation() -{ - return this->_navVector; } - - - - - - - -int Receiver::getSPP(double *azel, char *msg) -{ - obsd_t *obs = &this->_obsVector[0]; - int n = this->_obsVector.size(); - - return int pntpos(*obs, n, nav_t *nav, *opt, *sol, *azel, *ssat, *msg) -} - - - - - - diff --git a/src/navigation.cpp b/src/navigation.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0bdf9edee36de392231cbee5b9fbaf127a340725 --- /dev/null +++ b/src/navigation.cpp @@ -0,0 +1,165 @@ +#include "gnss_utils/navigation.h" + + +using namespace GNSSUtils; + + +Navigation::Navigation() +{} + +Navigation::~Navigation() +{ + clearNavigation(); + //free(_nav); +} + +void Navigation::clearNavigation() +{ + deleteEphemeris(); + deleteGLONASSEphemeris(); + deleteSBASEphemeris(); + deleteAlmanac(); +} + +void Navigation::setNavigation(nav_t _nav) +{ + nav_ = _nav; +} + +const nav_t & Navigation::getNavigation() const +{ + return nav_; +} + +nav_t & Navigation::getNavigation() +{ + return nav_; +} + + +/****************** Array memory management ******************/ +void Navigation::allocateEphemeris(int n_sat) +{ + + eph_t eph0 ={0,-1,-1}; + int i; + nav_.eph = (eph_t *) malloc(sizeof(eph_t)*n_sat); + for (i=0;i<n_sat;i++) nav_.eph[i] = eph0; + /* + if (this->_nav->eph) + { + //_nav->eph = (eph_t *)realloc(_nav->eph, 2 * MAXSAT * sizeof(eph_t)); + } + + else + { + this->_nav->eph = (eph_t *) malloc(2 * MAXSAT * sizeof(eph_t)); + } + */ +} +void Navigation::deleteEphemeris() +{ + free(nav_.eph); +} + +void Navigation::allocateGLONASSEphemeris(int n_sat) +{ + geph_t geph0={0,-1}; + int i; + nav_.geph = (geph_t *)malloc(sizeof(geph_t)*n_sat); + /* + for (i=0;i<NSATGLO ;i++) _nav.geph[i] = geph0; + + if (this->_nav->geph) + { + //_nav->geph = (geph_t *)realloc(_nav->geph, NSATGLO * sizeof(geph_t)); + } + + else + { + this->_nav->geph = (geph_t *) malloc(2 * NSATGLO * sizeof(geph_t)); + } + */ + +} +void Navigation::deleteGLONASSEphemeris() +{ + free(nav_.geph); + // if (_nav->geph) + // { + // free(_nav->geph); + // } + // + // else + // { + // // Do nothing + // } + // +} + +void Navigation::allocateSBASEphemeris(int n_sat) +{ + seph_t seph0={0}; + int i; + + nav_.seph = (seph_t *)malloc(sizeof(seph_t)*n_sat); + for (i=0; i<n_sat; i++) nav_.seph[i] = seph0; + /* + if (this->_nav->seph) + { + //_nav->seph = (seph_t *)realloc(_nav->seph, NSATSBS * sizeof(seph_t)); + } + + else + { + this->_nav->seph = (seph_t *) malloc(2 * NSATSBS * sizeof(seph_t)); + } + */ +} +void Navigation::deleteSBASEphemeris() +{ + free(nav_.seph); + // if (_nav->seph) + // { + // free(_nav->seph); + // } + // + // else + // { + // // Do nothing + // } +} + +void Navigation::allocateAlmanac(int n_sat) +{ + alm_t alm0 ={0,-1}; + int i; + + nav_.alm = (alm_t *)malloc(sizeof(alm_t)*n_sat); + for (i=0; i<n_sat; i++) nav_.alm[i] = alm0; + /* + if (this->_nav->alm) + { + //_nav->alm = (alm_t *)realloc(_nav->alm, MAXSAT * sizeof(alm_t)); + } + + else + { + this->_nav->alm = (alm_t *) malloc(2 * MAXSAT * sizeof(alm_t)); + } + */ +} +void Navigation::deleteAlmanac() +{ + free(nav_.alm); + + // if (_nav->alm) + // { + // free(_nav->alm); + // } + // + // else + // { + // // Do nothing + // } +} diff --git a/src/observations.cpp b/src/observations.cpp new file mode 100644 index 0000000000000000000000000000000000000000..db7529d4d7ad37a518f141057b7e120322bb7952 --- /dev/null +++ b/src/observations.cpp @@ -0,0 +1,29 @@ +#include "gnss_utils/observations.h" + +using namespace GNSSUtils; + + +Observations::Observations() +{ + +} + +Observations::~Observations() +{ + this->obs_vector_.erase(obs_vector_.begin(), obs_vector_.end()); +} + +void Observations::clearObservations() +{ + this->obs_vector_.clear(); +} + +void Observations::pushObservation(obsd_t obs) +{ + this->obs_vector_.push_back(obs); +} + +std::vector<obsd_t> Observations::getObservations() +{ + return this->obs_vector_; +}