LightLib
PROS library for VEX V5: EKF/MCL localization, RAMSETE path following, high-level chassis API
Loading...
Searching...
No Matches
okapi::IterativeVelPIDController Class Reference

#include <iterativeVelPidController.hpp>

Inheritance diagram for okapi::IterativeVelPIDController:
okapi::IterativeVelocityController< double, double > okapi::IterativeController< Input, Output > okapi::ClosedLoopController< Input, Output > okapi::ControllerOutput< Input >

Classes

struct  Gains
 

Public Member Functions

 IterativeVelPIDController (double ikP, double ikD, double ikF, double ikSF, std::unique_ptr< VelMath > ivelMath, const TimeUtil &itimeUtil, std::unique_ptr< Filter > iderivativeFilter=std::make_unique< PassthroughFilter >(), std::shared_ptr< Logger > ilogger=Logger::getDefaultLogger())
 Velocity PD controller.
 
 IterativeVelPIDController (const Gains &igains, std::unique_ptr< VelMath > ivelMath, const TimeUtil &itimeUtil, std::unique_ptr< Filter > iderivativeFilter=std::make_unique< PassthroughFilter >(), std::shared_ptr< Logger > ilogger=Logger::getDefaultLogger())
 Velocity PD controller.
 
double step (double inewReading) override
 Do one iteration of the controller.
 
void setTarget (double itarget) override
 Sets the target for the controller.
 
void controllerSet (double ivalue) override
 Writes the value of the controller output.
 
double getTarget () override
 Gets the last set target, or the default target if none was set.
 
double getTarget () const
 Gets the last set target, or the default target if none was set.
 
double getProcessValue () const override
 
double getOutput () const override
 Returns the last calculated output of the controller.
 
double getMaxOutput () override
 Get the upper output bound.
 
double getMinOutput () override
 Get the lower output bound.
 
double getError () const override
 Returns the last error of the controller.
 
bool isSettled () override
 Returns whether the controller has settled at the target.
 
void setSampleTime (QTime isampleTime) override
 Set time between loops in ms.
 
void setOutputLimits (double imax, double imin) override
 Set controller output bounds.
 
void setControllerSetTargetLimits (double itargetMax, double itargetMin) override
 Sets the (soft) limits for the target range that controllerSet() scales into.
 
void reset () override
 Resets the controller's internal state so it is similar to when it was first initialized, while keeping any user-configured information.
 
void flipDisable () override
 Changes whether the controller is off or on.
 
void flipDisable (bool iisDisabled) override
 Sets whether the controller is off or on.
 
bool isDisabled () const override
 Returns whether the controller is currently disabled.
 
QTime getSampleTime () const override
 Get the last set sample time.
 
virtual QAngularSpeed stepVel (double inewReading)
 Do one iteration of velocity calculation.
 
virtual void setGains (const Gains &igains)
 Set controller gains.
 
Gains getGains () const
 Gets the current gains.
 
virtual void setTicksPerRev (double tpr)
 Sets the number of encoder ticks per revolution.
 
virtual QAngularSpeed getVel () const
 Returns the current velocity.
 
- Public Member Functions inherited from okapi::IterativeController< Input, Output >
virtual Output step (Input ireading)=0
 Do one iteration of the controller.
 
virtual void setOutputLimits (Output imax, Output imin)=0
 Set controller output bounds.
 
virtual void setControllerSetTargetLimits (Output itargetMax, Output itargetMin)=0
 Sets the (soft) limits for the target range that controllerSet() scales into.
 
- Public Member Functions inherited from okapi::ClosedLoopController< Input, Output >
virtual ~ClosedLoopController ()=default
 
virtual void setTarget (Input itarget)=0
 Sets the target for the controller.
 
- Public Member Functions inherited from okapi::ControllerOutput< Input >
virtual void controllerSet (Input ivalue)=0
 Writes the value of the controller output.
 

Protected Attributes

std::shared_ptr< Loggerlogger
 
double kP
 
double kD
 
double kF
 
double kSF
 
QTime sampleTime {10_ms}
 
double error {0}
 
double derivative {0}
 
double target {0}
 
double outputSum {0}
 
double output {0}
 
double outputMax {1}
 
double outputMin {-1}
 
double controllerSetTargetMax {1}
 
double controllerSetTargetMin {-1}
 
bool controllerIsDisabled {false}
 
std::unique_ptr< VelMathvelMath
 
std::unique_ptr< FilterderivativeFilter
 
std::unique_ptr< AbstractTimerloopDtTimer
 
std::unique_ptr< SettledUtilsettledUtil
 

Detailed Description

Definition at line 16 of file iterativeVelPidController.hpp.

Constructor & Destructor Documentation

◆ IterativeVelPIDController() [1/2]

okapi::IterativeVelPIDController::IterativeVelPIDController ( double  ikP,
double  ikD,
double  ikF,
double  ikSF,
std::unique_ptr< VelMath ivelMath,
const TimeUtil itimeUtil,
std::unique_ptr< Filter iderivativeFilter = std::make_unique< PassthroughFilter >(),
std::shared_ptr< Logger ilogger = Logger::getDefaultLogger() 
)

