WPILibC++ 2024.3.2
frc::ExponentialProfile< Distance, Input > Class Template Reference

A Exponential-shaped velocity profile. More...

#include <frc/trajectory/ExponentialProfile.h>

Classes

class  Constraints
 Profile constraints. More...
 
class  ProfileTiming
 Profile timing. More...
 
class  State
 Profile state. More...
 

Public Types

using Distance_t = units::unit_t< Distance >
 
using Velocity = units::compound_unit< Distance, units::inverse< units::seconds > >
 
using Velocity_t = units::unit_t< Velocity >
 
using Acceleration = units::compound_unit< Velocity, units::inverse< units::seconds > >
 
using Input_t = units::unit_t< Input >
 
using A_t = units::unit_t< units::inverse< units::seconds > >
 
using B_t = units::unit_t< units::compound_unit< Acceleration, units::inverse< Input > > >
 
using KV = units::compound_unit< Input, units::inverse< Velocity > >
 
using kV_t = units::unit_t< KV >
 
using KA = units::compound_unit< Input, units::inverse< Acceleration > >
 
using kA_t = units::unit_t< KA >
 

Public Member Functions

 ExponentialProfile (Constraints constraints)
 Constructs a ExponentialProfile. More...
 
 ExponentialProfile (const ExponentialProfile &)=default
 
ExponentialProfileoperator= (const ExponentialProfile &)=default
 
 ExponentialProfile (ExponentialProfile &&)=default
 
ExponentialProfileoperator= (ExponentialProfile &&)=default
 
State Calculate (const units::second_t &t, const State &current, const State &goal) const
 Calculates the position and velocity for the profile at a time t where the current state is at time t = 0. More...
 
State CalculateInflectionPoint (const State &current, const State &goal) const
 Calculates the point after which the fastest way to reach the goal state is to apply input in the opposite direction. More...
 
units::second_t TimeLeftUntil (const State &current, const State &goal) const
 Calculates the time it will take for this profile to reach the goal state. More...
 
ProfileTiming CalculateProfileTiming (const State &current, const State &goal) const
 Calculates the time it will take for this profile to reach the inflection point, and the time it will take for this profile to reach the goal state. More...
 

Detailed Description

template<class Distance, class Input>
class frc::ExponentialProfile< Distance, Input >

A Exponential-shaped velocity profile.

While this class can be used for a profiled movement from start to finish, the intended usage is to filter a reference's dynamics based on ExponentialProfile velocity constraints. To compute the reference obeying this constraint, do the following.

Initialization:

ExponentialProfile::Constraints constraints{kMaxV, kV, kA};
State previousProfiledReference = {initialReference, 0_mps};
Profile constraints.
Definition: ExponentialProfile.h:81
State
Possible state of a SysId routine.
Definition: SysIdRoutineLog.h:25

Run on update:

previousProfiledReference = profile.Calculate(timeSincePreviousUpdate,
previousProfiledReference, unprofiledReference);

where unprofiledReference is free to change between calls. Note that when the unprofiled reference is within the constraints, Calculate() returns the unprofiled reference unchanged.

Otherwise, a timer can be started to provide monotonic values for Calculate() and to determine when the profile has completed via IsFinished().

Member Typedef Documentation

◆ A_t

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::A_t = units::unit_t<units::inverse<units::seconds> >

◆ Acceleration

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::Acceleration = units::compound_unit<Velocity, units::inverse<units::seconds> >

◆ B_t

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::B_t = units::unit_t<units::compound_unit<Acceleration, units::inverse<Input> >>

◆ Distance_t

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::Distance_t = units::unit_t<Distance>

◆ Input_t

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::Input_t = units::unit_t<Input>

◆ KA

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::KA = units::compound_unit<Input, units::inverse<Acceleration> >

◆ kA_t

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::kA_t = units::unit_t<KA>

◆ KV

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::KV = units::compound_unit<Input, units::inverse<Velocity> >

◆ kV_t

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::kV_t = units::unit_t<KV>

◆ Velocity

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::Velocity = units::compound_unit<Distance, units::inverse<units::seconds> >

◆ Velocity_t

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::Velocity_t = units::unit_t<Velocity>

Constructor & Destructor Documentation

◆ ExponentialProfile() [1/3]

template<class Distance , class Input >
frc::ExponentialProfile< Distance, Input >::ExponentialProfile ( Constraints  constraints)
explicit

Constructs a ExponentialProfile.

Parameters
constraintsThe constraints on the profile, like maximum input.

◆ ExponentialProfile() [2/3]

template<class Distance , class Input >
frc::ExponentialProfile< Distance, Input >::ExponentialProfile ( const ExponentialProfile< Distance, Input > &  )
default

◆ ExponentialProfile() [3/3]

template<class Distance , class Input >
frc::ExponentialProfile< Distance, Input >::ExponentialProfile ( ExponentialProfile< Distance, Input > &&  )
default

Member Function Documentation

◆ Calculate()

template<class Distance , class Input >
ExponentialProfile< Distance, Input >::State frc::ExponentialProfile< Distance, Input >::Calculate ( const units::second_t &  t,
const State current,
const State goal 
) const

Calculates the position and velocity for the profile at a time t where the current state is at time t = 0.

Parameters
tHow long to advance from the current state toward the desired state.
currentThe current state.
goalThe desired state when the profile is complete.
Returns
The position and velocity of the profile at time t.

◆ CalculateInflectionPoint()

template<class Distance , class Input >
ExponentialProfile< Distance, Input >::State frc::ExponentialProfile< Distance, Input >::CalculateInflectionPoint ( const State current,
const State goal 
) const

Calculates the point after which the fastest way to reach the goal state is to apply input in the opposite direction.

Parameters
currentThe current state.
goalThe desired state when the profile is complete.
Returns
The position and velocity of the profile at the inflection point.

◆ CalculateProfileTiming()

template<class Distance , class Input >
ExponentialProfile< Distance, Input >::ProfileTiming frc::ExponentialProfile< Distance, Input >::CalculateProfileTiming ( const State current,
const State goal 
) const

Calculates the time it will take for this profile to reach the inflection point, and the time it will take for this profile to reach the goal state.

Parameters
currentThe current state.
goalThe desired state when the profile is complete.
Returns
The timing information for this profile.

◆ operator=() [1/2]

template<class Distance , class Input >
ExponentialProfile & frc::ExponentialProfile< Distance, Input >::operator= ( const ExponentialProfile< Distance, Input > &  )
default

◆ operator=() [2/2]

template<class Distance , class Input >
ExponentialProfile & frc::ExponentialProfile< Distance, Input >::operator= ( ExponentialProfile< Distance, Input > &&  )
default

◆ TimeLeftUntil()

template<class Distance , class Input >
units::second_t frc::ExponentialProfile< Distance, Input >::TimeLeftUntil ( const State current,
const State goal 
) const

Calculates the time it will take for this profile to reach the goal state.

Parameters
currentThe current state.
goalThe desired state when the profile is complete.
Returns
The total duration of this profile.

The documentation for this class was generated from the following files: