Program Listing for File publisher_ros2.h
↰ Return to documentation for file (src/TopicPublisherROS2/publisher_ros2.h)
#ifndef STATE_PUBLISHER_ROS2TOPIC_H
#define STATE_PUBLISHER_ROS2TOPIC_H
#include <QObject>
#include <QtPlugin>
#include <map>
#include <unordered_set>
#include <rclcpp/rclcpp.hpp>
#include <rclcpp/publisher.hpp>
#include <rosbag2_storage/serialized_bag_message.hpp>
#include <rosbag2_storage/storage_options.hpp>
#include <tf2_ros/transform_broadcaster.h>
#include <tf2_ros/static_transform_broadcaster.h>
#include <PlotJuggler/statepublisher_base.h>
#include "ros_parsers/ros2_parser.h"
#include "generic_publisher.h"
using MessageRefPtr = std::shared_ptr<rosbag2_storage::SerializedBagMessage>;
class TopicPublisherROS2 : public PJ::StatePublisher
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "facontidavide.PlotJuggler3.StatePublisher")
Q_INTERFACES(PJ::StatePublisher)
public:
TopicPublisherROS2();
virtual ~TopicPublisherROS2() override;
void updateState(double current_time) override;
const char* name() const override
{
return "ROS2 Topic Re-Publisher";
}
bool enabled() const override
{
return _enabled;
}
const std::vector<QAction*>& availableActions() override;
void play(double interval) override;
public slots:
void setEnabled(bool enabled) override;
void filterDialog();
private:
std::shared_ptr<rclcpp::Context> _context;
std::unique_ptr<rclcpp::executors::MultiThreadedExecutor> _executor;
std::shared_ptr<rclcpp::Node> _node;
bool _enabled;
std::shared_ptr<tf2_ros::TransformBroadcaster> _tf_broadcaster;
std::shared_ptr<tf2_ros::StaticTransformBroadcaster> _tf_static_broadcaster;
std::unordered_map<std::string, std::shared_ptr<GenericPublisher>> _publishers;
QAction* _select_topics_to_publish;
std::unordered_map<std::string, bool> _topics_to_publish;
double previous_time;
int _previous_play_index;
std::vector<TopicInfo> _topics_info;
std::vector<QAction*> _available_actions;
void broadcastTF(double current_time);
void updatePublishers();
};
#endif // STATE_PUBLISHER_ROS2TOPIC_H