ROS教程中Publisher和Subscriber (Python)的说明
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)的说明相关推荐
- ROS教程四——编写Publisher和Subscriber节点(Python篇)
本教程介绍如何在python中编写发布者和订阅者节点 1.编写Publisher节点 "节点"是连接到ROS网络的可执行文件的ROS术语.在这里,我们将创建广播消息的 publis ...
- ROS教程五——运行 Publisher和Subscriber
本教程检查运行简单的发布者和订阅者. 1.运行Publisher 确保roscore已启动并运行: $ roscore catkin特别规定如果使用的是catkin,请确保在调用catkin_make ...
- ROS教程四——编写Publisher和Subscriber节点(C++篇)
本教程介绍如何使用C ++编写发布者和订阅者节点 1.编写 Publisher Node "节点"是连接到ROS网络的可执行文件的ROS术语.现在将创建一个发布者(publishe ...
- 【ROS入门学习05|自定义话题消息,并且编程实现publisher和subscriber】
这里是学习ROS第一次涉及到代码的部分.主要根据古月居视频教程整理出来的干货.本人是干货爱好者. 文章目录 前言 一.话题模型 二.自定义话题消息 1.定义msg文件 2.在功能包(learning_ ...
- ROS1学习笔记:话题中的Publisher与Subscriber(ubuntu20.04)
参考B站古月居ROS入门21讲: 发布者Publisher的编程实现 订阅者Subscriber的编程实现 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录 一.乌龟例程中 ...
- 小白学习ROS(3)创建Publisher和Subscriber节点
创建Publisher和Subscriber节点进行通讯 1.前言 在创建Publisher和Subscriber节点之前,先给介绍一个创建ROS包以及程序编写非常方便的一个ide,真的特别方便,尤其 ...
- ROS学习----Publisher与Subscriber
1.Publisher(发布者)与subscriber(订阅者)关系. Publisher的主要作用是对于指定话题发布特定数据类型的消息. 下面是利用代码实现一个节点,节点创建一个Publisher并 ...
- 话题中的Publisher和Subscriber
先运行乌龟程序 用如下命令查看例程节点关系图 $ rqt_graph 1.创建Publisher Publisher主要作用是针对指定话题发布特定数据类型消息.接下来使用代码实现一个节点,节点中创建一 ...
- ROS: Publisher and Subscriber
通过上一节编写ROS的第一个程序hello_world,我们对ROS的整个编程开发过程有了基本的了解,现在我们就来编写真正意义上的使用ROS进行节点间通信的程序.由于之前已经建好了catkin_ws这 ...
最新文章
- 3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?
- 从指南针到北斗:中国导航系统促进世界互联互通
- DeepLabv3+:语义分割领域的新高峰
- 为什么用 php widget,13.6 Widget扩展
- 【Boost】boost库中thread多线程详解12——线程的分离与非分离
- php 图片合成,PHP中多张图片合成一张图片例子
- 深入浅出mybatis之入门使用
- JMeter 检查点之响应断言(Response Assertion)
- 0-12V的模拟量隔离模块的一些感悟
- 22条创业军规(读书)
- 那些年,Java程序员用过的开发工具
- Android 实现人脸识别检测时的扫描动画效果(二维码扫描动画效果同理)
- 织梦采集-织梦采集教程-织梦采集插件下载教程
- 数据中台各种架构图大全
- 11-hive数据查询方式
- 如何进行S6系统还原
- 网易邮箱中非常实用的工具,手机、IP等归属地
- 毕业论文是手写还是计算机,毕业论文一般是手写还是打印?
- python画图基础
- 盘点游戏场景建模师必备软件有哪些?
热门文章
- 多啦咪图虫_浏览器插件图片批量下载工具扩展插件图片下载
- 手机联系人头像包_拉杆箱早过时了,出差浙江才发现“差旅包”正火,方便又有面儿...
- 优酷怎么上传视频 优酷如何上传视频
- 【转】如何选择合适的矩阵切换器的小窍门
- Perfmon-Windows 自带检测工具(性能测试)
- JavaScript 运行原理解析
- ant design vue treeDefaultExpandAll 更换数据后没有自动展开
- localStorage.setItem()与localStorage.getItem()的使用
- 通俗解释: IaaS,PaaS和SaaS的区别
- mac电脑安装nginx+php