Struct ramp_maker::trapezoidal::Trapezoidal [−][src]
Trapezoidal motion profile
Generates an approximation of a trapezoidal ramp, following the algorithm laid out here: http://hwml.com/LeibRamp.htm
A PDF version of that page is available: http://hwml.com/LeibRamp.pdf
This implementation makes the following simplifications:
- The unit of time used is left to the user (see “Unit of Time” below), so
the frequency variable
F
is ignored. - The initial velocity
v0
is assumed to be zero, meaning you can’t construct an instance of this struct to take over an ongoing movement.
Create an instance of this struct using Trapezoidal::new
, then use the
API defined by MotionProfile
(which this struct implements) to generate
the acceleration ramp.
Acceleration Ramp
This struct will generate a trapezoidal acceleration ramp with the following attributes:
- The velocity will always be equal to or less than the maximum velocity passed to the constructor.
- While ramping up or down, the acceleration will be an approximation of the target acceleration passed to the constructor.
Unit of Time
This code is agnostic on which unit of time is used. If you provide the target acceleration and maximum velocity in steps per second, the unit of the delay returned will be seconds.
This allows you to pass the parameters in steps per number of timer counts for the timer you’re using, completely eliminating any conversion overhead for the delay.
Type Parameter
The type parameter Num
defines the type that is used to represent the
target acceleration, maximum velocity, and delays per step. It is set to a
64-bit fixed-point number type by default.
You can override the default with f32
, f64
, or any other type from the
fixed
crate. Please note that this code uses a very naive approach
regarding its use of numeric types, which does not play well lower-accuracy
fixed-point types. Please be very careful when using any other other type
than the default or a floating-point type. The code might not even generate
a proper trapezoidal ramp, if accuracy is too low!
Please note that you need to enable support for f32
/f64
explicitly.
Check out the section on Cargo features from the documentation in the root
module for more information.
Implementations
impl<Num> Trapezoidal<Num> where
Num: Copy + One + Add<Output = Num> + Div<Output = Num> + Sqrt,
[src]
Num: Copy + One + Add<Output = Num> + Div<Output = Num> + Sqrt,
pub fn new(target_accel: Num) -> Self
[src]
Create a new instance of Trapezoidal
Accepts the target acceleration in steps per (unit of time)^2 as an argument. It must not be zero. See the struct documentation for information about units of time.
Panics
Panics, if target_accel
is zero.
Trait Implementations
impl<Num> MotionProfile for Trapezoidal<Num> where
Num: Copy + PartialOrd + Cast<u32> + Zero + One + Inv<Output = Num> + Add<Output = Num> + Sub<Output = Num> + Mul<Output = Num> + Div<Output = Num> + Ceil,
[src]
Num: Copy + PartialOrd + Cast<u32> + Zero + One + Inv<Output = Num> + Add<Output = Num> + Sub<Output = Num> + Mul<Output = Num> + Div<Output = Num> + Ceil,
type Velocity = Num
The type used for representing velocities
type Delay = Num
The type used for representing delay values
fn enter_position_mode(&mut self, max_velocity: Self::Velocity, num_steps: u32)
[src]
fn next_delay(&mut self) -> Option<Self::Delay>
[src]
fn delays(&mut self) -> Delays<'_, Self>ⓘ
[src]
fn velocities(&mut self) -> Velocities<'_, Self>ⓘNotable traits for Velocities<'r, Profile>
impl<'r, Profile> Iterator for Velocities<'r, Profile> where
Profile: MotionProfile,
Profile::Delay: Inv<Output = Profile::Velocity>, type Item = Profile::Velocity;
[src]
Notable traits for Velocities<'r, Profile>
impl<'r, Profile> Iterator for Velocities<'r, Profile> where
Profile: MotionProfile,
Profile::Delay: Inv<Output = Profile::Velocity>, type Item = Profile::Velocity;
fn accelerations<Accel>(&mut self) -> Accelerations<'_, Self, Accel>ⓘNotable traits for Accelerations<'r, Profile, Accel>
impl<'r, Profile, Accel> Iterator for Accelerations<'r, Profile, Accel> where
Profile: MotionProfile,
Profile::Delay: Copy + One + Inv<Output = Profile::Velocity> + Add<Output = Profile::Delay> + Div<Output = Profile::Delay>,
Profile::Velocity: Sub<Output = Profile::Velocity> + Div<Profile::Delay, Output = Accel>, type Item = Accel;
[src]
Notable traits for Accelerations<'r, Profile, Accel>
impl<'r, Profile, Accel> Iterator for Accelerations<'r, Profile, Accel> where
Profile: MotionProfile,
Profile::Delay: Copy + One + Inv<Output = Profile::Velocity> + Add<Output = Profile::Delay> + Div<Output = Profile::Delay>,
Profile::Velocity: Sub<Output = Profile::Velocity> + Div<Profile::Delay, Output = Accel>, type Item = Accel;
Auto Trait Implementations
impl<Num> Send for Trapezoidal<Num> where
Num: Send,
Num: Send,
impl<Num> Sync for Trapezoidal<Num> where
Num: Sync,
Num: Sync,
impl<Num> Unpin for Trapezoidal<Num> where
Num: Unpin,
Num: Unpin,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Az for T
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> CheckedAs for T
[src]
pub fn checked_as<Dst>(self) -> Option<Dst> where
T: CheckedCast<Dst>,
[src]
T: CheckedCast<Dst>,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<Src, Dst> LosslessTryInto<Dst> for Src where
Dst: LosslessTryFrom<Src>,
[src]
Dst: LosslessTryFrom<Src>,
pub fn lossless_try_into(self) -> Option<Dst>
[src]
impl<Src, Dst> LossyInto<Dst> for Src where
Dst: LossyFrom<Src>,
[src]
Dst: LossyFrom<Src>,
pub fn lossy_into(self) -> Dst
[src]
impl<T> OverflowingAs for T
[src]
pub fn overflowing_as<Dst>(self) -> (Dst, bool) where
T: OverflowingCast<Dst>,
[src]
T: OverflowingCast<Dst>,
impl<T> Same<T> for T
[src]
type Output = T
Should always be Self
impl<T> SaturatingAs for T
[src]
pub fn saturating_as<Dst>(self) -> Dst where
T: SaturatingCast<Dst>,
[src]
T: SaturatingCast<Dst>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> UnwrappedAs for T
[src]
pub fn unwrapped_as<Dst>(self) -> Dst where
T: UnwrappedCast<Dst>,
[src]
T: UnwrappedCast<Dst>,
impl<T> WrappingAs for T
[src]
pub fn wrapping_as<Dst>(self) -> Dst where
T: WrappingCast<Dst>,
[src]
T: WrappingCast<Dst>,