ROS Python 入门学习笔记--2--发布者程序的编写
前言
在第0节中,我们尝试运行了第一个ROS程序,大家可能有疑问,这个程序究竟有什么用呢?请大家在运行小海龟例程的基础上,再新开一个终端,输入以下命令:
rqt_graph
不出意外的话,应该会弹出这样的一幅图片:
这就是我们Ros当中最常见的 订阅与发布模型 ,图中展示了两个节点 “/teleop_turtle”与“/turtlesim”之间通过话题“/turtle1/cmd_vel”进行通讯。
发布—订阅模型基于话题通讯机制,其通讯流程可以简述为以下七步:
- 发布者节点启动,向ROSMaster注册节点信息(发布的话题名等等)(RPC)
- 订阅者节点启动,向ROSMaster注册节点消息(订阅的话题名等等)(RPC)
- ROSMaster 将相同话题的发布者与订阅者之间进行匹配(向订阅者发送发布者的RPC地址信息)(RPC)
- 订阅者向发布者发送链接信息(话题名,消息类型,通信协议等)(RPC)
- 发布者接受连接请求后向订阅者发送确认信息(发布者本身的TCP地址信息)(RPC)
- 订阅者尝试与发布者建立网络连接
- 发布者向订阅者发布数据(TCP)
订阅与发布模型是一个多对多的模型,节点们可以发布同一个话题,节点们也可以订阅同一个话题。
发布者Python代码实现
我们的目标是写一个发布/turtle1/cmd_vel话题的发布者,控制我们的小海龟转圈。
首先,我们进入功能包下的scripts文件夹
cd ~/WORKSPACE_NAME/src/pkg_name/scripts
在功能包下创建一个名为“talker.py”的文件,写入以下代码(推荐使用VScode进行编辑)
代码如下,亲测可用。
#!/usr/bin/env python3
#coding = 'utf-8'
#上面这段一定要加
import turtle
import rospy
from geometry_msgs.msg import Twist
#从geometry_msg中导入Twist消息类型
def turtle_publisher():
rospy.init_node('turtle_publisher',anonymous=True)
#对节点进行初始化,命名一个叫turtle_publisher的节点
turtle_pub = rospy.Publisher('/turtle1/cmd_vel',Twist,queue_size=10)
#实例化一个发布者对象,发布的话题名为 /turtle1/cmd_vel ,消息类型为 Twist,队列长度为10
rate = rospy.Rate(10)
#设置循环的频率
while not rospy.is_shutdown():
#装载消息
cmd_msg = Twist()
cmd_msg.linear.x = 1
cmd_msg.angular.z = 0.5
turtle_pub.publish(cmd_msg)
#发布话题消息
rospy.loginfo("message have published x = %d angular z = %0.2f",cmd_msg.linear.x,cmd_msg.angular.z)
#在终端打印一份日志
rate.sleep()
#按照设置的速率进行延时
if __name__ == '__main__':
try:
turtle_publisher()
except rospy.ROSInterruptException:
pass
(初学的同学可以自己手动敲一遍试一试,千万别漏了文件开头的注释,这对我们至关重要)
之后我们还要在scripts文件夹下赋予py文件可执行权限:
chmod a+x talker.py
回到工作空间根目录,我们执行一次工作空间的编译操作:
cd ~/WORKSPACE_NAME
catkin_make
之后对环境变量进行配置(前几节已经讲过 一劳永逸的方法了,我希望大家要有一劳永逸的精神,所以这里不再赘述环境变量配置方法)
运行!
开启一个终端,然后运行:
roscore
再新开两个终端,分别运行:
rosrun turtlesim turtlrsim_node
rosrun pkg_name talker.py
如图:
启动发布者后,我们可以看到:
(小海龟开始自动转圈圈啦!)
此时我们打开节点图看一看:
这就说明我们的发布者已经成功工作啦!
恭喜各位同学,现在已经完成了第一个程序的编写。需要注意的是,由于我们使用Python进行程序编写,而Python文件的好处就是不需要进行编译,所以我们不需要配置功能包中的CMakeList.txt文件,比较方便,这也是笔者喜欢Python的一个原因。
下一节,我们将学习订阅者程序的编写。
路漫漫其修远兮,吾将上下而求索。
相关文章
- Python 学习笔记 列表 排序 xxx XXX
- Python 学习笔记 列表 for 循环 xxx XXX
- 浙江新增python编程_9月起,浙江省八年级新增Python编程课,未来编程是处理大数据的手段…「建议收藏」
- python截图识别文字_Python文字截图识别OCR工具实例解析
- 神经网络学习笔记1——BP神经网络原理到编程实现(matlab,python)[通俗易懂]
- python监控网页内容变化_使用Python监控文件内容变化代码实例
- python读取pkl_Python 读取文件
- Python量化交易学习笔记(50)——程序化交易1
- 廖雪峰的 Python 教程_python基础教程廖雪pdf
- eval在python中是什么意思_如何在Python中使用eval ?
- 《Python自然语言处理》-- 1. 概述(笔记)
- 利用Python进行数据分析笔记
- python从入门到放弃学习笔记
- python学习笔记之运算符详解编程语言
- Python学习:1.快速搭建python环境详解编程语言
- python web框架学习笔记详解编程语言
- Linux创建Python文件的步骤(linux新建python文件)
- Linux升级:升级Python到最新版本(linux升级python版本)
- Python玩转Redis:提升缓存效率(python使用redis)
- 如何在Linux中安装Python?(linux安装python)
- Python学习笔记(二)基础语法
- python网络编程学习笔记(二):socket建立网络客户端