Publisher和Subscriber[Python]的说明

  • 1.编写发布节点
  • 2.编写订阅节点
  • 3.编译现在的节点

1.编写发布节点

$ roscd beginner_tutorials     #切换到package文件夹下
$ mkdir scripts     # 新建存放Python脚本的文件夹
$ cd scripts     #切换
#例程中的文件下载。talker.py publisher脚本
$ wget https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/talker.py
$ chmod +x talker.py     # 对文件添加可执行指令

talker.py 文件中内容说明:

#!/usr/bin/env python
# license removed for brevity
import rospy     # 编写ROS节点,则需要导入rospy
from std_msgs.msg import String     # std_msgs.msg 导入是为了我们可以 reuse std_msgs / String消息类型(一个简单的字符串容器
#container)进行发布。def talker():#这部分代码定义了讲talker与其余ROS的接口。# 声明节点使用消息类型String发布到chatter topic 。 这里的字符串实际上是类std_msgs.msg.String#queue_size参数在ROS hydro中是新的参数 ,如果任何订户没有fast enough接收它们,则限制排队消息的数量。 在旧的ROS发行版中,只省略#这个参数pub = rospy.Publisher('chatter', String, queue_size=10)# 声明节点的名字,直到rospy有这个信息,它才能开始与ROS Master通信。# 名称必须是base name,即它不能包含任何斜杠“/”。# anonymous = True通过在NAME末尾添加随机数来确保节点具有唯一名称。rospy.init_node('talker', anonymous=True)# 此行创建Rate对象速率。# 借助其方法sleep(),它提供了一种以所需速率循环的便捷方式。 它的参数为10,我们期望每秒循环10次(处理时间不超过1/10秒)rate = rospy.Rate(10) # 10hz# 这个循环是一个相当标准的rospy构造:检查rospy.is_shutdown()标志然后工作。#检查is_shutdown()以检查程序是否应该退出(例如,如果有Ctrl-C或其他)。 在这种情况下,“work”是对pub.publish(hello_str)的#调用,它将字符串发布到chatter主题。 循环调用rate.sleep(),它sleep时间足够长,可以通过循环保持所需的速率。while not rospy.is_shutdown():hello_str = "hello world %s" % rospy.get_time()# 这个循环还调用rospy.loginfo(str),它执行三重任务:消息被打印到屏幕,它被写入Node的日志文件,并被写入rosout。# rosout对于调试非常方便:可以使用rqt_console来提取消息,而不必使用Node的输出找到控制台窗口。rospy.loginfo(hello_str)pub.publish(hello_str)rate.sleep()if __name__ == '__main__':try:talker()except rospy.ROSInterruptException:pass

除了标准的Python __main__检查之外,这还会捕获一个rospy.ROSInterruptException异常,当按下Ctrl-C或者你的节点关闭时,rospy.sleep()和rospy.Rate.sleep()方法可以抛出该异常。 引发此异常的原因是,您不会在sleep()之后意外地继续执行代码。

2.编写订阅节点

$ roscd beginner_tutorials/scripts/
$ wget https://raw.github.com/ros/ros_tutorials/kineticdevel/rospy_tutorials/001_talker_listener/listener.py
$ chmod +x listener.py

listener.py 文件中内容说明:

#!/usr/bin/env python
import rospy
from std_msgs.msg import Stringdef callback(data):rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)def listener():# In ROS, nodes are uniquely named. If two nodes with the same# node are launched, the previous one is kicked off. The# anonymous=True flag means that rospy will choose a unique# name for our 'listener' node so that multiple listeners can# run simultaneously.rospy.init_node('listener', anonymous=True)rospy.Subscriber("chatter", String, callback)# 这声明节点订阅了std_msgs.msgs.String类型的chatter主题。收到新消息时,将调用回调,并将消息作为第一个参数。# 我们也稍微改变了对rospy.init_node()的调用。 我们添加了anonymous = True关键字参数。 ROS要求每个节点都有唯一的名称。# 如果出现具有相同名称的节点,则会突然显示前一个节点。 这样可以很容易地将故障节点从网络中踢出。 anonymous = True标志告诉# rospy为节点生成一个唯一的名称,以便可以轻松运行多个listener.py节点。# spin() simply keeps python from exiting until this node is stopped# 最后添加,rospy.spin()只是让节点退出,直到节点关闭。 与roscpp不同,rospy.spin()不会影响订阅者回调函数,因为它们# 有自己的线程。rospy.spin()if __name__ == '__main__':listener()

3.编译现在的节点

使用CMake作为构建系统,即使是Python节点也必须使用它。 这是为了确保创建消息和服务的自动生成的Python代码。
转到catkin工作区并运行catkin_make:

$ cd ~/catkin_ws
$ catkin_make

测试Publisher和Subscriber (Python)

$ roscore

新开一个终端:

