ros的topic:创建消息类型、发布、订阅
来源:互联网 发布:微信软件源 编辑:程序博客网 时间:2024/05/18 02:21
1、创建消息
英文网页:http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv
msg是一个文本文档,包括前缀和数据类型,前缀:
Header header 头,时间戳和所在坐标系 string child_frame_id 子坐标系(还没搞明白)每行一个数据类型,数据类型可以是:
- int8, int16, int32, int64 (plus uint*)
- float32, float64
- string 字符串
- time, duration 时间
- other msg files 其他封装消息
- variable-length array[] and fixed-length array[C] 动态数组和静态数组
(1)创建消息文件
工程中,创建msg/Student.msg
写入:
- string name
- uint8 age
- uint32 score
CMakelists.txt中添加
rosbuild_genmsg()用于生成Student.h文件
查看:rosmsg show Student
(1)初始化ros系统
(2)广播消息
- ros::Publisher chatter_pub = n.advertise<beginner_tutorials::Student>("chatter", 1000);//发布的消息类型,topic名称,缓存的消息数
(3)填充消息数据,指定频率发布
- msg.data = ss.str();//填充消息内容
- chatter_pub.publish(msg);//发布消息
- #include "ros/ros.h"
- #include "std_msgs/String.h"
- #include "beginner_tutorials/Student.h"
- #include <sstream>
- int main(int argc, char **argv)
- {
- ros::init(argc, argv, "talker");
- ros::NodeHandle n;
- ros::Publisher chatter_pub = n.advertise<beginner_tutorials::Student>("chatter", 1000);
- ros::Rate loop_rate(10);
- int count = 0;
- while (ros::ok())
- {
- beginner_tutorials::Student msg;
- std::stringstream ss;
- ss << "john" << count;
- msg.name = ss.str();
- msg.age = count%30;
- msg.score = (count*10)%100;
- ROS_INFO("%s", msg.name.c_str());
- chatter_pub.publish(msg);
- ros::spinOnce();
- loop_rate.sleep();
- ++count;
- }
- return 0;
- }
3 收听消息
(1)消息回调函数
- void chatterCallback(const beginner_tutorials::Student::ConstPtr& msg)
- ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);//订阅主题/chatter,新消息到达时,调用函数ChatterCallback
- ros::spin();//循环接收
- <pre name="code" class="cpp">#include "ros/ros.h"
- #include "std_msgs/String.h"
- #include "beginner_tutorials/Student.h"
- void chatterCallback(const beginner_tutorials::Student::ConstPtr& msg)
- {
- ROS_INFO("I heard: [%s] [%d] [%d]", msg->name.c_str(),msg->age,msg->score);
- }
- int main(int argc, char **argv)
- {
- ros::init(argc, argv, "listener");
- ros::NodeHandle n;
- ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
- ros::spin();
- return 0;
- }
- // %EndTag(FULLTEXT)%</pre><br><br>
0 0
- ros的topic:创建消息类型、发布、订阅
- ActiveMQ Topic发布订阅消息
- ActiveMQ实战之 Topic发布订阅消息
- 利用JMS Topic发布/订阅消息
- ActiveMQ实战之 Topic发布订阅消息
- ActiveMQ实战之 Topic发布订阅消息
- ActiveMQ实战之 Topic发布订阅消息
- ActiveMQ实战之 Topic发布订阅消息
- 利用JMS Topic发布/订阅消息
- ROS学习笔记(八):消息的发布与订阅
- ROS学习(-)基本概念+发布&订阅消息
- ROS下视频消息发布与订阅
- ROS中节点在每次接收到消息之后都发布一条消息的反馈topic
- ros中消息类型的创建
- ROS总结——ROS消息发布和订阅
- 创建ROS消息发布器(publisher)、订阅器(subscriber)
- ActiveMQ 发布订阅(Topic)
- 深入浅出JMS(五)--ActiveMQ Topic发布订阅消息
- java提高篇(十三)-----字符串
- Less简介
- asm.js简介
- LibSVM 在matlab中的使用
- 小强的HTML5移动开发之路(1)——HTML介绍
- ros的topic:创建消息类型、发布、订阅
- Linux Shell命令中判断目录下是否存在已知后缀名文件的命令
- C#中的委托与事件(二)
- android 设置textview中划线效果
- 寻找第四个出现了两次或者两次以上的字符串
- H.264 码流结构解析 (整理)
- Tcpdump命令使用
- linux下的文件搜索
- cocos2d-x显示中文