ros同时接收多话题并发布
2017-12-04 11:03
211 查看
ros同时接收多话题并发布
实现接收两个topic,并发布一个topic,采用的是ros多线程的方法解决。该节点代码
#include <ros/ros.h> #include "std_msgs/String.h" #include <boost/thread.hpp> #include <sstream> class SubscribeAndPublish { public: SubscribeAndPublish() { count = 0; //Topic you want to publish pub_ = n_.advertise<std_msgs::String>("/chatter_pub", 1000); //Topic1 you want to subscribe sub_ = n_.subscribe("chatter1", 10, &SubscribeAndPublish::callback1, this); //Topic2 you want to subscribe sub2_ = n_.subscribe("chatter2", 10, &SubscribeAndPublish::callback2, this); } void callback1(const std_msgs::String::ConstPtr& msg1) { ROS_INFO("I heard: [%s]", msg1->data.c_str()); //.... do something with the input and generate the output... std::stringstream ss; ss << "Pub: hello world " << count; output.data = ss.str(); pub_.publish(output); ROS_INFO("%s", output.data.c_str()); ++count; } void callback2(const std_msgs::String::ConstPtr& msg2); private: ros::NodeHandle n_; ros::Publisher pub_; ros::Subscriber sub_; ros::Subscriber sub2_; std_msgs::String output; int count; };//End of class SubscribeAndPublish int main(int argc, char **argv) { //Initiate ROS ros::init(argc, argv, "subscribe_and_publish"); //Create an object of class SubscribeAndPublish that will take care of everything SubscribeAndPublish test; //ros::spin(); ros::MultiThreadedSpinner s(2); //多线程 ros::spin(s); return 0; } void SubscribeAndPublish::callback2(const std_msgs::String::ConstPtr& msg2) { ROS_INFO("I heard: [%s]", msg2->data.c_str()); ros::Rate loop_rate(0.5);//block chatterCallback2() 0.5Hz loop_rate.sleep(); }
附:发布chatter1
#include "ros/ros.h" #include "std_msgs/String.h" #include <sstream> int main(int argc, char **argv) { ros::init(argc, argv, "talker1"); ros::NodeHandle n; ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter1", 1000); ros::Rate loop_rate(10); int count = 0; while (ros::ok()) { std_msgs::String msg; std::stringstream ss; ss << "chatter1: hello world " << count; msg.data = ss.str(); ROS_INFO("%s", msg.data.c_str()); chatter_pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); ++count; } return 0; }
发布chatter2
#include "ros/ros.h" #include "std_msgs/String.h" #include <sstream> int main(int argc, char **argv) { ros::init(argc, argv, "talker2"); ros::NodeHandle n; ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter2", 1000); ros::Rate loop_rate(10); int c 4000 ount = 0; while (ros::ok()) { std_msgs::String msg; std::stringstream ss; ss << "chatter2: hello world " << count; msg.data = ss.str(); ROS_INFO("%s", msg.data.c_str()); chatter_pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); ++count; } return 0; }
两个chatter一样,测试学习用而已。
相关文章推荐
- 我的ROS入门(五):总算搞通ROS的服务节点订阅发布消息话题了
- ROS实战之节点发布/接收图片
- ROS:三个节点相互传递消息,每个节点都可以同时发布和订阅主题
- ROS-消息发布与接收
- ROS(一):使用python创建消息发布及接收node
- ROS中节点在每次接收到消息之后都发布一条消息的反馈topic
- Python和C++程序发布和订阅ROS话题
- 使用Qt界面在局域网下做ROS话题发布
- dwr 实现发布公告功能(服务器发送,客户端全部可以同时接收)
- ROS:两个节点同时具有发布和订阅图像信息的功能
- react-router 父子路由同时要接收 params 的写法
- ROS(二):读取摄像头图像节点并发布topic以及订阅
- ROS进阶学习手记 9 -- 写 tf 的发布器
- ROS学习<四> 发布与订阅,服务与客户(C++)
- ros话题
- Storm同时接收多个源(spout和bolt)
- Tomcat同时发布多个应用的配置
- Sqlite数据库和apk应用同时发布
- 在ros中使用rplidar Laser发布scan数据--25
- 如何在ROS下编写自己的节点来订阅话题(C++)