# In your catkin workspace
$ cd ~/catkin_ws
$ source ./devel/setup.bash
$ rosrun beginner_tutorials talker.py

再开一个终端:

# In your catkin workspace
$ cd ~/catkin_ws
$ source ./devel/setup.bash
$ rosrun beginner_tutorials listener.py

效果为:

ROS教程中Publisher和Subscriber (Python)的说明相关推荐

  1. ROS教程四——编写Publisher和Subscriber节点(Python篇)

    本教程介绍如何在python中编写发布者和订阅者节点 1.编写Publisher节点 "节点"是连接到ROS网络的可执行文件的ROS术语.在这里,我们将创建广播消息的 publis ...

  2. ROS教程五——运行 Publisher和Subscriber

    本教程检查运行简单的发布者和订阅者. 1.运行Publisher 确保roscore已启动并运行: $ roscore catkin特别规定如果使用的是catkin,请确保在调用catkin_make ...

  3. ROS教程四——编写Publisher和Subscriber节点(C++篇)

    本教程介绍如何使用C ++编写发布者和订阅者节点 1.编写 Publisher Node "节点"是连接到ROS网络的可执行文件的ROS术语.现在将创建一个发布者(publishe ...

  4. 【ROS入门学习05|自定义话题消息,并且编程实现publisher和subscriber】

    这里是学习ROS第一次涉及到代码的部分.主要根据古月居视频教程整理出来的干货.本人是干货爱好者. 文章目录 前言 一.话题模型 二.自定义话题消息 1.定义msg文件 2.在功能包(learning_ ...

  5. ROS1学习笔记:话题中的Publisher与Subscriber(ubuntu20.04)

    参考B站古月居ROS入门21讲: 发布者Publisher的编程实现 订阅者Subscriber的编程实现 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录 一.乌龟例程中 ...

  6. 小白学习ROS(3)创建Publisher和Subscriber节点

    创建Publisher和Subscriber节点进行通讯 1.前言 在创建Publisher和Subscriber节点之前,先给介绍一个创建ROS包以及程序编写非常方便的一个ide,真的特别方便,尤其 ...

  7. ROS学习----Publisher与Subscriber

    1.Publisher(发布者)与subscriber(订阅者)关系. Publisher的主要作用是对于指定话题发布特定数据类型的消息. 下面是利用代码实现一个节点,节点创建一个Publisher并 ...

  8. 话题中的Publisher和Subscriber

    先运行乌龟程序 用如下命令查看例程节点关系图 $ rqt_graph 1.创建Publisher Publisher主要作用是针对指定话题发布特定数据类型消息.接下来使用代码实现一个节点,节点中创建一 ...

  9. ROS: Publisher and Subscriber

    通过上一节编写ROS的第一个程序hello_world,我们对ROS的整个编程开发过程有了基本的了解,现在我们就来编写真正意义上的使用ROS进行节点间通信的程序.由于之前已经建好了catkin_ws这 ...

最新文章

  1. 3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?
  2. 从指南针到北斗:中国导航系统促进世界互联互通
  3. DeepLabv3+:语义分割领域的新高峰
  4. 为什么用 php widget,13.6 Widget扩展
  5. 【Boost】boost库中thread多线程详解12——线程的分离与非分离
  6. php 图片合成,PHP中多张图片合成一张图片例子
  7. 深入浅出mybatis之入门使用
  8. JMeter 检查点之响应断言(Response Assertion)
  9. 0-12V的模拟量隔离模块的一些感悟
  10. 22条创业军规(读书)
  11. 那些年,Java程序员用过的开发工具
  12. Android 实现人脸识别检测时的扫描动画效果(二维码扫描动画效果同理)
  13. 织梦采集-织梦采集教程-织梦采集插件下载教程
  14. 数据中台各种架构图大全
  15. 11-hive数据查询方式
  16. 如何进行S6系统还原
  17. 网易邮箱中非常实用的工具,手机、IP等归属地
  18. 毕业论文是手写还是计算机,毕业论文一般是手写还是打印?
  19. python画图基础
  20. 盘点游戏场景建模师必备软件有哪些?

热门文章

  1. 多啦咪图虫_浏览器插件图片批量下载工具扩展插件图片下载
  2. 手机联系人头像包_拉杆箱早过时了,出差浙江才发现“差旅包”正火,方便又有面儿...
  3. 优酷怎么上传视频 优酷如何上传视频
  4. 【转】如何选择合适的矩阵切换器的小窍门
  5. Perfmon-Windows 自带检测工具(性能测试)
  6. JavaScript 运行原理解析
  7. ant design vue treeDefaultExpandAll 更换数据后没有自动展开
  8. localStorage.setItem()与localStorage.getItem()的使用
  9. 通俗解释: IaaS,PaaS和SaaS的区别
  10. mac电脑安装nginx+php