gpt4 book ai didi

python - ROS 从 python 节点发布数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:06 26 4
gpt4 key购买 nike

我是 ros+python 的新手,我正在尝试从 python ros 节点发布一维数组。我使用了 Int32MultiArray 但我无法理解多数组中布局的概念。谁能给我解释一下?或者还有其他发布数组的方法吗?

谢谢。

#!/usr/bin/env python

import roslib
roslib.load_manifest('test_drone')
import numpy
import rospy
import sys
import serial
from std_msgs.msg import String,Int32,Int32MultiArray,MultiArrayLayout,MultiArrayDimension
from rospy.numpy_msg import numpy_msg
from rospy_tutorials.msg import Floats

#port = "dev/ttyS0"
#baud = 115200

#ser = serial.Serial()
#ser.port = port
#ser.baudrate = baud



################################################################################################


def main(args):
pub=rospy.Publisher('sonar_vals',Int32MultiArray,queue_size = 10)
rospy.init_node('ca_serial')
r = rospy.Rate(0.2)
while not rospy.is_shutdown():
print "LOOP running"
a = [3250,2682,6832,2296,8865,7796,6955,8236]
pub.publish(a)
r.sleep();



# try:
#data_raw = ser.readline()
# except e:
# print e
#sd = data_raw.split(',')
#a = numpy.array([sd[0],sd[1],sd[2],sd[3],sd[4],sd[5],sd[6],sd[7],sd[8],sd[9]],dtype=numpy.float32)
#if sd[0] == 777:
# pub.publish(a)
# else:
# print 'Invalid Data'




if __name__ == '__main__':
import sys, getopt
main(sys.argv)

最佳答案

*MultiArray 消息在您的情况下有点矫枉过正。我认为如果您为此创建自己的简单消息类型 IntList 会简单得多(参见 this tutorial on how to create custom messages )。 IntList.msg-文件如下所示:

int32[] data

要使用此消息发布列表,请使用以下代码段:

a = IntList()
a.data = [3250,2682,6832,2296,8865,7796,6955,8236]
pub.publish(a)

请注意,您不能直接发布列表,而必须实例化一个 IntList 对象并填充该对象的 data 成员(这适用于所有消息类型,即使你只想发布一个整数!)。

关于python - ROS 从 python 节点发布数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31369934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com