Subsistemas PID para el control PID incorporado

Importante

Esta documentación describe el uso de la biblioteca heredada basada en comandos. Si bien esta documentación se ha conservado para ayudar a los equipos que aún no lo han hecho, se recomienda a los equipos encarecidamente migrar a la nueva biblioteca basada en comandos <docs/software/commandbased/index:Command-Based Programming>`.

Nota

Si un mecanismo utiliza un sensor para la retroalimentación, con mayor frecuencia se utilizará un controlador PID, se utiliza para controlar la velocidad o posición del motor. Ejemplos de subsistemas que podrían usar PID control son: ascensores con potenciómetros para rastrear la altura, tiradores con codificadores para medir la velocidad, muñecas con potenciómetros para medir el ángulo de la articulación, etc.

Hay una clase PIDController integrada en WPILib, pero para simplificar su uso para comandos programas hay un subsistema PIDS. Un subsistema PIDS es un subsistema normal con el PIDController integrado y expone los métodos necesarios para la operación.

Control del ángulo de una articulación de la muñeca

En este ejemplo, puede ver los elementos básicos de un subsistema PIDS para la articulación de la muñeca:

package org.usfirst.frc.team1.robot.subsystems;
import edu.wpi.first.wpilibj.*;
import edu.wpi.first.wpilibj.command.PIDSubsystem;
import org.usfirst.frc.team1.robot.RobotMap;


public class Wrist extends PIDSubsystem { // This system extends PIDSubsystem

   Victor motor = RobotMap.wristMotor;
   AnalogInput pot = RobotMap.wristPot();

   public Wrist() {
      super("Wrist", 2.0, 0.0, 0.0);// The constructor passes a name for the subsystem and the P, I and D constants that are used when computing the motor output
      setAbsoluteTolerance(0.05);
      getPIDController().setContinuous(false);
   }

   public void initDefaultCommand() {
   }

   protected double returnPIDInput() {
       return pot.getAverageVoltage(); // returns the sensor value that is providing the feedback for the system
   }

   protected void usePIDOutput(double output) {
       motor.pidWrite(output); // this is where the computed output value from the PIDController is applied to the motor
   }
}