ros1学习记录————话题通信

ros1学习之发布订阅

简单的发布订阅std_msg string

实现流程:如下

发布流程
        实现流程:
        1.导包 
        2.初始化 ROS 节点:命名(唯一)
        3.实例化 发布者 对象
        4.组织被发布的数据,并编写逻辑发布数据

订阅流程
        实现流程:
        1.导包 
        2.初始化 ROS 节点:命名(唯一)
        3.实例化 订阅者 对象
        4.处理订阅的消息(回调函数)
        5.设置循环调用回调函数

 代码部分:

发布方实现

#! /usr/bin/env python

import rospy
from std_msgs.msg import String



if __name__ == "__main__":
    
    rospy.init_node("sandai")    #初始化节点
    pub = rospy.Publisher("che",String,queue_size=10)  #发布
    #发布逻辑
    # 1、创建数据
    msg = String()

    rate = rospy.Rate(1) 设置频率1s/次
    count = 0
    # 2、循环发布数据
    while not rospy.is_shutdown():
        count+=1
        msg.data = "hello" + str(count)  #创建数据

        pub.publish(msg)
        rospy.loginfo("发布的数据:%s",msg.data)
        rate.sleep()

订阅方实现:

#! /usr/bin/env python
import rospy
from std_msgs.msg import String


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


if __name__ == "__main__":
    rospy.init_node("huahau")

    sub = rospy.Subscriber("che",String,domsg,queue_size=10)

    rospy.spin()

 自定义的msg消息发布和订阅

首先需要在功能包下面创建一个msg文件夹,然后需要修改cmakelist.txt,package.xml文件的内容,具体如何修改参考这部分:ros1——noetic版本 细节性配置记录(python)-CSDN博客

msgs只是简单的文本文件,每行具有字段类型和字段名称,可以使用的字段类型有:

  • int8, int16, int32, int64 (或者无符号类型: uint*)

  • float32, float64

  • string

  • time, duration

  • other msg files

  • variable-length array[] and fixed-length array[C]

这里在自定义完文件夹并且编译之后,如果用vscode,可以选择添加路径到setting.json里去

{
    "python.autoComplete.extraPaths": [
        "/opt/ros/noetic/lib/python3/dist-packages",
        "/xxx/yyy工作空间/devel/lib/python3/dist-packages"
    ]
}

实现逻辑:

第一步:定义消息

string name
uint16 age
float64 height

第二步:上代码!!!

发布方实现:

#! /usr/bin/env python

import rospy
from plumbing_pub_sub.msg import Person  从功能包中导入 from 功能包名.msg import 消息名称

if __name__=="__main__":

    rospy.init_node("Person")
    pub = rospy.Publisher("person",Person,queue_size=10)
    #创建数据
    person = Person()
    person.name="奥特曼"
    person.age = 18
    person.height = 1.85

    rate = rospy.Rate(1)
    while not rospy.is_shutdown():
        pub.publish(person)
        rospy.loginfo("发布的消息为:%s,%d,%f",person.name,person.age,person.height)
        rate.sleep()

订阅方实现:

#! /usr/bin/env python
import rospy
from plumbing_pub_sub.msg import Person

def doperson(person):
    rospy.loginfo("订阅的数据为:%s,%d,%f",person.name,person.age,person.height)

if __name__ == "__main__":
    rospy.init_node("daye")

    sub = rospy.Subscriber("person",Person,doperson)

    rospy.spin()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值