TrapezoidProfile

class wpimath.TrapezoidProfile(constraints: wpimath._wpimath._TrapezoidProfileConstraints)

Bases: pybind11_object

A trapezoid-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 trapezoidal velocity constraints. To compute the reference obeying this constraint, do the following.

Initialization:

constraints = TrapezoidProfile.Constraints(kMaxV, kMaxA)
previous_profiled_reference = initial_reference

Run on update:

profile = TrapezoidProfile(constraints, unprofiled_reference, previous_profiled_reference)
previous_profiled_reference = profile.calculate(time_since_previous_update)

where unprofiled_reference 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 is_finished().

Constructs a TrapezoidProfile.

Parameters:

constraints – The constraints on the profile, like maximum velocity.

Constraints

alias of _TrapezoidProfileConstraints

class ProfileTiming

Bases: pybind11_object

Profile timings.

class State(position: float = 0, velocity: wpimath.units.units_per_second = 0)

Bases: pybind11_object

Profile state.

calculate(t: wpimath.units.seconds, current: wpimath._wpimath.TrapezoidProfile.State, goal: wpimath._wpimath.TrapezoidProfile.State) wpimath._wpimath.TrapezoidProfile.State

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

Parameters:
  • t – The amount of time to advance from the current state toward the desired state.

  • current – The current state.

  • goal – The desired state when the profile is complete.

Returns:

The position and velocity of the profile at time t.

duration() wpimath.units.seconds

Returns the duration of the profile.

Returns:

The duration of the profile, or zero if no goal was set.

is_finished(t: wpimath.units.seconds) bool

Returns true if the profile has reached the goal.

The profile has reached the goal if the time since the profile started has exceeded the profile’s total time.

Parameters:

t – The time since the beginning of the profile.

Returns:

True if the profile has reached the goal.

time_left_until(current: wpimath._wpimath.TrapezoidProfile.State, goal: wpimath._wpimath.TrapezoidProfile.State) wpimath.units.seconds

Returns the time to get between two states. This does not affect the internal variables, and as a result, may be used for states not on the active trajectory.

Parameters:
  • current – The current state.

  • goal – The goal state.

Returns:

The time left until the target state.