这里记录使用Python语言编写简单的ROS消息发布器和订阅器,C++版本可以参考 点击进入
使用环境:Python2.7.17
作系统:ubuntu18.04
IDE : VSCode
开发前准备
新建Python开发目录,如何建立ROS开发工作空间和功能包,可以参考 工作空间和功能包
注意文件目录,在 /test_turtorials/scripts/ 文件夹下
ROS消息发布器(talker.py)
1 代码
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
#初始化节点
rospy.init_node("talker",anonymous=True)
# 发布话题
pub=rospy.Publisher("chatter",String,queue_size=10)
# 默认10hz的频率 可动态调节时间 将所在整个循环中代码运行时间控制在10hz
rate=rospy.Rate(10)
#检测节点是否关闭
while not rospy.is_shutdown():
hello_str="hello world %s" % rospy.get_time()
#打印日志
rospy.log(hello_str)
# 发布字符串
pub.publish(hello_str)
#控制频率
rate.sleep()
if __name__=="__main__" :
try:
talker()
except rospy.ROSInterruptException:
pass
ROS消息订阅器(listener.py)
代码
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id+" I hear %s" , data.data)
def listener():
# anonymous=True 即对listener这个名字不那么严格,如果为false 则必须用listener 调用此节点
rospy.init_node("listener",anonymous=True)
rospy.Subscriber("chatter",String,callback)
rospy.spin()
if __name__=="__main__":
listener()
整体调试
1 修改talker.py 和 listener.py 的执行权限
进入代码所在文件夹,执行下面的语句
sudo chmod +x talker.py
sudo chmod +x listener.py
2 刷新ros节点
由于Python为解释型语言,一般不用编译后运行,我们新添加了 talker.py 和 listener.py 两者在原来不存在,需要使用命令进行刷新节点,使系统知道我们添加了节点
rospack profile
如果不想进行刷新,也可以直接重新打开一个命令框即可,即前提是您的系统环境变量中存在该工作空间,新终端一启动,系统路径重新加载也可以。
发布与调试
1 启动master节点
roscore
2 重启一个终端,启动发布者
rosrun test_tutorials talker.py
3 重启一个终端,启动订阅者
rosrun test_tutorials listener.py
4 重启一个终端 ,启动计算图
rosrun rqt_graph rqt_graph
以上是关于Python进行手写简单的发布器和订阅器