#Python实现话题的发布与订阅
首先我们的先了解ROS文件系统的基本框架,如下图所示:
由上图可知,.py文件放在工作包里面的scripts文件夹内,所以,整活!
1、在工作包内新建scripts文件夹用来存放.py文件
lzw08@ubuntu:~$ cd ros_ws
lzw08@ubuntu:~/ros_ws$ cd src/topic/
lzw08@ubuntu:~/ros_ws/src/topic$ mkdir scripts
同样,若没有工作空间则新建,这里跳过这步。
2、进入scripts文件夹,编写.py文件
lzw08@ubuntu:~/ros_ws/src/topic$ cd scripts/
#发布者
lzw08@ubuntu:~/ros_ws/src/topic/scripts$ touch ptopic.py
lzw08@ubuntu:~/ros_ws/src/topic/scripts$ gedit ptopic.py
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
import rospy
from std_msgs.msg import String
if __name__=="__main__":
rospy.init_node("ptopic_py")
pub = rospy.Publisher("ptopic",String,queue_size=10)
msg = String()
rate = rospy.Rate(1)
count = 0
while not rospy.is_shutdown():
count+=1
msg.data = str(count)+"℃"
rospy.loginfo("温度传感器A的数据是:%s",msg.data)
pub.publish(msg)
rate.sleep()
代码粘贴完直接保存,然后关闭
#订阅者
lzw08@ubuntu:~/ros_ws/src/topic/scripts$ touch stopic.py
lzw08@ubuntu:~/ros_ws/src/topic/scripts$ gedit stopic.py
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
import rospy
from std_msgs.msg import String
def topicCallback(msg):
rospy.loginfo("显⽰传感器A的数据:%s",msg.data)
if __name__=="__main__":
rospy.init_node("stopic")
pub = rospy.Subscriber("ptopic",String,topicCallback,queue_size=10)
rospy.spin()
代码粘贴完直接保存,然后关闭
两个.py文件就创建好了,与C++代码不同的是.py文件不用编译,它本身就是一个可执行的脚本文件,不用编译也就意味着不用回到上级目录去修改CMakeList.txt文件。
3、修改.py文件的权限
进入scripts文件夹单击右键,选择“Open in Terminal”,在终端打开,然后执行下图命令:
说明:“ll”是查看文件权限的命令,r、w、x分别代表可读、可写、可执行。“chmod”是修改文件权限的命令,“777”则表示把文件都设置成可读可写可执行,“*”表示所有文件。可以看到,.py文件修改前没有可执行权限,修改后就有了。
4、运行.py文件
上面说到过,.py文件不用编译就可以运行
同样,主节点还是得先运行起来:
然后回到工作空间运行.py文件,因为有两个.py文件需要运行,所以得再打开一个终端
lzw08@ubuntu:~/ros_ws/src/topic/scripts$ cd ~/ros_ws
lzw08@ubuntu:~/ros_ws$ source devel/setup.bash
lzw08@ubuntu:~/ros_ws$ rosrun topic ptopic
在新打开的另外一个终端下运行stopic.py
lzw08@ubuntu:~$ cd ros_ws
lzw08@ubuntu:~/ros_ws$ source devel/setup.bash
lzw08@ubuntu:~/ros_ws$ rosrun topic stopic.py
说明:与C++实现话题的发布与订阅类似,如果先运行stopic.py,会发现没有现象,也是因为ptopic.py 还未运行,没有发布内容,所以stopic.py 订阅不到。
rosrun命令后面跟的是工作包名和节点名,对于C++文件来说,节点名是写在CMakeList里面的那个(第137行改的内容),对于Python文化来说,节点名就是.py文件名。
5、调试
同样,Python文件也可以用qt的工具进行调试,也可以用qt的可视化工具查看发布者、订阅者以及话题之间的关系。具体过程看上一篇博文~
传送门 → #C++实现话题发布与接收
6、下课!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)