Velocity PD controller.

Parameters
ikPthe proportional gain
ikDthe derivative gain
ikFthe feed-forward gain
ikSFa feed-forward gain to counteract static friction
ivelMathThe VelMath used for calculating velocity.
itimeUtilsee TimeUtil docs
iderivativeFiltera filter for filtering the derivative term
iloggerThe logger this instance will log to.

◆ IterativeVelPIDController() [2/2]

okapi::IterativeVelPIDController::IterativeVelPIDController ( const Gains igains,
std::unique_ptr< VelMath ivelMath,
const TimeUtil itimeUtil,
std::unique_ptr< Filter iderivativeFilter = std::make_unique< PassthroughFilter >(),
std::shared_ptr< Logger ilogger = Logger::getDefaultLogger() 
)

Velocity PD controller.

Parameters
igainsThe controller gains.
ivelMathThe VelMath used for calculating velocity.
itimeUtilsee TimeUtil docs
iderivativeFiltera filter for filtering the derivative term
iloggerThe logger this instance will log to.

Member Function Documentation

◆ controllerSet()

void okapi::IterativeVelPIDController::controllerSet ( double  ivalue)
override

Writes the value of the controller output.

This method might be automatically called in another thread by the controller. The range of input values is expected to be [-1, 1].

Parameters
ivaluethe controller's output in the range [-1, 1]

◆ flipDisable() [1/2]

void okapi::IterativeVelPIDController::flipDisable ( )
overridevirtual

Changes whether the controller is off or on.

Turning the controller on after it was off will cause the controller to move to its last set target, unless it was reset in that time.

Implements okapi::ClosedLoopController< Input, Output >.

◆ flipDisable() [2/2]

void okapi::IterativeVelPIDController::flipDisable ( bool  iisDisabled)
overridevirtual

Sets whether the controller is off or on.

Turning the controller on after it was off will cause the controller to move to its last set target, unless it was reset in that time.

Parameters
iisDisabledwhether the controller is disabled

Implements okapi::ClosedLoopController< Input, Output >.

◆ getError()

double okapi::IterativeVelPIDController::getError ( ) const
overridevirtual

Returns the last error of the controller.

Does not update when disabled.

Implements okapi::ClosedLoopController< Input, Output >.

◆ getGains()

Gains okapi::IterativeVelPIDController::getGains ( ) const

Gets the current gains.

Returns
The current gains.

◆ getMaxOutput()

double okapi::IterativeVelPIDController::getMaxOutput ( )
overridevirtual

Get the upper output bound.

Returns
the upper output bound

Implements okapi::IterativeController< Input, Output >.

◆ getMinOutput()

double okapi::IterativeVelPIDController::getMinOutput ( )
overridevirtual

Get the lower output bound.

Returns
the lower output bound

Implements okapi::IterativeController< Input, Output >.

◆ getOutput()

double okapi::IterativeVelPIDController::getOutput ( ) const
overridevirtual

Returns the last calculated output of the controller.

Implements okapi::IterativeController< Input, Output >.

◆ getProcessValue()

double okapi::IterativeVelPIDController::getProcessValue ( ) const
overridevirtual
Returns
The most recent value of the process variable.

Implements okapi::ClosedLoopController< Input, Output >.

◆ getSampleTime()

QTime okapi::IterativeVelPIDController::getSampleTime ( ) const
overridevirtual

Get the last set sample time.

Returns
sample time

Implements okapi::IterativeController< Input, Output >.

◆ getTarget() [1/2]

double okapi::IterativeVelPIDController::getTarget ( ) const

Gets the last set target, or the default target if none was set.

Returns
the last target

◆ getTarget() [2/2]

double okapi::IterativeVelPIDController::getTarget ( )
overridevirtual

Gets the last set target, or the default target if none was set.

Returns
the last target

Implements okapi::ClosedLoopController< Input, Output >.

◆ getVel()

virtual QAngularSpeed okapi::IterativeVelPIDController::getVel ( ) const
virtual

Returns the current velocity.

◆ isDisabled()

bool okapi::IterativeVelPIDController::isDisabled ( ) const
overridevirtual

Returns whether the controller is currently disabled.

Returns
whether the controller is currently disabled

Implements okapi::ClosedLoopController< Input, Output >.

◆ isSettled()

bool okapi::IterativeVelPIDController::isSettled ( )
overridevirtual

Returns whether the controller has settled at the target.

Determining what settling means is implementation-dependent.

If the controller is disabled, this method must return true.

Returns
whether the controller is settled

Implements okapi::ClosedLoopController< Input, Output >.

◆ reset()

void okapi::IterativeVelPIDController::reset ( )
overridevirtual

Resets the controller's internal state so it is similar to when it was first initialized, while keeping any user-configured information.

Implements okapi::ClosedLoopController< Input, Output >.

◆ setControllerSetTargetLimits()

void okapi::IterativeVelPIDController::setControllerSetTargetLimits ( double  itargetMax,
double  itargetMin 
)
override

