I'm new to ros+python and i'm trying to publish a 1-D array from python ros node. I used Int32MultiArray but i cant understand the concept of layout in multiarray. Can anyone explain it to me? or is there any other way of publishing an array ?
Thanks.
#!/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)
The *MultiArray
messages are a bit overkill in your case. I think it is much simpler if you create your own simple message type IntList
for this (see this tutorial on how to create custom messages). The IntList.msg
-file looks just like follows:
int32[] data
To publish a list with this message use the following snippet:
a = IntList()
a.data = [3250,2682,6832,2296,8865,7796,6955,8236]
pub.publish(a)
Note that you cannot directly publish the list but have to instantiate an IntList
object and fill the data
member of this object (this holds for all message types, even if you just want to publish a single integer!).
If you do want to use MultiArray
, try:
array = []
my_array_for_publishing = Int32MultiArray(data=array)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With