如何订阅 ROS Float32MultiArray 消息类型

如何发布 ROS Float32MultiArray 消息类型

使用 Float32MultiArray 可以帮助我们直接使用系统已有的消息类型来发送复杂的消息,这样我们就可以不用每次都定义新的消息类型了。
下面的Python程序可以帮助我们理解如何使用 Float32MultiArray

#!/usr/bin/env python
# license removed for brevity
import rospy
from std_msgs.msg import Float32MultiArray
from std_msgs.msg import MultiArrayDimension
import random

def talker():
    pub = rospy.Publisher('chatter', Float32MultiArray, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(1) # hz
	
	# 1. 创建一个 Float32MultiArray 变量
    arg = Float32MultiArray()
    
	# 2. 通过 MultiArrayDimension 定义 Float32MultiArray 中要存储的内容
	# n 维数组需要定义 n 个 MultiArrayDimension 变量
    d1 = MultiArrayDimension()
    d1.size = 1
    d1.stride = 1
    d1.label = 'time'
	
	# 2.1 把定义好的 MultiArrayDimension 变量加到 Float32MultiArray 变量中
    arg.layout.dim.append(d1)

    d2 = MultiArrayDimension()
    d2.size = 1
    d2.stride = 1
    d2.label = 'x'
    arg.layout.dim.append(d2)

    d3 = MultiArrayDimension()
    d3.size = 1
    d3.stride = 1
    d3.label = 'y'
    arg.layout.dim.append(d3)

    d4 = MultiArrayDimension()
    d4.size = 1
    d4.stride = 1
    d4.label = 'z'
    arg.layout.dim.append(d4)

    d5 = MultiArrayDimension()
    d5.size = 1
    d5.stride = 1
    d5.label = 'w'
    arg.layout.dim.append(d5)

    d6 = MultiArrayDimension()
    d6.size = 1
    d6.stride = 1
    d6.label = 't1'
    arg.layout.dim.append(d6)

    d7 = MultiArrayDimension()
    d7.size = 1
    d7.stride = 1
    d7.label = 'h1'
    arg.layout.dim.append(d7)

	# 3 为数组申请存储空间,不然你会看到 index out of range 的错误
    arg.data = [0]*7
    
    while not rospy.is_shutdown():        
        arg.data[0] = rospy.get_time()        
        for i in range(1, 6):
            arg.data[i] = random.randrange(0,10)

		# 为了简单起见我们只把前 3 个数组数据记录到了日志里
        rospy.loginfo("[%f, %d, %d]" % (arg.data[0], arg.data[1], arg.data[2]))
        pub.publish(arg)
        rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

surfirst

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

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

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

打赏作者

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

抵扣说明:

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

余额充值