Tools for converting ROS messages to and from numpy arrays
MIT License
Tools for converting ROS messages to and from numpy arrays. Contains two functions:
arr = numpify(msg, ...)
- try to get a numpy object from a messagemsg = msgify(MessageType, arr, ...)
- try and convert a numpy object to a messageCurrently 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=True
gives [x, y, z, 0]
geometry.msg.Point
↔ 1-D np.array
. hom=True
gives [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 numpify
or msgify
will be forwarded to your conversion function
Add simple conversions for:
geometry_msgs.msg.Inertia