p045-50话题通信-发布方与订阅方

图1 框架

运行代码

demo01_pub_p.py

#! /usr/bin/env python

#1 line 添加释伴行

'''
        1.导包
        2.初始化ROS节点
        3.创建发布者对象
        4.编写发布逻辑并发布数据

'''

import rospy
from  std_msgs.msg import String  #发布的消息类型

if __name__ == "__main__":
    #初始化ROS节点
    rospy.init_node("sanDai")
    #创建发布对象 ,话题名称che 
    pub = rospy.Publisher("che",String,queue_size=10)
    #创建数据
    msg = String()#此时数据为空
    #指定发布频率  此处1hz
    rate = rospy.Rate(1)
    #设置计数器
    count = 0
    #使用循环发布数据
    rospy.sleep(3)#除了c++外,python也有数据丢失问题:
    #1.先启动发布,再启动订阅 ,数据丢失较严重(丢5条):因为发布者已经注册并发布消息一段时间了,订阅者才订阅到数据;
    #2.先启动订阅,再启动发布,数据不太严重(丢1条):老师:可能发布是软启动,发布者在注册过程中就已经发布第一条消息了
    #但订阅者需要在发布者注册成功后才能订阅消息
    #解决方法:在发布者注册成功后,先休眠3s,才发布消息。
    while not  rospy.is_shutdown():
        count+= 1
        msg.data = "hello"+str(count)
        #发布数据
        pub.publish(msg)
        rospy.loginfo("发布的数据:%s",msg.data)#日志输出
        rate.sleep()#调用rate = rospy.Rate(1),启动休眠功能,每隔1秒醒一次,发布数据

demo02_sub_p.py

#! /usr/bin/env python
#1.导包 
import rospy
from std_msgs.msg import String
"""
    订阅流程实现:
        1.导包
        2.初始化ROS节点
        3.创建订阅者对象
        4.回调函数处理数据
        5.spin()
    
"""


def doMsg(msg):
    rospy.loginfo("我订阅的数据:%s",msg.data)

if __name__ == "__main__":
    #2.初始化 ROS 节点:命名(唯一)
    rospy.init_node("huahua")
    #3.实例化 订阅者 对象
    sub = rospy.Subscriber("che",String,doMsg,queue_size=10)
    #4.处理订阅的消息(回调函数)(回调函数处理数据)
    #5.设置循环调用回调函数#否则会订阅失败
    rospy.spin()

注意:

1.添加可执行权限

chmod +x *.py

2.CMakeLists.txt编译

catkin_install_python(PROGRAMS
  scripts/demo01_pub_p.py
  scripts/demo02_sub_p.py
  scripts/demo03_pub_person_p.py
  scripts/demo04_sub_person_p.py
  scripts/tools.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

ctrl+shift+b

参考资料:

1.ROS机器人入门(赵虚左老师ROS1_noetic)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值