Durum Uzayı Modellerinde ve Denetleyicilerinde Hata Ayıklama

İşaretleri Kontrol Etmek

Durum alanı denetleyicilerindeki hataların en yaygın nedenlerinden biri, işaretlerin ters çevrilmesidir. Örneğin, WPILib’e dahil olan modeller, pozitif voltajın pozitif bir ivmeyle sonuçlanmasını bekler ve bunun tersi de geçerlidir. Pozitif voltaj uygulanması mekanizmanın ileriye doğru hızlanmasına neden olmazsa veya “ileri” hareket etmek kodlayıcıyı (veya diğer sensör okumalarını) düşürürse, pozitif voltaj girişinin pozitif kodlayıcı okumasıyla sonuçlanması için ters çevrilmelidirler. Örneğin, kodlayıcılarımın pozitif bir hız okuması için diferansiyel aktarma sistemime bir input of \([12, 12]^T\) (sol ve sağ motorlar için tam ileri) uygularsam, tekerleklerim robotumu “ileri” (yerel olarak + X ekseni boyunca) itmelidir.

Önemli

WPILib DifferentialDrive varsayılan olarak doğru motorları ters çevirir. Bu davranış, DifferentialDrive nesnesinde setRightSideInverted (false)/ `` SetRightSideInverted (false)`` (Java / C ++) çağrılarak değiştirilebilir.

Grafiklerin Önemi

:system’s 1 states, inputs and outputs ların güvenilir verileri, durum-uzay denetleyicileri ve gözlemcilerde hata ayıklarken önemlidir. Yaygın bir yaklaşım, bu verileri NetworkTables üzerinden göndermek ve aşağıdaki gibi araçları kullanmaktır:ref:`Shuffleboard <docs/software/wpilib-tools/shuffleboard/index:Shuffleboard>, bu, hem verilerin gerçek zamanlı grafiğini çizmemize hem de daha sonra bu tür araçlarla daha sonra çizim yapmak için bir CSV dosyasına kaydetmemize olanak tanır. Google E-Tablolar, Excel veya Python olarak.

Not

Varsayılan olarak, NetworkTables 10 hz güncelleme hızıyla sınırlıdır. Test için, 100 hz’ye kadar veri göndermek için aşağıdaki kod parçacığı ile bu atlanabilir. Yeni verileri zorla yayınlamak için bu kod periyodik olarak çalıştırılmalıdır.

Tehlike

Bu, NetworkTables üzerinden fazladan veri (100 hz’ye kadar) gönderecek ve bu, hem kullanıcı kodu hem de robot gösterge tablolarında gecikmeye neden olabilir. Bu aynı zamanda ağ kullanımını da artıracaktır. Yarışmalar sırasında bunu devre dışı bırakmak genellikle iyi bir fikirdir.

@Override
public void robotPeriodic() {
   NetworkTableInstance.getDefault().flush();
}

Giriş Gecikmesini Telafi Etme

Çoğu zaman, bazı sensör giriş verileri (yani hız okumaları), akıllı motor kontrol cihazlarının gerçekleştirme eğiliminde olduğu dahili filtreleme nedeniyle gecikebilir. Varsayılan olarak, LQR’nin K kazancı herhangi bir giriş gecikmesi olmadığını varsayar, bu nedenle onlarca milisaniye düzeyinde önemli bir gecikme uygulamak istikrarsızlığa neden olabilir. Bununla mücadele etmek için, LQR’nin K kazancı, istikrar için performansın takas edilmesi suretiyle azaltılabilir. Bu gecikmenin matematiksel olarak titiz bir şekilde nasıl telafi edileceğine dair bir kod örneği mevcuttur:ref:here <docs/software/advanced-controls/state-space/state-space-intro:LQR and Measurement Latency Compensation>.