Tools for converting ROS messages to and from numpy arrays
Tools for converting ROS messages to and from numpy arrays. Contains two functions:
arr = numpify(msg, ...)- try to get a numpy object from a message
msg = msgify(MessageType, arr, ...)- try and convert a numpy object to a message
Currently supports:
sensor_msgs.msg.PointCloud2↔ structured
np.array:
data = np.zeros(100, dtype=[ ('x', np.float32), ('y', np.float32), ('vectors', np.float32, (3,)) ]) data['x'] = np.arange(100) data['y'] = data['x']*2 data['vectors'] = np.arange(100)[:,np.newaxis]msg = ros_numpy.msgify(PointCloud2, data)
data = ros_numpy.numpify(msg)
sensor_msgs.msg.Image↔ 2/3-D
np.array, similar to the function of
cv_bridge, but without the dependency on
cv2
nav_msgs.msg.OccupancyGrid↔
np.ma.array
geometry.msg.Vector3↔ 1-D
np.array.
hom=Truegives
[x, y, z, 0]
geometry.msg.Point↔ 1-D
np.array.
hom=Truegives
[x, y, z, 1]
geometry.msg.Quaternion↔ 1-D
np.array,
[x, y, z, w]
geometry.msg.Transform↔ 4×4
np.array, the homogeneous transformation matrix
geometry.msg.Pose↔ 4×4
np.array, the homogeneous transformation matrix from the origin
Support for more types can be added with:
@ros_numpy.converts_to_numpy(SomeMessageClass) def convert(my_msg): return np.array(...)@ros_numpy.converts_from_numpy(SomeMessageClass) def convert(my_array): return SomeMessageClass(...)
Any extra args or kwargs to
numpifyor
msgifywill be forwarded to your conversion function
Add simple conversions for:
geometry_msgs.msg.Inertia