1. 编写talker代码

vim ..../src/talker.py

#!/usr/bin/env python
# license removed for brevity
import rospy
from std_msgs.msg import String def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
#调用publisher函数 创建发布节点 ,定义数据类型,
#queue_size参数是当其接受者接受不够快造成信号堵塞中队列信息的数量限制 rospy.init_node('talker', anonymous=True)
#启动节点同时为节点命名, 若anoymous为真则节点会自动补充名字,实际名字以talker_322345等表示
#若为假,则系统不会补充名字,采用用户命名。但是一次只能有一个同名节点,若后面有一个相同listener
#名字的节点则后面的节点启动会注销前面的相同节点名。 rate = rospy.Rate(10) # 10hz
#延时的时间变量赋值,通过rate.sleep()实现延时 while not rospy.is_shutdown():
# 判定开始方式,循环发送,以服务程序跳出为终止点 一般ctrl+c也可 hello_str = "hello world %s" % rospy.get_time()
# 数据变量的内容 rospy.get_time() 是指ros系统时间,精确到0.01s
# 也可以使用 import time time.strftime('%Y%m%d%H%M%S') rospy.loginfo(hello_str)
#在运行的terminal界面info 出信息,可不加,可随意改 pub.publish(hello_str)
#发布数据 必须发布 rate.sleep()
#ros中的延时表示,也可用系统的延时 import time time.sleep(1)
#ros系统中的延时应该比ubuntu自带好好,尽量用ros的
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass

2. 编写listener代码

vim ..../src/listener.py

#!/usr/bin/env python
import rospy
from std_msgs.msg import String def callback(data):
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
#回调函数 收到的参数.data是通信的数据 默认通过这样的 def callback(data) 取出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) #启动节点同时为节点命名, 若anoymous为真则节点会自动补充名字,实际名字以 listener_322345等表示
#若为假,则系统不会补充名字,采用用户命名。但是一次只能有一个同名节点,若后面有一个相同listener
#名字的节点则后面的节点启动会注销前面的相同节点名。 rospy.Subscriber("chatter", String, callback) #启动订阅,订阅主题,及标准字符串格式,同时调用回调函数,当有数据时调用函数,取出数据 # spin() simply keeps python from exiting until this node is stopped #循环程序
rospy.spin() if __name__ == '__main__':
listener()
#函数不被用作模块调用

3. 添加权限

chmod +x ..../src/talker.py |chmod +x .../src/listener.py

4. 编译

catkin_make

5. 运行talker

rosrun exam talker.py

6. 运行listener

rosrun exam listener.py

注释:最简单的订阅与发布程序:

  • 订阅

      #!/usr/bin/env python
    import rospy
    from std_msgs.msg import String
    rospy.init_node('talker',anonymous=0)
    pub=rospy.Publiser('chatter',String)
    rate=rospy.Rate(1)
    while not rospy.is_shutdown():
    rospy.loginfo('telll myself')
    pub.publish('hello')
    rate.sleep()
  • 发布
    #!/usr/bin/env python
    import rospy
    from std_msgs.msg import String
    rospy.init_node('listener',anonymous=0)
    lis=rospy.Subscriber('chatter',String,callback)
    rospy.spin()
    def callback(data):
    rospy.loginfo(data.data)

Python写ROS 订阅与发布程序的更多相关文章

  1. 【ROS系列】使用QT编写ROS订阅、发布程序

    Linux下一直使用QT进行开发,支持cmake使得很容易导入其他工程.学习ROS过程中,很多函数名称难记,使用QT不仅可以提示补全,还为了以后开发GUI方便吧. 1.安装ros_qtc_plugin ...

  2. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  3. 如何用 Python 写一个简易的抽奖程序

    不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...

  4. 用python写个简单的小程序,编译成exe跑在win10上

    每天的工作其实很无聊,早知道应该去IT公司闯荡的.最近的工作内容是每逢一个整点,从早7点到晚11点,去查一次客流数据,整理到表格中,上交给素未蒙面的上线,由他呈交领导查阅. 人的精力毕竟是有限的,所以 ...

  5. python链接mqtt订阅与发布

    什么是mqtt: MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的"轻量级"消息协议.该协议构 ...

  6. 用 python 写一个年会抽奖小程序

    使用 pyinstaller 打包工具常用参数指南 pyinstaller -F demo.py 参数 含义 -F 指定打包后只生成一个exe格式的文件 -D –onedir 创建一个目录,包含exe ...

  7. Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)

    这道题是一道爬虫练习题,需要爬链接http://tieba.baidu.com/p/2166231880里的所有妹子图片,点进链接看一下,这位妹子是日本著名性感女演员--杉本由美,^_^好漂亮啊,赶紧 ...

  8. 用python写的推箱子搜索程序

    1 # -*- coding: gbk -*- 2 from functools import reduce 3 from copy import deepcopy 4 import re 5 def ...

  9. 使用python写的一个代码统计程序

    # encoding="utf-8" """ 统计代码行数 """ import sys import os def c ...

随机推荐

  1. [py]flask蓝图的使用

    参考 flask挺挺轻巧的, 因此玩一玩它. 如果用它做大型点的项目, 就用到了它的蓝图组织项目. 一时半会不太清楚这玩意怎么用, 得撸一撸py基础了. 我搞了个movie小的flask栗子来用用蓝图 ...

  2. (转)跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享

    在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片 ...

  3. (转载)【cocos2dx 3.x Lua] 注册事件函数详解

    出处: http://www.2cto.com/kf/201409/338235.html coocs2dx 版本 3.1.1 registerScriptTouchHandler 注册触屏事件 re ...

  4. unittest之suite测试集(测试套件)

    suite 这个表示测试集,不要放在class内,否则会提示"没有这样的测试方法在类里面 ",我觉得它唯一的好处就是调试的时候可以单独调试某个class而已,我一般不用它,调试时可 ...

  5. javascript console自动点击页面元素

    原文地址https://jingyan.baidu.com/article/0a52e3f41c0b0abf63ed726d.html 这里拿百度音乐VIP兑换页面来做演示. 首先打开百度音乐VIP兑 ...

  6. jquery 实现iframe 自适应高度

    转自: http://www.cnblogs.com/luluping/archive/2009/04/17/1437843.html 超级简单的方法,也不用写什么判断浏览器高度.宽度啥的.下面的两种 ...

  7. 剑指offer2

    请实现一个函数,将一个字符串中的字符串空格替换成“%20”.例如:“We Are Happy”转化后为“We%20Are%20Happy” 思路:把字符串转化成字符数组,判断这个字符是不是空格,如果是 ...

  8. C/S模型之TCP群聊

    说明:利用TCP协议和多线程实现群聊功能.一个服务器,多个客户端(同一个程序多次启动).客户端向服务端发送数据,由服务端进行转发到其他客户端. /服务端 // WSASever.cpp : 定义控制台 ...

  9. Java设计模式应用——模板方法模式

    所谓模板方法模式,就是在一组方法结构一致,只有部分逻辑不一样时,使用抽象类制作一个逻辑模板,具体是实现类仅仅实现特殊逻辑就行了.类似科举制度八股文,文章结构相同,仅仅具体语句有差异,我们只需要按照八股 ...

  10. Linux Touch命令的8种使用技巧

    Linux touch命令不仅可以用于在Linux上创建空文件. 您可以使用它来更改现有文件的时间戳,包括其访问权限和修改时间. 本文介绍了8种可以通过Linux终端使用touch命令的方案. 我们在 ...