Écrire le code pour PIDSubsystem

Le squelette du PIDSubsystem est généré par le RobotBuilder et nous devons remplir le reste du code pour fournir la valeur du potentiomètre et piloter le moteur avec la sortie du PIDController intégré.

Assurez-vous que le sous-système Elevator PID a été créé dans RobotBuilder. Une fois que tout est défini, générer le code Java/C ++ pour le projet à l’aide du menu Export ou du menu de la barre d’outils Java/C ++.

RobotBuilder génère les méthodes PIDSubsystem de sorte qu’aucun code supplémentaire n’est nécessaire pour le fonctionnement de base.

Définition des constantes PID

Les constantes de hauteur et les constantes PID sont générées automatiquement.

public class Elevator extends PIDSubsystem {

    // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS
public static final double Bottom = 4.6;
public static final double Stow = 1.65;
public static final double Table_Height = 1.58;

    // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS

    // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
private AnalogPotentiometer pot;private PWMVictorSPX motor;
    //P I D Variables
    private static final double kP = 6.0;
    private static final double kI = 0.0;
    private static final double kD = 0.0;
    private static final double kF = 0.0;
    // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
    // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS
static constexpr const double Bottom = 4.6;
static constexpr const double Stow = 1.65;
static constexpr const double Table_Height = 1.58;

    static constexpr const double kP = 6.0;
    static constexpr const double kI = 0.0;
    static constexpr const double kD = 0.0;
    static constexpr const double kF = 0.0;
    // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTANTS

Obtenir la mesure du potentiomètre

@Override
public double getMeasurement() {
    // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=SOURCE
    return pot.get();

    // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=SOURCE
}
double Elevator::GetMeasurement() {
    // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=SOURCE
    return m_pot.Get();

    // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=SOURCE
}

La méthode getMeasurement() est utilisée pour définir la valeur du capteur qui fournit la rétroaction pour le contrôleur PID. Dans ce cas, le code est généré automatiquement et renvoie la tension du potentiomètre telle que renvoyée par la méthode get().

Calculer la sortie PID

    @Override
    public void useOutput(double output, double setpoint) {
        output += setpoint*kF;
        // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=OUTPUT
motor.set(output);

        // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=OUTPUT
    }
void Elevator::UseOutput(double output, double setpoint) {
    output += setpoint*kF;
    // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=OUTPUT
m_motor.Set(output);

    // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=OUTPUT
}

La méthode useOutput écrit la sortie PID calculée directement dans le moteur.

C’est tout ce qui est nécessaire pour créer le PIDSubsystem Elevator.