ros 中订阅图像话题 ++c
时间: 2024-09-28 10:15:39 浏览: 16
在ROS (Robot Operating System) 中,订阅图像话题通常涉及使用`image_transport`包提供的功能,特别是`Subscriber`类。首先,你需要包含相关的库头文件,并创建一个Subscriber实例来接收图像数据:
```cpp
#include <ros/ros.h>
#include <sensor_msgs/Image> // 引入处理图像消息所需的库
class ImageSubscriber {
public:
ImageSubscriber() {
node = ros::NodeHandle("~"); // 初始化节点
image_topic_ = node.param<std::string>("image_topic", "camera/image_raw"); // 设置图像主题名称,默认为"camera/image_raw"
subscriber = node.subscribe(image_topic_, 10, &ImageSubscriber::imageCallback, this); // 订阅并设置回调函数
}
private:
void imageCallback(const sensor_msgs::ImageConstPtr& msg) { // 回调函数
// 在这里处理接收到的image_message
cv_bridge::CvImage cvmsg;
try {
cvmsg = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8);
} catch (cv_bridge::Exception& e) {
ROS_ERROR("Error converting from ROS image message to OpenCV image: %s", e.what());
}
cv::imshow("Received Image", cvmsg.image);
}
ros::NodeHandle node;
std::string image_topic_;
ros::Subscriber subscriber;
};
int main(int argc, char **argv) {
ros::init(argc, argv, "image_subscriber");
ImageSubscriber sub;
ros::spin(); // 开始事件循环
return 0;
}
```