neka-nat / ros_np_multiarray

Convert between numpy ndarray and ros multiarray
16 stars 5 forks source link

ROS2 compatibility #4

Open YoushaaMurhij opened 1 year ago

YoushaaMurhij commented 1 year ago

Hi, I am trying to use this package to send np arrays using ROS2 but got this error:

[inference.py-1]   File "/home/docker_gnn/colcon_ws/install/_gnn/lib/_gnn/inference.py", line 363, in lidar_callback
[inference.py-1]     cur_msg.array = rnm.to_multiarray_f32(cur_traj.astype('float32'))
[inference.py-1]   File "/home/docker_gnn/.local/lib/python3.10/site-packages/ros_np_multiarray/ros_np_multiarray.py", line 11, in _numpy_to_multiarray
[inference.py-1]     multiarray.layout.dim = [MultiArrayDimension('dim%d' % i,
[inference.py-1]   File "/home/docker_gnn/.local/lib/python3.10/site-packages/ros_np_multiarray/ros_np_multiarray.py", line 11, in <listcomp>
[inference.py-1]     multiarray.layout.dim = [MultiArrayDimension('dim%d' % i,
[inference.py-1] TypeError: MultiArrayDimension.__init__() takes 1 positional argument but 4 were given

PS: Everything works fine with ROS1 Any suggestions? Thanks

YoushaaMurhij commented 1 year ago

A work around is to use:

    multiarray.layout.dim = [MultiArrayDimension() for i in range(np_array.ndim)];

    for i, (name, size, stride) in enumerate((('dim%d' % i, np_array.shape[i], np_array.shape[i] * np_array.dtype.itemsize) for i in range(np_array.ndim))):
        multiarray.layout.dim[i].label = name
        multiarray.layout.dim[i].size = size
        multiarray.layout.dim[i].stride = stride
YoushaaMurhij commented 1 year ago

Is there a better way to fix this problem? Thanks!