diff --git a/CMakeLists.txt b/CMakeLists.txt index 940b2159ba3c82e701d5c3ec0b3d85bd459424c9..dc7fd0390a5cbdef9ceaa521b9ca6bce88300082 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -139,6 +139,7 @@ include_directories( # ) add_library(wolf_subscriber_gnss src/wolf_ros_subscriber_gnss.cpp) add_library(wolf_subscriber_gnss_fix src/wolf_ros_subscriber_gnss_fix.cpp) +add_library(wolf_subscriber_gnss_TDCP src/wolf_ros_subscriber_gnss_TDCP.cpp) ## Add cmake target dependencies of the library ## as an example, code may need to be generated before libraries @@ -167,6 +168,16 @@ target_link_libraries(wolf_subscriber_gnss ${wolfgnss_LIBRARIES} ${iri_gnss_msgs_LIBRARIES} ) +target_link_libraries(wolf_subscriber_gnss_fix + ${wolf_LIBRARIES} + ${wolfgnss_LIBRARIES} + ${iri_gnss_msgs_LIBRARIES} + ) +target_link_libraries(wolf_subscriber_gnss_TDCP + ${wolf_LIBRARIES} + ${wolfgnss_LIBRARIES} + ${iri_gnss_msgs_LIBRARIES} + ) ############# ## Install ## diff --git a/include/wolf_ros_subscriber_gnss_TDCP.h b/include/wolf_ros_subscriber_gnss_TDCP.h new file mode 100644 index 0000000000000000000000000000000000000000..251db0b02ccce2be60e731d1943d231c851977e4 --- /dev/null +++ b/include/wolf_ros_subscriber_gnss_TDCP.h @@ -0,0 +1,60 @@ +/************************** + * WOLF includes * + **************************/ +#include <core/yaml/parser_yaml.hpp> +#include <core/common/wolf.h> +#include <core/problem/problem.h> +#include <core/utils/params_server.hpp> +#include <gnss/capture/capture_gnss.h> +#include <gnss/sensor/sensor_gnss.h> + +/************************** + * ROS includes * + **************************/ +#include <ros/ros.h> +#include <iri_gnss_msgs/Observation.h> +#include <iri_gnss_msgs/Navigation.h> +#include <iri_gnss_msgs/iri_gnss_msgs_to_gnssutils.h> + +/************************** + * STD includes * + **************************/ +#include <iostream> +#include <iomanip> +#include <queue> + +/************************** + * WOLF-ROS includes * + **************************/ +#include "wolf_ros_subscriber.h" +#include "subscriber_factory.h" +#include "gnss_utils/gnss_utils.h" + +using namespace wolf; + +class SubscriberWrapperGnssTDCP : public SubscriberWrapper +{ + protected: + + ros::Subscriber sub_nav_; + std::shared_ptr<GNSSUtils::Navigation> last_nav_ptr_; + //GNSSUtils::Navigation last_nav_; + //GNSSUtils::Observations obs_; + //GNSSUtils::ComputePosOutput get_pos_res_; + + //prcopt_t prcopt_; + //bool new_obs_; + + public: + // Constructor + SubscriberWrapperGnssTDCP(const SensorBasePtr& sensor_ptr); + + virtual void initSubscriber(ros::NodeHandle& nh, const std::string& topic); + + void callbackObservation(const iri_gnss_msgs::Observation::ConstPtr& msg); + + void callbackNavigation(const iri_gnss_msgs::Navigation::ConstPtr& msg); + + static std::shared_ptr<SubscriberWrapper> create(const std::string& _unique_name, const ParamsServer& _params, const SensorBasePtr _sensor_ptr); +}; +WOLF_REGISTER_SUBSCRIBER(SubscriberWrapperGnssTDCP) diff --git a/src/wolf_ros_subscriber_gnss_TDCP.cpp b/src/wolf_ros_subscriber_gnss_TDCP.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5653d0617fcfb95e31e3c7243699923020d602d1 --- /dev/null +++ b/src/wolf_ros_subscriber_gnss_TDCP.cpp @@ -0,0 +1,54 @@ +#include "../include/wolf_ros_subscriber_gnss_TDCP.h" + +using namespace wolf; + +// Constructor +SubscriberWrapperGnssTDCP::SubscriberWrapperGnssTDCP(const SensorBasePtr& sensor_ptr) : + SubscriberWrapper(sensor_ptr) +{ + // TODO copied from TDCP_ros +} + +void SubscriberWrapperGnssTDCP::initSubscriber(ros::NodeHandle& nh, const std::string& topic) +{ + sub_ = nh.subscribe(topic+std::string("_obs"), 1, &SubscriberWrapperGnssTDCP::callbackObservation, this); + sub_nav_ = nh.subscribe(topic+std::string("_nav"), 1, &SubscriberWrapperGnssTDCP::callbackNavigation, this); +} + + +void SubscriberWrapperGnssTDCP::callbackObservation(const iri_gnss_msgs::Observation::ConstPtr& msg) +{ + ROS_INFO("callbackObs!"); + if (last_nav_ptr_==nullptr) + return; + + // TODO copied from TDCP_ros + + + +// GNSSUtils::ObservationsPtr obs_ptr = std::make_shared<GNSSUtils::Observations>(); +// GNSSUtils::fillObservation(*obs_ptr, msg); +// CaptureGnssPtr new_capture = std::make_shared<CaptureGnss>(TimeStamp(msg->header.stamp.sec, msg->header.stamp.nsec), +// sensor_ptr_, +// obs_ptr, +// last_nav_ptr_); +// new_capture->process(); +// +} + +void SubscriberWrapperGnssTDCP::callbackNavigation(const iri_gnss_msgs::Navigation::ConstPtr& msg) +{ + ROS_INFO("callbackNav!"); + + std::cout << "Ephemeris size: " << msg->eph.size() << "\n"; + last_nav_ptr_ = std::make_shared<GNSSUtils::Navigation>(); + GNSSUtils::fillNavigation(*last_nav_ptr_, msg); + last_nav_ptr_->print(); + + // TODO copied from TDCP_ros +} + +std::shared_ptr<SubscriberWrapper> SubscriberWrapperGnssTDCP::create(const std::string& _unique_name, const ParamsServer& _params, const SensorBasePtr _sensor_ptr) +{ + return std::make_shared<SubscriberWrapperGnssTDCP>(_sensor_ptr); +}