Expand description
ROS 2 client library, similar to the rclcpp or rclpy libraries, in native Rust. The underlying DDS implementation, RustDDS, is also native Rust.
§Example
use futures::StreamExt;
use ros2_client::*;
let context = Context::new().unwrap();
let mut node = context
.new_node(
NodeName::new("/rustdds", "rustdds_listener").unwrap(),
NodeOptions::new().enable_rosout(true),
)
.unwrap();
let chatter_topic = node
.create_topic(
&Name::new("/","topic").unwrap(),
MessageTypeName::new("std_msgs", "String"),
&ros2_client::DEFAULT_SUBSCRIPTION_QOS,
)
.unwrap();
let chatter_subscription = node
.create_subscription::<String>(&chatter_topic, None)
.unwrap();
let subscription_stream = chatter_subscription
.async_stream()
.for_each(|result| async {
match result {
Ok((msg, _)) => println!("I heard: {msg}"),
Err(e) => eprintln!("Receive request error: {:?}", e),
}
});
// Since we enabled rosout, let's log something
rosout!(
node,
ros2::LogLevel::Info,
"wow. very listening. such topics. much subscribe."
);
// Uncomment this to execute until interrupted.
// --> smol::block_on( subscription_stream );
Modules§
- ROS 2 Action machinery
- Some builtin interfaces for ROS2 communication Defines message types
Duration
andTime
. See builtin_interfaces - Some builtin datatypes needed for ROS2 communication Some convenience topic infos for ROS2 communication
- Message types for ROS 2 Discovery
rosout
logging data types- Defines
Message
trait, which defines data that is to be sent over Topics. - Metadata for received
Message
s, such asTimestamp
s and publisher id. - This module defines types to represent ROS 2 names for
- Rust-like representation of ROS2 Parameters
- Corresponds to package rcl_interfaces. Defines message types for Parameter manipulation.
- Module for stuff we do not want to export from top level;
- Implementation of ROS 2 Services
- Steady time has an arbitrary origin, but is guaranteed to run monotonically (i.e. non-decreasing), regardless of clock corrections or timezones.
Macros§
- Macro for writing to rosout topic.
Structs§
- AService is a means of constructing a descriptor for a Service on the fly. This allows generic code to construct a Service from the types of request and response.
- This is used to construct an ActionType implementation from pre-existing component types.
- Similar to
MessageTypeName
, but names an Action type. - Client end of a ROS2 Service
- Context communicates with other participants information in ROS2 network. It keeps track of
NodeEntitiesInfo
s. Also acts as a wrapper for a RustDDS instance. - Builder for configuring a
Context
- Basic Reliable QoS for publishing.
- Basic BestEffort QoS for subscribers
- Message metadata
- Name for
.msg
type, or a data type carried over a Topic. - Names for Topics, Services
- Node in ROS2 network. Holds necessary readers and writers for rosout and parameter events topics internally.
- Names for Nodes
- Configuration of Node This is a builder-like struct.
- Named parameter
- A ROS2 Publisher
- ROS Time with nanosecond precision
- Server end of a ROS2 Service
- Similar to
MessageTypeName
, but names a Service type. - Spinner implements Node’s background event loop.
- A ROS2 Subscription
- Same as ROSTime, except this one cannot be simulated.
- UTF-16 strings, as required by the ROS type system.
Enums§
- What went wrong in
Node
creation - DDS or ROS 2 Discovery events.
- Error when setting
Parameter
s - Rust-like representation of ROS2 ParameterValue
- Future type for waiting Readers to appear over ROS2 Topic.
- Selects how Service Requests and Responses are to be mapped to DDS.
- Future type for waiting Writers to appear over ROS2 Topic.
Statics§
Traits§
- A trait to define an Action type
- Trait to ensure Messages can be (de)serialized
- Service trait pairs the Request and Response types together. Additionally, it ensures that Response and Request are Messages (Serializable), and we have a means to name the types.