use nalgebra::{Isometry3, SVector, Vector3};
pub type Frame = Isometry3<f64>;
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct Twist {
pub angular: Vector3<f64>,
pub linear: Vector3<f64>,
}
impl Twist {
pub const fn new(angular: Vector3<f64>, linear: Vector3<f64>) -> Self {
Self { angular, linear }
}
pub fn zeros() -> Self {
Self::default()
}
pub fn to_vector(self) -> SVector<f64, 6> {
SVector::from_iterator(self.angular.iter().chain(self.linear.iter()).copied())
}
}
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct Wrench {
pub torque: Vector3<f64>,
pub force: Vector3<f64>,
}
impl Wrench {
pub fn is_finite(&self) -> bool {
self.torque
.iter()
.chain(self.force.iter())
.all(|v| v.is_finite())
}
pub const fn new(torque: Vector3<f64>, force: Vector3<f64>) -> Self {
Self { torque, force }
}
pub fn zeros() -> Self {
Self::default()
}
}