ros用std_msgs发送并且接收数组数据(python)

1、问题描述

因为需要将一个数组数据发布到一个话题上,然后用另一个话题接收。
起初用from std_msgs.msg import Float32,就是把数据类型定义为Float32,然后订阅数据的时候,一直读不到数据,而且发送数据的程序会直接报错退出。然后用就想这个类型是不是只能传送一个数据,而我传送的数组有24个数据,果然,将数据改成一个,用这个类型就没什么问题,可以连续的发送和接收。找到原因就好办了。
刚开始想自己定义一个float32[]的数组,但是觉得太麻烦,往自己杂乱的程序包里面一放,肯定又是一大堆问题。想着std_msgs肯定有数组类型,不可能只有单个数据的类型。所以查了一下,有以下这么多类型
在这里插入图片描述
最后直接把类型改为了Float32MultiArray,即
from std_msgs.msg import Float32MultiArray,还是报错,然后查看这个类型的具体信息

rosmsg show std_msgs/Float32MultiArray 

在这里插入图片描述
我们只需要里面的data,所以数据发布的时候需要处理以下,如下:

data=Float32MultiArray(data=data_list)
pub.publish(data)

然后订阅话题部分还是老样子,这样就可以实现数组中的数据的发布和订阅。

2、实现代码

发布

img0 = cv.imread('/home/whp/my_robot/src/code/script/yolov5_detect/image/image1.png')
data_list=detect(img0)
rospy.init_node('yolov5_detect_data')
 pub = rospy.Publisher('data_list', Float32MultiArray,  queue_size=10)
    while not rospy.is_shutdown():
        print('start')
        data=Float32MultiArray(data=data_list)
        pub.publish(data)
        print('end')

订阅:

import rospy
from std_msgs.msg import Float32MultiArray
def yolov5_grasp():
    rospy.init_node('yolov5_grasp')
    print(2)
    sub=rospy.Subscriber("/data_list", Float32MultiArray, call_back)
    rospy.spin()
def call_back(data):
    print(data)
if __name__ == '__main__':
    yolov5_grasp()
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

这是一个图像

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

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

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

打赏作者

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

抵扣说明:

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

余额充值