#[cfg(feature = "std")]
fn main() {
use core::time::Duration;
use log::{error, info};
use transforms::{
geometry::{Point, Quaternion, Vector3},
time::Timestamp,
Registry, Transform, Transformable,
};
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("DEBUG")).init();
let mut registry = Registry::new(Duration::from_secs(10));
let time = Timestamp::now();
let mut point = Point {
position: Vector3::new(0.0, 0.0, 1.0),
orientation: Quaternion::identity(),
timestamp: time,
frame: "camera".into(),
};
info!("Created point in camera frame: {:?}", point);
let camera_to_base_t0 = Transform {
translation: Vector3::new(0.0, 1.0, 0.0),
rotation: Quaternion::identity(),
timestamp: (time - Duration::from_secs(1)).unwrap(),
parent: "base".into(),
child: "camera".into(),
};
let camera_to_base_t1 = Transform {
translation: Vector3::new(0.0, 3.0, 0.0),
rotation: Quaternion::identity(),
timestamp: (time + Duration::from_secs(1)).unwrap(),
parent: "base".into(),
child: "camera".into(),
};
let base_to_map = Transform {
translation: Vector3::new(2.0, 0.0, 0.0),
rotation: Quaternion::identity(),
timestamp: time,
parent: "map".into(),
child: "base".into(),
};
registry.add_transform(camera_to_base_t0);
registry.add_transform(camera_to_base_t1);
registry.add_transform(base_to_map);
info!("Added transforms to registry");
match registry.get_transform_for(&point, "map") {
Ok(transform) => {
info!(
"Retrieved transform from point frame to map: {:?}",
transform
);
match point.transform(&transform) {
Ok(()) => info!("Successfully transformed point to map frame: {:?}", point),
Err(e) => error!("Failed to apply transform to point: {:?}", e),
}
}
Err(e) => error!("Failed to resolve transform for point: {:?}", e),
}
}
#[cfg(not(feature = "std"))]
fn main() {
panic!("The 'std' feature must be enabled for this example.");
}