An open API service indexing awesome lists of open source software.

https://github.com/eric-wieser/ros_numpy

Tools for converting ROS messages to and from numpy arrays
https://github.com/eric-wieser/ros_numpy

Last synced: 11 months ago
JSON representation

Tools for converting ROS messages to and from numpy arrays

Awesome Lists containing this project

README

          

# ros_numpy
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`:

```python
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:

```python
@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

## Future work

* Add simple conversions for:

* `geometry_msgs.msg.Inertia`