【ROS】手写消息发布器和订阅器(Python版)

这里记录使用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进行手写简单的发布器和订阅器

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值