pub mod geometric_control;
pub mod quaternion;
pub mod se3;
pub mod so3;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GeoError {
Singular,
InvalidRotation,
NotConverged,
}
impl core::fmt::Display for GeoError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Self::Singular => write!(f, "GeoError: singular matrix or zero-norm vector"),
Self::InvalidRotation => {
write!(f, "GeoError: matrix/quaternion is not a valid rotation")
}
Self::NotConverged => write!(f, "GeoError: iterative algorithm did not converge"),
}
}
}
pub use so3::{hat, rotation_error, vee, SO3};
pub use quaternion::{QuatKinematics, UnitQuat};
pub use se3::{transform_twist, transform_wrench, Twist, Wrench, SE3};
pub use geometric_control::{
GeometricConfig, GeometricController, GeometricRef, QuadRotorGeomState,
};