文档章节

11.用python写一个简单消息发布器和订阅器

HuangJC
 HuangJC
发布于 2017/05/13 12:01
字数 700
阅读 279
收藏 1

11.1写一个发布器节点

“节点”是ROS网络中的可执行文件,现在我们创建一个不断广播一条信息的发布器(命名为talker)的节点

首先进入之前创建的beginner_tutorials程序包

roscd beginner_tutorials

创建一个python脚本文件目录

mkdir scripts

进入刚创建的目录

cd scripts

下载发布器例子脚本(talker.py)

wget https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/talker.py

wget是一个从网络上自动下载文件的自由工具。

使下载的文件可执行

chmod +x talker.py

chmod是用于修改linux系统下文件或目录的访问权限。

+表示增加,-表示减少

x表示可执行权限

talker.py的文件大致如下

~~

11.1.1代码解析

第1行是python惯用宣言,用于确保该文件作为python脚本执行。(必须有,尤其在linux中)

第39行,引入 rospy模块(听说使用rospy不需要catkin_make就可以运行,官方解释是你写节点就需要import rospy)

第40行,从std_msgs.msg模块中引入String类(这个引入就是为了使用到字符串消息类型)

 第43行,调用了rospy类中的publisher方法,括号中分别是话题(chatter),消息类型(String),消息大小(queue_size)

第44行,是初始化节点,官方解释是给节点赋予了名字(名字不能包含/),没有这步,它无法和ROS管理器通信。anonimous翻译是匿名。

第45行,定义了rospy每秒发布10次的频率。

第46行,是个循环,如果rospy.is_shutdown没有被关闭则进行循环中的内容(被关闭的情况比如Ctrl+c等)

第47行,赋值给hello_str这个变量

第48行,这个loginfo(str)有3个作用,第一,打印消息,第二,被写入节点日志文件中,第三,被写入rosout中(这样就可以通过rqt_console查看)。

第49行,发布消息hello_str

50行,sleep函数,等待到下一次发布时间。(10HZ,也就是等1/10秒)

因为string是一个简单的消息类型,你会想知道它是怎么发布复杂的数据类型。其实容器参数的排序是根据msg中的排序一样。你也可以直接不输入参数并直接初始化该域(暂时不知道这个域指的是啥,感觉就是创建实例的意思。)。

例子是这样的(感觉就是string是一个class,然后创建了个实例赋值给了msg,然后对实例中的变量进行赋值这样)

msg=String()
msg.data = str

或者你可以初始化部分域和让剩下的使用默认值

String(data =str)

 

 

© 著作权归作者所有

HuangJC
粉丝 0
博文 32
码字总数 39927
作品 0
佛山
私信 提问
基于Python的信号库 Blinker

环境 Python 3.6.4 简介 Blinker是一个基于Python的强大的信号库,支持一对一、一对多的订阅发布模式,支持发送任意大小的数据等等,且线程安全。 安装 使用 为单例模式 signal 使用了单例模...

流月0
2018/06/09
0
0
如何使用Django WebSocket Redis 快速搭建在线聊天室?

     一言不合就上效果图演示         项目:http://112.74.164.107:9990/   1、安装组建   redis: yum install redis/apt install redis   2、创建虚拟化环境并进入   p...

java进阶架构师
2018/12/10
0
0
伍哥原创之python开发RabbitMQ应用

【伍哥原创】 使用python开发RabbitMQ应用 (参考了RabbitMQ网站上提供的英文版本入门指南: http://www.rabbitmq.com/getstarted.html) 测试环境:CentOS 6.2 1,测试环境准备 安装RabbitM...

alex.wu
2012/08/06
3K
0
RabbitMq--AMQP高级消息队列协议--简单了解

一、安装 Rabbitmq 是用 erlang 语言写的,所以使用还要安装 Erlang。 安装 erlang 还要安装 python 与 simplejson,我环境中已经安装了 python 2.6.4,simplejson 只要 easy_install 就可以...

hanzhankang
2014/02/19
322
0
Python client for Redis 官翻文档2.10.1(一)

Python client for Redis key-value store redis针对python的客户端, github地址:https://github.com/andymccurdy/redis-py/ 安装: 虽然称redis的python客户端称为redis-py,实际安装时的......

山下狮子
2014/06/19
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
3
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
3
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
4
0
Django的ChoiceField和MultipleChoiceField错误提示,选择一个有效的选项

在表单验证时提示错误:选择一个有效的选项 例如有这样一个表单: class ProductForm(Form): category = fields.MultipleChoiceField( widget=widgets.SelectMultiple(), ...

编程老陆
昨天
6
0
Vue核心概念及特性 (一)

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 > 特点: 易用,灵活,高效,渐进式框架。 > 可以随意组合需要用到的模块 vue + components + vue-router + vuex + v...

前端优选
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部