【问题标题】:ROS publishing array from python node来自python节点的ROS发布数组
【发布时间】:2015-07-12 16:21:00
【问题描述】:

我是 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)

【问题讨论】:

    标签: python arrays ros


    【解决方案1】:

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

    int32[] data
    

    要发布包含此消息的列表,请使用以下 sn-p:

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

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

    【讨论】:

      【解决方案2】:

      您可以对 python 使用以下方法: pub = rospy.Publisher('chatter2', Float64MultiArray, queue_size=10) data_to_send = Float64MultiArray() # the data to be sent, initialise the array data_to_send.data = array # assign the array with the value you want to send pub.publish(data_to_send)

      【讨论】:

        【解决方案3】:

        如果您确实想使用MultiArray,请尝试:

        array = []
        my_array_for_publishing = Int32MultiArray(data=array)
        

        【讨论】:

          猜你喜欢
          • 2021-09-13
          • 1970-01-01
          • 2022-08-09
          • 2021-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多