PIDSubsystem için Kod Yazma

Önemli

RobotBuilder, yeni komut tabanlı çerçeveyi desteklemek için güncellendi! Ne yazık ki, bu dokümantasyon güncelliğini yitirmiştir ve yalnızca eski komut tabanlı çerçeve içindir. Bu dokümantasyonu güncellemekle ilgilenen kişiler, frc-docs <https://github.com/wpilibsuite/frc-docs> __ havuzuna destekte bulunabilirler.

PIDS alt sistemleri, aktüatörü kontrol etmek ve onu belirli bir konuma sürmek için geri besleme kullanır. Bu örnekte, yükseklik hakkında geri bildirim vermek için 10 dönüşlü potansiyometreye bağlı bir asansör kullanıyoruz. PIDSubsystem’in iskeleti RobotBuilder tarafından oluşturulur ve potansiyometre değerini sağlamak ve motoru gömülü PIDController çıkışı ile çalıştırmak için kodun geri kalanını doldurmamız gerekir.

PID Constants-Sabitlerini Ayarlama

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.

Elevator Ön Ayar Konumları için Sabit Ekleme

public class Elevator extends PIDSubsystem {
   // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATION
   AnalogChannel potentiometer = RobotMap.ELEVATOR_POTENTIOMETER;
   Victor victor = RobotMap.ELEVATOR_VICTOR;
   // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATION

   public static final double BOTTOM = 4.6,
                              STOW = 1.65,
                              TABLE_HEIGHT = 1.58;

   public Elevator() {
      // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER, ID=PID
      super("Elevator", 1.0, 0.0, 0.0);
      getPIDController().setContinuous(false);
      // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER, ID=PID

      setSetpoint(STOW);
      enable();
   }

   public void initDefaultCommand() {

   }

   protected double returnPIDInput() {
      // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER, ID=SOURCE
      return potentiometer.pidGet();
      // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER, ID=SOURCE
   }

   protected void usePIDOutput(double output) {

   }
}

Elevatorü önceden ayarlanmış konumlara sürmeyi kolaylaştırmak için, alt, istif ve masa yüksekliği için önceden ayarlanmış konumlar ekledik. Daha sonra asansör, PID ayar noktası ayarlanarak STOW konumuna ayarlanır ve PID kontrolörü etkinleştirilir. Bu, robot etkinleştirildiğinde asansörün istifleme konumuna hareket etmesine neden olacaktır.

Sabitleri Üstbilgi Dosyasına Ekleme (Yalnızca C++)

#pragma once

#include "frc/commands/PIDSubsystem.h"
#include "frc/AnalogInput.h"
#include "frc/Victor.h"

class Elevator: public PIDSubsystem {
 public:
   static const double BOTTOM = 4.6;
   static const double STOW = 1.65;
   static const double TABLE_HEIGHT = 1.58;

   // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS
   AnalogInput* potentiometer;
   Victor* victor;
   // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=DECLARATIONS

   Elevator();
   double ReturnPIDInput();
   void UsePIDOutput(double output);
   void InitDefaultCommand();
};

Dönüş PID Giriş Değerleri

protected double returnPIDInput() {
   // BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER, ID=SOURCE
   return potentiometer.pidGet();
   // END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER, ID=SOURCE
}

returnPIDInput() yöntemi, PID denetleyicisi için geri bildirim sağlayan sensörün değerini ayarlamak için kullanılır. Bu durumda, kod otomatik olarak oluşturulur ve potansiyometre ham analog giriş değerini (0-1023 arasında değişen bir sayı) döndürür. Bizim durumumuzda PID denetleyicisinin ham değere değil potansiyometre için analog giriş tarafından okunan ortalama gerilime dayanmasını istiyoruz.

Sadece satırı değiştirirsek:

Java için return potentiometer.pidGet(); veya C++ için return potentiometer->PIDGet();

Java’ya bir sonraki aktarımımızda RobotBuilder tarafından üzerine yazılacaktır.”//BEGIN AUTOGENERATED CODE” ve “//END AUTOGENERATED CODE” yorumlarına bakarak hangi satırların otomatik olarak oluşturulduğunu anlayabilirsiniz. Bu işaretçiler arasındaki herhangi bir kod, RobotBuilder’ın bir sonraki çalıştırılışında üzerine yazılacaktır. Bu blokların dışındaki her şeyi değiştirmekte özgürsünüz.

Ortalama Gerilimi Döndür

protected double returnPIDInput() {
   return potentiometer.getAverageVoltage();
}

Son adımdaki sorunu aşmak için yorum blokları kaldırılabilir. Ardından, satır gösterildiği gibi değiştirilirse, artık RobotBuilder tarafından üzerine yazılmayacaktır.

Unutmayın, sadece bir yönteme kod eklemek istersek, bu kod yorum bloklarının dışına güvenle eklenebilir.

Elevator PIDSubsystem oluşturmak için gereken tek şey bu.