A client library and toolset enabling developers to write ROS 2 applications in the Rust programming language.
ROS 2 for Rust (ros2_rust) is a set of tools, including the rclrs client library and a code generator, that enables developers to write ROS 2 nodes and applications in the Rust programming language. It solves the problem of integrating Rust's safety and performance features into the ROS 2 robotics ecosystem, allowing developers to leverage ROS 2's extensive middleware while using Rust.
Robotics developers and engineers who are building ROS 2-based systems and want to utilize Rust's memory safety, concurrency features, and modern tooling. This includes teams working on performance-critical or safety-sensitive robotic applications.
Developers choose ROS 2 for Rust because it provides a fully-featured, idiomatic Rust interface for ROS 2, prioritizing safety and performance while maintaining compatibility with the broader ROS ecosystem. It offers unique advantages like zero-copy messaging via loaned messages, async support for core communication patterns, and dynamic message handling, which are not as readily available in other ROS 2 language bindings.
Rust bindings for ROS 2
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Supports all core ROS 2 features including message generation for all types, publishers, subscriptions, services, actions, and async variants, as detailed in the features list.
Includes loaned messages for zero-copy messaging and tunable QoS settings, optimizing for low-latency communication critical in robotics.
Provides modern Rust patterns like async support for actions and services, and worker/executor models for safe concurrency.
Allows for dynamic message handling and introspection at runtime, enabling flexible and adaptive node behavior.
The README explicitly states no stability guarantees due to rapid evolution, making it risky for production systems without frequent updates.
Installation requires different steps for each ROS distribution, manual cloning of repositories, and workarounds like installing extra packages (e.g., due to issue #557).
Compared to established bindings like rclcpp, the ecosystem is smaller, with missing features and ongoing development, as seen in the issue list.