use nalgebra::{Scalar, UnitQuaternion, Vector3};
use simba::simd::SimdValue;
#[derive(Debug)]
pub enum AhrsError {
AccelerometerNormZero,
MagnetometerNormZero,
}
pub trait Ahrs<N: Scalar + SimdValue> {
fn update(
&mut self,
gyroscope: &Vector3<N>,
accelerometer: &Vector3<N>,
magnetometer: &Vector3<N>,
) -> Result<&UnitQuaternion<N>, AhrsError>;
fn update_imu(
&mut self,
gyroscope: &Vector3<N>,
accelerometer: &Vector3<N>,
) -> Result<&UnitQuaternion<N>, AhrsError>;
fn update_gyro(
&mut self,
gyroscope: &Vector3<N>,
) -> &UnitQuaternion<N>;
}