2015-07-12 810 views
1

我是新來的ros + python,我試圖從python ros節點發布一維數組。我用Int32MultiArray,但我不能理解多陣列布局的概念。任何人都可以解釋給我嗎?還是有任何其他方式發佈數組?ROS發佈數組從python節點

謝謝。

#!/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) 

回答

1

在你的情況下,*MultiArray信息有點矯枉過正。如果您爲此創建了自己的簡單消息類型IntList(請參閱this tutorial on how to create custom messages),我認爲它更簡單。該IntList.msg -file看起來就像如下:

int32[] data 

要發佈這個消息的列表,用下面的代碼片段:

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

注意,你不能直接公佈名單,但有實例化一個IntList對象並填充此對象的data成員(即使您只想發佈一個整數,也適用於所有消息類型!)。

+0

感謝luator你的答案的工作! –

1

如果你想使用MultiArray,嘗試:

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