Ramsete Denetleyicisi

Ramsete Kontrol Cihazı, WPILib’e yerleşik bir yörünge izleyicidir. Bu izleyici, küçük rahatsızlıklar için düzeltme ile yörüngeleri doğru bir şekilde izlemek için kullanılabilir.

Ramsete Denetleyici Nesnesinin-Object Oluşturulması

Ramsete kontrolörü, b ve zeta olmak üzere iki kazançla başlatılmalıdır. Daha büyük b değerleri yakınsamayı orantılı bir terim gibi daha agresif hale getirirken, daha büyük zeta değerleri yanıtta daha fazla sönümleme sağlar. Bu kontrolör kazançları, sadece kontrolörün ayarlanan hızları nasıl çıkaracağını belirler. Robotun gerçek hız takibini ETKİLEMEZ. Bu, bu denetleyici kazançlarının genellikle robottan bağımsız olduğu anlamına gelir.

Not

B ve zeta için 2.0 ve 0.7 kazançları, tüm birimler metre cinsinden olduğunda istenen sonuçları üretmek için tekrar tekrar test edilmiştir. Bu nedenle, RamseteController için sıfır bağımsız değişkenli bir kurucu, bu değerlere varsayılan kazançlarla birlikte mevcuttur.

// Using the default constructor of RamseteController. Here
// the gains are initialized to 2.0 and 0.7.
RamseteController controller1 = new RamseteController();

// Using the secondary constructor of RamseteController where
// the user can choose any other gains.
RamseteController controller2 = new RamseteController(2.1, 0.8);

Ayarlanmış Hızları Alma

Ramsete kontrolörü, robot bu hızları takip ettiğinde hedef noktasına doğru bir şekilde ulaşması için “ayarlanmış hızları” geri döndürür. Denetleyici, yeni hedefle periyodik olarak güncellenmelidir. Hedef, istenen bir pose, istenen doğrusal hız ve istenen açısal hızdan oluşur. Ayrıca robotun mevcut konumu da periyodik olarak güncellenmelidir. Kontrolör, ayarlanmış doğrusal ve açısal hızı döndürmek için bu dört argümanı kullanır. Kullanıcılar, optimum yörünge takibini elde etmek için robotlarına bu doğrusal ve açısal hızlara kumanda etmelidir.

Not

“goal pose” Hedef pozu, yörüngeyi izlerken robotun belirli bir zaman diliminde olması gereken konumu temsil eder. Yörüngenin son son noktasını temsil ETMEZ.

Kontrolör, Calculate (C++) / calculate (Java) yöntemi kullanılarak güncellenebilir. Bu yöntem için iki aşırı yük vardır. Bu aşırı yüklerin her ikisi de mevcut robot konumunu ilk parametre olarak kabul eder. Diğer parametreler için, bu aşırı yüklerden biri hedefi üç ayrı parametre (pose, doğrusal hız ve açısal hız) olarak alırken, diğer aşırı yük, hedef pose hakkında bilgi içeren bir Trajectory.State nesnesini kabul eder. Kolaylık için, kullanıcılar yörüngeleri izlerken ikinci yöntemi kullanmalıdır.

Trajectory.State goal = trajectory.sample(3.4); // sample the trajectory at 3.4 seconds from the beginning
ChassisSpeeds adjustedSpeeds = controller.calculate(currentRobotPose, goal);

Bu hesaplamalar, güncellenmiş bir robot konumu ve hedefi ile her döngü yinelemesinde gerçekleştirilmelidir.

Ayarlanmış Hızları Kullanma

Ayarlanan hızlar, bir vx (ileri yönde doğrusal hız), bir vy (yan yönde doğrusal hız) ve bir omega (robot çerçevesinin merkezi etrafındaki açısal hız) içeren ChassisSpeeds tipindedir . Ramsete denetleyicisi, holonomik olmayan robotlar (yanlara doğru hareket edemeyen robotlar) için bir denetleyici olduğundan, ayarlanmış hız nesnesinin sıfır vy değeri vardır.

Döndürülen ayarlanmış hızlar, aktarma sistemi tipiniz için kinematik sınıfları kullanılarak kullanılabilir hızlara dönüştürülebilir. Örneğin, ayarlanmış hızlar, bir DifferentialDriveKinematics nesnesi kullanılarak bir diferansiyel sürücü için sol ve sağ hızlara dönüştürülebilir.

ChassisSpeeds adjustedSpeeds = controller.calculate(currentRobotPose, goal);
DifferentialDriveWheelSpeeds wheelSpeeds = kinematics.toWheelSpeeds(adjustedSpeeds);
double left = wheelSpeeds.leftMetersPerSecond;
double right = wheelSpeeds.rightMetersPerSecond;

Bu yeni sol ve sağ hızlar voltaj değil, hala hız olduğundan, bu hızları izlemek için her iki taraf için birer tane olmak üzere iki PID Kontrol Cihazı kullanılabilir. Ya WPILib PIDController (C++, Java) kullanılabilir veya TalonSRX ve SPARK MAX gibi akıllı motor kontrolörlerinde Velocity PID özelliği kullanılabilir.

Komut Tabanlı Çerçevede - Command-Based Framework Ramsete

Kullanıcılar için kolaylık sağlamak amacıyla, WPILib’e bir RamseteCommand sınıfı dahil edilmiştir. RamseteCommand kullanarak bir yolu takip eden otonom uygulama hakkında tam bir eğitim için bkz Rota Eğitimi.