Program Listing for File rawlog_play_node.h

Return to documentation for file (include/rawlog_play_node.h)

/* +------------------------------------------------------------------------+
   |                             mrpt_navigation                            |
   |                                                                        |
   | Copyright (c) 2014-2024, Individual contributors, see commit authors   |
   | See: https://github.com/mrpt-ros-pkg/mrpt_navigation                   |
   | All rights reserved. Released under BSD 3-Clause license. See LICENSE  |
   +------------------------------------------------------------------------+ */

#ifndef MRPT_RAWLOG_PLAY_NODE_H
#define MRPT_RAWLOG_PLAY_NODE_H

#include <dynamic_reconfigure/server.h>
#include <mrpt/obs/CObservation.h>
#include <mrpt_msgs/ObservationRangeBeacon.h>
#include <mrpt_msgs/ObservationRangeBearing.h>
#include <nav_msgs/Odometry.h>
#include <sensor_msgs/LaserScan.h>

#include "geometry_msgs/TransformStamped.h"
#include "mrpt_rawlog/RawLogRecordConfig.h"
#include "mrpt_rawlog_play/rawlog_play.h"
#include "ros/ros.h"
#include "tf2_geometry_msgs/tf2_geometry_msgs.hpp"
#include "tf2_ros/transform_broadcaster.h"

class RawlogPlayNode : public RawlogPlay
{
   public:
    struct ParametersNode : public Parameters
    {
        static const int MOTION_MODEL_GAUSSIAN = 0;
        static const int MOTION_MODEL_THRUN = 1;
        ParametersNode();
        ros::NodeHandle node;
        void callbackParameters(
            mrpt_rawlog::RawLogRecordConfig& config, uint32_t level);
        dynamic_reconfigure::Server<mrpt_rawlog::RawLogRecordConfig>
            reconfigureServer_;
        dynamic_reconfigure::Server<
            mrpt_rawlog::RawLogRecordConfig>::CallbackType reconfigureFnc_;
        void update(const unsigned long& loop_count);
        double rate;
        std::string base_frame;
        std::string odom_frame;
        int parameter_update_skip;
    };

    RawlogPlayNode(ros::NodeHandle& n);
    ~RawlogPlayNode();
    void init();
    void loop();

   private:  // functions
    ParametersNode* param();
    bool nextEntry();
    void publishSingleObservation(const mrpt::obs::CObservation::Ptr& o);

   private:  // variables
    ros::NodeHandle n_;
    unsigned long loop_count_;
    sensor_msgs::LaserScan msg_laser_;
    mrpt_msgs::ObservationRangeBeacon msg_beacon_;
    mrpt_msgs::ObservationRangeBearing msg_landmark_;
    nav_msgs::Odometry msg_odom_;
    ros::Publisher pub_laser_;
    ros::Publisher pub_beacon_;
    ros::Publisher pub_landmark_;
    std::string odom_frame_;
    std::string base_frame_;
    tf2_ros::TransformBroadcaster tf_broadcaster_;
};

#endif  // MRPT_RAWLOG_PLAY_NODE_H