2019-08-25 23:55:59 -04:00
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
/* Copyright (c) 2019 FIRST. All Rights Reserved. */
|
|
|
|
|
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
|
|
|
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
|
|
|
|
/* the project. */
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
2019-11-05 20:52:49 -08:00
|
|
|
#include <frc/controller/PIDController.h>
|
|
|
|
|
|
2019-08-25 23:55:59 -04:00
|
|
|
#include "frc2/command/SubsystemBase.h"
|
|
|
|
|
|
|
|
|
|
namespace frc2 {
|
|
|
|
|
/**
|
|
|
|
|
* A subsystem that uses a PIDController to control an output. The controller
|
|
|
|
|
* is run synchronously from the subsystem's periodic() method.
|
|
|
|
|
*
|
|
|
|
|
* @see PIDController
|
|
|
|
|
*/
|
|
|
|
|
class PIDSubsystem : public SubsystemBase {
|
|
|
|
|
public:
|
|
|
|
|
/**
|
|
|
|
|
* Creates a new PIDSubsystem.
|
|
|
|
|
*
|
|
|
|
|
* @param controller the PIDController to use
|
|
|
|
|
*/
|
|
|
|
|
explicit PIDSubsystem(PIDController controller);
|
|
|
|
|
|
|
|
|
|
void Periodic() override;
|
|
|
|
|
|
|
|
|
|
/**
|
2019-11-26 00:46:47 -05:00
|
|
|
* Sets the setpoint for the subsystem.
|
2019-08-25 23:55:59 -04:00
|
|
|
*
|
2019-11-26 00:46:47 -05:00
|
|
|
* @param setpoint the setpoint for the subsystem
|
2019-08-25 23:55:59 -04:00
|
|
|
*/
|
2019-11-26 00:46:47 -05:00
|
|
|
void SetSetpoint(double setpoint);
|
2019-08-25 23:55:59 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Enables the PID control. Resets the controller.
|
|
|
|
|
*/
|
|
|
|
|
virtual void Enable();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Disables the PID control. Sets output to zero.
|
|
|
|
|
*/
|
|
|
|
|
virtual void Disable();
|
|
|
|
|
|
2019-11-26 00:46:47 -05:00
|
|
|
/**
|
|
|
|
|
* Returns whether the controller is enabled.
|
|
|
|
|
*
|
|
|
|
|
* @return Whether the controller is enabled.
|
|
|
|
|
*/
|
|
|
|
|
bool IsEnabled();
|
|
|
|
|
|
2019-08-25 23:55:59 -04:00
|
|
|
/**
|
|
|
|
|
* Returns the PIDController.
|
|
|
|
|
*
|
|
|
|
|
* @return The controller.
|
|
|
|
|
*/
|
|
|
|
|
PIDController& GetController();
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
PIDController m_controller;
|
|
|
|
|
bool m_enabled;
|
2019-11-26 00:46:47 -05:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns the measurement of the process variable used by the PIDController.
|
|
|
|
|
*
|
|
|
|
|
* @return the measurement of the process variable
|
|
|
|
|
*/
|
|
|
|
|
virtual double GetMeasurement() = 0;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Uses the output from the PIDController.
|
|
|
|
|
*
|
|
|
|
|
* @param output the output of the PIDController
|
|
|
|
|
* @param setpoint the setpoint of the PIDController (for feedforward)
|
|
|
|
|
*/
|
|
|
|
|
virtual void UseOutput(double output, double setpoint) = 0;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
double m_setpoint{0};
|
2019-08-25 23:55:59 -04:00
|
|
|
};
|
|
|
|
|
} // namespace frc2
|