Program Listing for File statepublisher_rostopic.h

Return to documentation for file (src/TopicPublisherROS/statepublisher_rostopic.h)

#ifndef STATE_PUBLISHER_ROSTOPIC_H
#define STATE_PUBLISHER_ROSTOPIC_H

#include <QObject>
#include <QtPlugin>
#include <map>
#include <ros/ros.h>
#include <ros_type_introspection/ros_introspection.hpp>
#include <tf2_ros/transform_broadcaster.h>
#include <tf2_ros/static_transform_broadcaster.h>
#include <PlotJuggler/statepublisher_base.h>
#include "shape_shifter_factory.hpp"
#include <rosbag/bag.h>

class TopicPublisherROS : public PJ::StatePublisher
{
  Q_OBJECT
  Q_PLUGIN_METADATA(IID "facontidavide.PlotJuggler3.StatePublisher")
  Q_INTERFACES(PJ::StatePublisher)

public:
  TopicPublisherROS();

  virtual ~TopicPublisherROS() override;

  virtual void updateState(double current_time) override;

  virtual const char* name() const override
  {
    return "ROS Topic Re-Publisher";
  }

  virtual bool enabled() const override
  {
    return _enabled;
  }

  virtual void play(double interval) override;

  const std::vector<QAction*>& availableActions() override;

public slots:
  virtual void setEnabled(bool enabled) override;

  void filterDialog(bool autoconfirm);

private:
  void broadcastTF(double current_time);

  std::map<std::string, ros::Publisher> _publishers;

  bool _enabled;

  ros::NodeHandlePtr _node;

  bool _publish_clock;

  std::shared_ptr<tf2_ros::TransformBroadcaster> _tf_broadcaster;
  std::shared_ptr<tf2_ros::StaticTransformBroadcaster> _tf_static_broadcaster;

  ros::Publisher _clock_publisher;

  QAction* _select_topics_to_publish;

  std::unordered_map<std::string, bool> _topics_to_publish;

  bool toPublish(const std::string& topic_name);

  double previous_time;

  int _previous_play_index;

  std::vector<QAction*> _available_actions;

  void publishAnyMsg(const rosbag::MessageInstance& msg_instance);
};

#endif  // DATALOAD_CSV_H