【ROS学习笔记与思考】2.4话题通讯自定义msg调用

教程为赵虚左的天地良心ROS课程:link

话题通讯

话题通讯自定义msg调用

在第二节中我们使用的通讯内容是std_msgs里面的String格式,也就是字符串格式,现在我们可以定义任意组合类型的消息去发送接收。

需求

编写发布订阅实现,要求发布方以1HZ(每秒1次)的频率发布自定义消息,订阅方订阅自定义消息并将消息内容打印输出。

大致流程不变,只不过将String改为我们自己定义的数据类型

代码实现如下

0.vscode配置

为了方便代码提示以及误抛异常,需要先配置 vscode,将前面生成的 python 文件路径配置进 settings.json(可以在vscode左侧打开相应目录,右键点击在集成终端中打开,输入pwd,复制地址)

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

PS:这里我后面将下面analysis的加上之后才能自动提示
在这里插入图片描述

1.发布方

#! /usr/bin/env python


import rospy
from pub_sub.msg import ShoppingLists

if __name__ =="__main__":
    #初始化ros节点
    rospy.init_node("buyer")
    #创建发布者
    pub = rospy.Publisher("egg",ShoppingLists,queue_size=10)
    #创建数据,组织消息
    msg1 = ShoppingLists()
    msg1.product1_name = "egg"
    msg1.product2_name = 'tomato'

    #创建发布频率
    rate = rospy.Rate(1)

    count =0

    while not rospy.is_shutdown():
        count += 1
        msg1.num1 += 1
        msg1.num2 += 2
        #发布数据
        pub.publish(msg1)
        rate.sleep()

        #打印数据
        rospy.loginfo("买了%s %d个,%s %d个.",msg1.product1_name,msg1.num1,msg1.product2_name,msg1.num2)

2.订阅方

#! /usr/bin/env python

import rospy
from pub_sub.msg import ShoppingLists

def doMsg(msg):
    if msg.product1_name == "egg":
        rospy.loginfo("我要%d个鸡蛋",msg.num2)
    else:
        rospy.loginfo("我要%d个鸡蛋",msg.num2)
if __name__ == "__main__":
    #初始化ros节点
    rospy.init_node("egg_cook")
    #创建接受对象
    sub = rospy.Subscriber("egg_buy",ShoppingLists,doMsg,queue_size=10)
    #回调
    rospy.spin()

之后不要忘记添加可执行权限,配置CMakeLists,启动roscore,启动文件。
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薯一个蜂蜜牛奶味的愿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值