ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

ROS can not publish 2D arrays. Alternatively you can publish a 1D array (use message int32[] data)

import rospy
import numpy as np

from iot_humans_track.msg import int_array1d

if __name__ == "__main__":
rospy.init_node('pub', anonymous=True)

data = np.array([[1,2,3], [4,5,6]])

#Convert to 1d array
data_1d = np.reshape(data,6) 

puber = rospy.Publisher('topic', int_array1d, queue_size=10)
while not rospy.is_shutdown():
    puber.publish(data_1d)

and convert it later as follows:

import rospy
import numpy as np
from iot_humans_track.msg import int_array1d

def callback(msg):

    data_2d = np.reshape(msg.data,(-1,3))
    print data_2d

if __name__ == "__main__":
    rospy.init_node('sub', anonymous=True)
    sub_node = rospy.Subscriber('topic', int_array1d, callback, queue_size=10) 
    rospy.spin()