You want to move your robot from point A to point B. That's all you ever want to do, really. The question is, how do you model the multiple frames that exist in your environment?
Say you have the following:
In short — Frames solves for (x, y, θ)
like so:
use frames::prelude::*;
use nalgebra::{Isometry2, Vector2};
use std::f32::consts::PI;
fn main() -> Result<(), FrameError> {
let mut frames = Frames::new();
let field = Frame::new("field");
let robot = Frame::new("robot");
frames.add_frame(field, Isometry2::new(Vector2::new(0., 0.), 0.))?;
frames.add_frame(robot, Isometry2::new(Vector2::new(1., 1.), PI))?;
let x = Point::new("x");
frames.add_point_in_context(
x,
Isometry2::new(Vector2::new(7., 5.), PI),
field,
)?;
assert_eq!(
frames.get_point_in_context(x, robot)?,
Isometry2::new(Vector2::new(6., 4.), 0.)
);
Ok(())
}
- Efficient — optimized, no-nonsense calculations.
- Scalable — calculate in any dimensions.
- Type-safe — errors can be seen at compile-time.