Publish compressed image.

This commit is contained in:
James Pace 2026-01-05 10:49:39 -05:00
parent 01b13b7afd
commit 1c50e01ed1
1 changed files with 11 additions and 10 deletions

View File

@ -1,6 +1,6 @@
#include <rclcpp/rclcpp.hpp> #include <rclcpp/rclcpp.hpp>
#include <image_transport/image_transport.hpp>
#include <sensor_msgs/msg/image.hpp> #include <sensor_msgs/msg/image.hpp>
#include <sensor_msgs/msg/compressed_image.hpp>
#include <std_msgs/msg/header.hpp> #include <std_msgs/msg/header.hpp>
#include <cv_bridge/cv_bridge.hpp> #include <cv_bridge/cv_bridge.hpp>
@ -18,35 +18,36 @@ namespace j7s {
public: public:
ImagePublisher(const rclcpp::NodeOptions& options); ImagePublisher(const rclcpp::NodeOptions& options);
private: private:
image_transport::ImageTransport m_transport; std::shared_ptr<rclcpp::Publisher<sensor_msgs::msg::Image>> m_publisher;
image_transport::Publisher m_publisher; std::shared_ptr<rclcpp::Publisher<sensor_msgs::msg::CompressedImage>> m_compressedPublisher;
rclcpp::TimerBase::SharedPtr m_timer; rclcpp::TimerBase::SharedPtr m_timer;
sensor_msgs::msg::Image::SharedPtr draw_image(); std::tuple<sensor_msgs::msg::Image::SharedPtr, sensor_msgs::msg::CompressedImage::SharedPtr> draw_image();
}; };
}; };
namespace j7s { namespace j7s {
ImagePublisher::ImagePublisher(const rclcpp::NodeOptions& options): ImagePublisher::ImagePublisher(const rclcpp::NodeOptions& options):
Node("image_publisher", options), Node("image_publisher", options),
m_transport(std::shared_ptr<rclcpp::Node>(this)), m_publisher(this->create_publisher<sensor_msgs::msg::Image>("image", 1)),
m_publisher(m_transport.advertise("image", 1)), m_compressedPublisher(this->create_publisher<sensor_msgs::msg::CompressedImage>("image/compressed", 1)),
m_timer{} m_timer{}
{ {
m_timer = this->create_timer(10ms, [this]() -> void { m_timer = this->create_timer(10ms, [this]() -> void {
const auto msg = draw_image(); const auto [image, compressedImage] = draw_image();
m_publisher.publish(msg); m_publisher->publish(*image);
m_compressedPublisher->publish(*compressedImage);
}); });
} }
sensor_msgs::msg::Image::SharedPtr ImagePublisher::draw_image() std::tuple<sensor_msgs::msg::Image::SharedPtr, sensor_msgs::msg::CompressedImage::SharedPtr> ImagePublisher::draw_image()
{ {
cv::Mat mat = cv::Mat::zeros(200, 200, CV_8UC3); cv::Mat mat = cv::Mat::zeros(200, 200, CV_8UC3);
std_msgs::msg::Header header; std_msgs::msg::Header header;
header.stamp = this->now(); header.stamp = this->now();
cv_bridge::CvImage image(header, "mono8", mat); cv_bridge::CvImage image(header, "mono8", mat);
return image.toImageMsg(); return std::tuple(image.toImageMsg(), image.toCompressedImageMsg());
} }
}; };