Sets the (soft) limits for the target range that controllerSet() scales into.

The target computed by controllerSet() is scaled into the range [-itargetMin, itargetMax].

Parameters
itargetMaxThe new max target for controllerSet().
itargetMinThe new min target for controllerSet().

◆ setGains()

virtual void okapi::IterativeVelPIDController::setGains ( const Gains igains)
virtual

Set controller gains.

Parameters
igainsThe new gains.

◆ setOutputLimits()

void okapi::IterativeVelPIDController::setOutputLimits ( double  imax,
double  imin 
)
override

Set controller output bounds.

Default bounds are [-1, 1].

Parameters
imaxmax output
iminmin output

◆ setSampleTime()

void okapi::IterativeVelPIDController::setSampleTime ( QTime  isampleTime)
overridevirtual

Set time between loops in ms.

Parameters
isampleTimetime between loops

Implements okapi::IterativeController< Input, Output >.

◆ setTarget()

void okapi::IterativeVelPIDController::setTarget ( double  itarget)
override

Sets the target for the controller.

Parameters
itargetnew target velocity

◆ setTicksPerRev()

virtual void okapi::IterativeVelPIDController::setTicksPerRev ( double  tpr)
virtual

Sets the number of encoder ticks per revolution.

Default is 1800.

Parameters
tprnumber of measured units per revolution

◆ step()

double okapi::IterativeVelPIDController::step ( double  inewReading)
override

Do one iteration of the controller.

Returns the reading in the range [-1, 1] unless the bounds have been changed with setOutputLimits().

Parameters
inewReadingnew measurement
Returns
controller output

◆ stepVel()

virtual QAngularSpeed okapi::IterativeVelPIDController::stepVel ( double  inewReading)
virtual

Do one iteration of velocity calculation.

Parameters
inewReadingnew measurement
Returns
filtered velocity

Member Data Documentation

◆ controllerIsDisabled

bool okapi::IterativeVelPIDController::controllerIsDisabled {false}
protected

Definition at line 248 of file iterativeVelPidController.hpp.

◆ controllerSetTargetMax

double okapi::IterativeVelPIDController::controllerSetTargetMax {1}
protected

Definition at line 246 of file iterativeVelPidController.hpp.

◆ controllerSetTargetMin

double okapi::IterativeVelPIDController::controllerSetTargetMin {-1}
protected

Definition at line 247 of file iterativeVelPidController.hpp.

◆ derivative

double okapi::IterativeVelPIDController::derivative {0}
protected

Definition at line 240 of file iterativeVelPidController.hpp.

◆ derivativeFilter

std::unique_ptr<Filter> okapi::IterativeVelPIDController::derivativeFilter
protected

Definition at line 251 of file iterativeVelPidController.hpp.

◆ error

double okapi::IterativeVelPIDController::error {0}
protected

Definition at line 239 of file iterativeVelPidController.hpp.

◆ kD

double okapi::IterativeVelPIDController::kD
protected

Definition at line 237 of file iterativeVelPidController.hpp.

◆ kF

double okapi::IterativeVelPIDController::kF
protected

Definition at line 237 of file iterativeVelPidController.hpp.

◆ kP

double okapi::IterativeVelPIDController::kP
protected

Definition at line 237 of file iterativeVelPidController.hpp.

◆ kSF

double okapi::IterativeVelPIDController::kSF
protected

Definition at line 237 of file iterativeVelPidController.hpp.

◆ logger

std::shared_ptr<Logger> okapi::IterativeVelPIDController::logger
protected

Definition at line 236 of file iterativeVelPidController.hpp.

◆ loopDtTimer

std::unique_ptr<AbstractTimer> okapi::IterativeVelPIDController::loopDtTimer
protected

Definition at line 252 of file iterativeVelPidController.hpp.

◆ output

double okapi::IterativeVelPIDController::output {0}
protected

Definition at line 243 of file iterativeVelPidController.hpp.

◆ outputMax

double okapi::IterativeVelPIDController::outputMax {1}
protected

Definition at line 244 of file iterativeVelPidController.hpp.

◆ outputMin

double okapi::IterativeVelPIDController::outputMin {-1}
protected

Definition at line 245 of file iterativeVelPidController.hpp.

◆ outputSum

double okapi::IterativeVelPIDController::outputSum {0}
protected

Definition at line 242 of file iterativeVelPidController.hpp.

◆ sampleTime

QTime okapi::IterativeVelPIDController::sampleTime {10_ms}
protected

Definition at line 238 of file iterativeVelPidController.hpp.

◆ settledUtil

std::unique_ptr<SettledUtil> okapi::IterativeVelPIDController::settledUtil
protected

Definition at line 253 of file iterativeVelPidController.hpp.

◆ target

double okapi::IterativeVelPIDController::target {0}
protected

Definition at line 241 of file iterativeVelPidController.hpp.

◆ velMath

std::unique_ptr<VelMath> okapi::IterativeVelPIDController::velMath
protected

Definition at line 250 of file iterativeVelPidController.hpp.


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