A ROS 2 middleware implementation using iceoryx for zero-copy inter-process communication via shared memory.
rmw_iceoryx is a ROS 2 middleware (RMW) implementation that integrates the iceoryx shared memory framework to enable high-performance, zero-copy data transport between ROS 2 nodes. It solves the problem of latency and CPU overhead in ROS 2 applications by eliminating data copying through efficient shared memory communication.
ROS 2 developers working on real-time, resource-constrained, or high-performance applications such as robotics, autonomous systems, or embedded platforms where low latency and minimal CPU usage are critical.
Developers choose rmw_iceoryx over other ROS 2 middleware for its zero-copy transport capability, which significantly reduces latency and CPU overhead by leveraging shared memory, especially for fixed-size messages. Its seamless integration with existing ROS 2 workspaces without rebuilding messages provides a performance boost with minimal setup.
rmw implementation for iceoryx
Enables direct data sharing via shared memory for fixed-size messages, drastically reducing latency and CPU overhead by eliminating serialization and copying, as demonstrated in the loaned message workflow.
Built on rosidl_typesupport_introspection, allowing integration without rebuilding ROS 2 messages, and supports standard CLI tools like ros2 topic and node commands from Eloquent onwards.
Leverages iceoryx's RouDi daemon to allocate and manage shared memory segments, optimizing inter-process communication for fixed-size Plain Old Data (POD) types.
Works out-of-the-box with existing ROS 2 demo nodes and tools such as rqt_graph and rviz2, facilitating easy adoption and testing in familiar workflows.
Struggles with variable-sized data types like strings or arrays, as zero-copy requires fixed memory allocation, forcing fallback to copy-based transport and negating performance benefits.
Missing key ROS 2 features such as parameter servers (ros2 param list) and bag recording, as admitted in the limitations table, limiting its use in full-fledged applications.
Requires running the RouDi daemon to manage shared memory, adding operational overhead and a potential single point of failure compared to simpler RMW implementations.
Under heavy development with features marked as incomplete or questionable (e.g., ros2 bag, tf2), which may lead to instability or breaking changes in production environments.
RMW for ROS 2 using Zenoh as the middleware
Implementation of the ROS Middleware (rmw) Interface using eProsima's Fast RTPS.
ROS 2 RMW layer for Eclipse Cyclone DDS
The ROS Middleware (rmw) Interface.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.