transforms_io 0.3.0

IO layer for the transforms crate with ROS2 and Minot.
docs.rs failed to build transforms_io-0.3.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: transforms_io-0.2.0

transforms_io

An IO layer for the transforms crate.

transforms_io provides ROS2 message handling for the middleware-independent transforms crate. It bridges ROS2 message types with the transform engine, supporting multiple ROS backends and Minot.

Alternatives

For roslibrust, use the roslibrust_transforms crate.

Installation

Add to your Cargo.toml:

[dependencies]
transforms_io = "*"

# Enable exactly one backend
[features]
default = []
# Choose one:
# r2r = ["transforms_io/r2r"]
# ros2-client = ["transforms_io/ros2-client"]
# mt-pubsub = ["transforms_io/mt-pubsub"]

# For Zenoh/Hiroz, use the companion crate:
# transforms_io_hiroz = { git = "https://codeberg.org/stelzo/transforms_io" }

Usage

r2r Backend

Two modes available:

Threads

use transforms_io::r2r_backend::{TfBroadcaster, TfListener};

// Create broadcaster
let broadcaster = TfBroadcaster::new(&mut node);

// Create listener (spawns blocking threads)
let listener = TfListener::new(&mut node);

// Lookup transform
let tf = listener.lookup_transform("base_link", "sensor", time)?;

Async

Enable r2r-async feature:

[dependencies]
transforms_io = { version = "0.1", features = ["r2r-async"] }
use transforms_io::r2r_backend::TfListener;

// Returns listener + two futures to spawn on your runtime
let (listener, dynamic_fut, static_fut) = TfListener::new_async(&mut node);

// Spawn on your async runtime
tokio::spawn(dynamic_fut);
tokio::spawn(static_fut);

// Use listener
let tf = listener.lookup_transform("base_link", "sensor", time)?;

ros2-client Backend

use transforms_io::ros2_client_backend::{TfBroadcaster, TfListener};

let listener = TfListener::new(&mut node);
let tf = listener.lookup_transform("map", "base_link", time)?;

mt-pubsub Backend

use transforms_io::mt_pubsub_backend::{TfBroadcaster, TfListener};
use std::sync::Arc;
use tokio::runtime::Runtime;

let rt = Arc::new(Runtime::new().unwrap());
let listener = TfListener::new(&node, rt);
let tf = listener.lookup_transform("map", "base_link", time)?;

Hiroz Backend (Companion Crate transforms_io_hiroz)

Use the transforms_io_hiroz crate and pass in your application-owned Hiroz node:

use hiroz::{Builder, context::ZContextBuilder};
use transforms_io_hiroz::{TfBroadcaster, TfListener};

let ctx = ZContextBuilder::default().build()?;
let node = ctx.create_node("tf_node").build()?;

let broadcaster = TfBroadcaster::new(&node)?;
let listener = TfListener::new(&node)?;

let tf = listener.lookup_transform("map", "base_link", time)?;

License