ROS中單獨開闢執行緒接受message
阿新 • • 發佈:2019-02-11
ros::AsyncSpinner 已經可以開闢許多執行緒來接收message,但是有時候我們需要指定某個執行緒來單獨對摸個topic的message進行接收處理。
關鍵實現線上程函式save_thread_func()中,收到message後processImageGrabed()作為callback函式處理訊息。#include <ros/ros.h> #include "ros/callback_queue.h" void processImageGrabed(const sensor_msgs::Image::ConstPtr &pImage) { cv_bridge::CvImagePtr cv_ptr = cv_bridge::toCvCopy(pImage, sensor_msgs::image_encodings::BGR8); string sImageFile = image_folder + "/" + pImage->header.frame_id; cv::imwrite(sImageFile, cv_ptr->image); } void save_thread_func() { ros::NodeHandle node; ros::SubscribeOptions ops; ops.template init<sensor_msgs::Image>(_image_grabed_topic, 1000000, processImageGrabed); ros::CallbackQueue queue; ops.callback_queue = &queue; ros::Subscriber sub = node.subscribe(ops); while(node.ok()) { queue.callAvailable(ros::WallDuration(0.1)); } } int main(int argc, char **argv) { ros::init(argc, argv, "_node"); std::thread t_saveImage(save_thread_func); ros::spin(); return 0; }