WPILibC++ 2025.2.1
Loading...
Searching...
No Matches
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
 
using Velocity_t = units::unit_t<Velocity>
 
using Acceleration
 
using Input_t = units::unit_t<Input>
 
using A_t = units::unit_t<units::inverse<units::seconds>>
 
using B_t
 
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

constexpr ExponentialProfile (Constraints constraints)
 Constructs a ExponentialProfile.
 
constexpr ExponentialProfile (const ExponentialProfile &)=default
 
constexpr ExponentialProfileoperator= (const ExponentialProfile &)=default
 
constexpr ExponentialProfile (ExponentialProfile &&)=default
 
constexpr ExponentialProfileoperator= (ExponentialProfile &&)=default
 
constexpr 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.
 
constexpr 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.
 
constexpr 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.
 
constexpr 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.
 

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:83

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
Initial value:
typename units::detail::compound_impl< U, Us... >::type compound_unit
Represents a unit type made up from other units.
Definition base.h:1438

◆ B_t

template<class Distance , class Input >
using frc::ExponentialProfile< Distance, Input >::B_t
Initial value:
Container for values which represent quantities of a given unit.
Definition base.h:1930

◆ 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

◆ 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)
inlineexplicitconstexpr

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 > & )
constexprdefault

◆ ExponentialProfile() [3/3]

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

Member Function Documentation

◆ Calculate()

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

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 >
State frc::ExponentialProfile< Distance, Input >::CalculateInflectionPoint ( const State & current,
const State & goal ) const
inlineconstexpr

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 >
ProfileTiming frc::ExponentialProfile< Distance, Input >::CalculateProfileTiming ( const State & current,
const State & goal ) const
inlineconstexpr

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 > & )
constexprdefault

◆ operator=() [2/2]

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

◆ TimeLeftUntil()

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

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 file: