diff --git a/Findgnss_utils.cmake b/Findgnss_utils.cmake new file mode 100644 index 0000000000000000000000000000000000000000..85306e55c56ff0aea7537dcf31d091f2a426d9dc --- /dev/null +++ b/Findgnss_utils.cmake @@ -0,0 +1,21 @@ +#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_LIBRARY(gnss_utils_LIBRARY + NAMES gnss_utils + PATHS /usr/lib /usr/local/lib /usr/local/lib) + +IF (gnss_utils_INCLUDE_DIR AND gnss_utils_LIBRARY) + SET(gnss_utils_FOUND TRUE) +ENDIF (gnss_utils_INCLUDE_DIR AND gnss_utils_LIBRARY) + +IF (gnss_utils_FOUND) + IF (NOT gnss_utils_FIND_QUIETLY) + MESSAGE(STATUS "Found gnss_utils: ${gnss_utils_LIBRARY}") + ENDIF (NOT gnss_utils_FIND_QUIETLY) +ELSE (gnss_utils_FOUND) + IF (gnss_utils_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find gnss_utils") + ENDIF (gnss_utils_FIND_REQUIRED) +ENDIF (gnss_utils_FOUND) + diff --git a/include/gnss_utils.h b/include/gnss_utils.h index 05ac10ee62154a129af6bf1fb3b0f41534bce217..0c5b6ed4320ee047358ce6f0c56592714b069f7d 100644 --- a/include/gnss_utils.h +++ b/include/gnss_utils.h @@ -5,54 +5,82 @@ #include <iostream> #include <memory> +#include "observation.h" + extern "C" { - #include "/home/jmarti/RTKLIB/src/rtklib.h" + #include "/home/jlaplaza/RTKLIB/src/rtklib.h" } namespace GNSSUtils { - class Observation - { - public: - // Constructor - Observation(); - - // Constructor overloaded - Observation(int sat, int rcv); - - // Destructor - ~Observation(); - - // Public API - - private: - gtime_t _time; // Receiver sampling time - int _sat; // Satellite number - int _rcv; // Receiver number - std::vector<int> _SNR; - std::vector<int> _LLI; - std::vector<int> _code; - std::vector<double> _L; - std::vector<double> _P; - std::vector<double> _D; - }; - class Receiver { - public: - // Constructor & Destructor - Receiver(); - ~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; - // Public objects + // rtklib-like attribute to represent the satellite status for a given epoch + std::vector<ssat_t> _ssat; - // Public methods - void clearObservations(); + - void pushObservation(GNSSUtils::Observation obs); - private: - std::vector<Observation> _obsVector; + }; } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9cb24f718d61f24015616d1865977a3d4283d937..cc0421b22732bbc4d4f41d7d6415b8bdb0175d6f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,8 +1,8 @@ # driver source files -SET(sources gnss_utils.cpp) +SET(sources gnss_utils.cpp observation.cpp) # application header files -SET(headers ../include/gnss_utils.h) +SET(headers ../include/gnss_utils.h ../include/observation.h) # RTKLIB INCLUDE (${PROJECT_SOURCE_DIR}/cmake_modules/FindRTKLIB.cmake) @@ -27,9 +27,11 @@ ADD_LIBRARY(gnss_utils SHARED ${sources}) TARGET_LINK_LIBRARIES(gnss_utils ${Boost_LIBRARIES}) # Installing -INSTALL(TARGETS +INSTALL(TARGETS gnss_utils RUNTIME DESTINATION bin LIBRARY DESTINATION /usr/local/lib ARCHIVE DESTINATION lib) 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 new file mode 100644 index 0000000000000000000000000000000000000000..ece32987fb14d662a1e2bef7d9f0d848dbb7f2f0 --- /dev/null +++ b/src/examples/CMakeLists.txt @@ -0,0 +1,4 @@ +# 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 new file mode 100644 index 0000000000000000000000000000000000000000..8fd4243b068ee72957dfd3bf6a81682e9b367b6a --- /dev/null +++ b/src/examples/gnss_utils_test.cpp @@ -0,0 +1,40 @@ +#include "../../include/gnss_utils.h" +#include "../../include/observation.h" +#include <iostream> + +using namespace GNSSUtils; + +int main(int argc, char *argv[]) +{ + // 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; +} diff --git a/src/gnss_utils.cpp b/src/gnss_utils.cpp index c489d3e03f37ec26ae060d6221159049c5117cd9..16f173b9ee18f2a690af3dbd67574c852d222b89 100644 --- a/src/gnss_utils.cpp +++ b/src/gnss_utils.cpp @@ -2,45 +2,70 @@ using namespace GNSSUtils; -// XXX: Separate Classes into different .cpp .h files +/******************************* RECEIVER CLASS *******************************************/ -// OBSERVATION METHODS +Receiver::Receiver() +{ + +} -Observation::Observation() +Receiver::~Receiver() { } -Observation::Observation(int sat, int rcv) + +/* - Observation - */ + +void Receiver::clearObservations() +{ + _obsVector.clear(); +} + +void Receiver::pushObservation(obsd_t obs) { - this->_sat = sat; - this->_rcv = rcv; + _obsVector.push_back(obs); } -Observation::~Observation() +std::vector<obsd_t> Receiver::getObservations() { -// + return this->_obsVector; } -// RECEIVER METHODS +/* - Navigation - */ -Receiver::Receiver() +void Receiver::clearNavigation() { - + _navVector.clear(); } -Receiver::~Receiver() +void Receiver::pushNavigation(nav_t nav) { - + _navVector.push_back(nav); } -void Receiver::clearObservations() +std::vector<nav_t> Receiver::getNavigation() { - _obsVector.clear(); + return this->_navVector; } -void Receiver::pushObservation(GNSSUtils::Observation obs) + + + + + + +int Receiver::getSPP(double *azel, char *msg) { - _obsVector.push_back(obs); + obsd_t *obs = &this->_obsVector[0]; + int n = this->_obsVector.size(); + + return int pntpos(*obs, n, nav_t *nav, *opt, *sol, *azel, *ssat, *msg) } + + + + + +