京东-优惠雷达
箱包品类日
嗨翻暑期档
随心所动,自在安睡
自营热卖

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

温酒书生 1年前   阅读数 102 0

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)

 

 


注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: