PIDSubsystem için Kod Yazmak

PIDSubsystem’in iskeleti RobotBuilder tarafından oluşturulmaktadır, potonsiyometre değerini sağlamak ve gömülü PIDController’ın çıktısıyla motorun sürülmesi için kodun geri kalanını doldurmamız gerekmektedir.

Elevator PID alt sisteminin RobotBuilder’da oluşturulduğundan emin olun. Tamamen ayarlandıktan sonra, Dışa Aktar menüsünü veya Java / C ++ araç çubuğu menüsünü kullanarak proje için Java / C ++ kodu oluşturun.

RobotBuilder PIDSubsystem metodları oluşturmaktadır, öyle ki temel işleyiş için herhangi bir ek koda ihtiyaç olmamaktadır.

PID Sabitlerinin Ayarlanması

Yükseklik ve PID sabitleri kendiliğinden oluşturulmaktadır.

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

Potansiyometre Ölçümü Almak

@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
}

getMeasurement() metodu, PID kontrolörüne geri bildirim sağlayan sensörlerin değerini ayarlamak için kullanılmaktadır. Bu durumda kod kendiliğinden oluşturulmakta ve potansiyometre voltajına get() metodunda olduğu gibi dönmektedir.

PID Çıktısını Hesaplamak

    @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
}

useOutput metodu, hesaplanan PID çıktısını doğrudan motora yazmaktadır

Elevator PIDSubsystem oluşturmak için gerekli şeyler bundan ibarettir.