transforms_io 0.1.0

IO layer for the transforms crate with ROS2 and Minot.
Documentation

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"]

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)?;

License