pub mod manipulator_flat;
pub mod quadrotor_flat;
pub mod unicycle_flat;
pub use manipulator_flat::{ManipulatorFlatMap, ManipulatorParams};
pub use quadrotor_flat::{FlatState, FlatTrajectory, QuadrotorFlatMap, QuadrotorFlatParams};
pub use unicycle_flat::{FlatPathTracker, UnicycleFlatMap};
use core::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FlatnessError {
InvalidDerivative,
Singular,
OutOfRange,
InvalidParameter(&'static str),
PolynomialSolver,
}
impl fmt::Display for FlatnessError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::InvalidDerivative => write!(f, "Invalid derivative order requested"),
Self::Singular => write!(f, "Singular configuration in flat map"),
Self::OutOfRange => write!(f, "Time is outside the trajectory range"),
Self::InvalidParameter(msg) => write!(f, "Invalid parameter: {msg}"),
Self::PolynomialSolver => write!(f, "Polynomial solver failed or degenerate system"),
}
}
}