Durum Uzayı - State-space Kontrolüne Giriş

Not

Bu makale, Tyler Veness’in izniyle, FRC ‘deki Controls Engineering’den alınmıştır.

PID’den Model Tabanlı-Model-Based Kontrol

PID denetleyicileri ayarlarken, mevcut, geçmiş ve gelecekle ilgili denetleyici parametreleriyle uğraşmaya odaklanıyoruz: temel sistem durumlarından ziyade error (P, I ve D terimleri). Bu yaklaşım pek çok durumda işe yarasa da, eksik bir dünya görüşüdür.

Model tabanlı kontrol, kontrol etmeye çalıştığımız system (mechanism) için doğru bir model geliştirmeye odaklanır. Bu modeller keyfi bir orantılı gains yerine sistemin fiziksel yanıtlarına dayalı olarak geribildirim denetleyicileri tarafından seçilen testler yoluyla elde edilen gains bilgilendirmeye yardımcı olur. Bu, sadece bir sistemin nasıl tepki vereceğini önceden tahmin etmemize değil, aynı zamanda kontrolörlerimizi fiziksel bir robot olmadan test etmemize ve basit hataların ayıklanmasında zamandan tasarruf etmemize olanak tanır.

Not

Durum uzayı kontrolü, doğrusal cebirden kapsamlı bir şekilde yararlanır. Doğrusal cebire ve kaynaklara giriş de dahil olmak üzere modern kontrol teorisinde doğrusal cebir hakkında daha fazla bilgi, Tyler Veness’in izniyle, Controls Engineering in FRC ‘deki 4.bölümde bulunabilir.

WPILib’in SimpleMotorFeedforward veya onun kardeş sınıfları için ileri besleme sınıflarını kullandıysanız veya PID’yi seçmek için FRC Karakterizasyonu kullandıysanız: terim: sizin için <gain> kazanır ‘, model tabanlı kontrole zaten aşinasınız! kv``ve ``ka :term:` kazançlar <gain> ‘, bir motorun (veya kolun veya aktarma organlarının) voltaja nasıl tepki vereceğini açıklamak için kullanılabilir. Bu sabitleri, WPILib’in ``LinearSystem` ini kullanarak standart durum-uzay gösterimine koyabiliriz, bunu daha sonraki bir makalede yapacağız.

Kelime bilgisi

For the background vocabulary that will be used throughout this article, see the Glossary.

Doğrusal Cebire Giriş

Lineer Cebirin temel kavramlarına kısa ve sezgisel bir giriş için, 3Blue1Brown’s Essence of linear algebra series in 1’den 4’e kadar olan bölümlerini öneriyoruz (Vektörler, bunlar ne bile ?, Doğrusal kombinasyonlar, aralık ve taban vektörleri, Doğrusal dönüşümler ve matrisler ve kompozisyon olarak Matris çarpımı).

Durum Uzayı nedir?

2D uzayın iki ekseni olduğunu hatırlayın: x ve y. Bu alandaki konumları, bir vektörde paketlenmiş bir çift sayı olarak temsil ederiz ve her koordinat, karşılık gelen eksen boyunca ne kadar hareket edileceğinin bir ölçüsüdür. Durum uzayı, her bir durum değişkeni için bir eksene sahip bir kartezyen koordinat sistemidir <https://en.wikipedia.org/wiki/Cartesian_coordinate_system>`__ve içindeki konumları, 2D uzay için yaptığımız gibi temsil ediyoruz: vektördeki sayıların bir listesiyle. Vektördeki her eleman, sistemin bir durumuna karşılık gelir. Bu örnek, bir asansör modelinin durum uzayında şu durumlara sahip iki örnek durum vektörünü gösterir:\([\text{position}, \text{velocity}]\):

Two vectors in state space with their corresponding arrows.

Bu görüntüde, durum uzayındaki durumları temsil eden vektörler oklardır. Şu andan itibaren bu vektörler, vektörün ucundaki bir nokta ile temsil edilecek, ancak vektörün geri kalanının hala orada olduğunu unutmayın.

state, :term:`girişleri <input> :term:`outputs <output>çıkışlarına ek olarak vektörler olarak temsil edilir. Mevcut durumlardan ve girdilerden durumdaki değişime haritalama bir denklemler sistemi olduğundan, bunu matris biçiminde yazmak doğaldır. Bu matris denklemi durum uzayı gösteriminde yazılabilir.

Durum Uzayı Gösterimi nedir?

Durum uzayı gösterimi, bir sistemin zaman içinde nasıl gelişeceğini açıklayan bir dizi matris denklemidir. Bu denklemler, \(\dot{\mathbf{x}}\), and the output \(\mathbf{y}\), değişikliklerini mevcut durum vektörünün doğrusal kombinasyonlarıyla ilişkilendirir \(\mathbf{x}\) and input vector \(\mathbf{u}\).

Durum alanı kontrolü, sürekli zamanlı ve ayrık zamanlı sistemlerle başa çıkabilir. Sürekli zaman durumunda, sistemin durumunun değişim oranı: \(\mathbf{\dot{x}}\) , geçerli durumun doğrusal bir kombinasyonu olarak ifade edilir: \(\mathbf{x}\) and input \(\mathbf{u}\).

Buna karşılık, ayrık zamanlı sistemler, bir sonraki zaman adımımızda sistemin durumunu şu anki duruma göre ifade eder. \(\mathbf{x}_{k+1}\) ve mevcut duruma göre :math: mathbf {x} _k ve girdi: math: mathbf {u} _k, burada \(k\) geçerli zaman adımıdır ve \(k+1\) sonraki zaman adımıdır.

Hem sürekli hem de ayrık zaman formlarında,`output` vector \(\mathbf{y}\), current: term: “state” ve:term:input ifadelerinin doğrusal bir kombinasyonu olarak ifade edilir . Çoğu durumda, çıktı, sistem durumunun bir alt kümesidir ve akım girişinden hiçbir katkısı yoktur.

Sistemleri modellerken, ilk olarak sürekli zaman gösterimini türetiyoruz çünkü hareket denklemleri doğal olarak bir sistemin durumunun değişim hızı olarak mevcut durumu ve girdilerinin doğrusal bir kombinasyonu olarak yazılır. Bu gösterimi robot üzerinde ayrık zamana dönüştürüyoruz çünkü sistemi sürekli yerine orada ayrı zaman adımlarında güncelliyoruz.

Aşağıdaki iki denklem seti, sürekli zaman ve ayrık zaman durum uzayı gösteriminin standart biçimidir:

\[\begin{split}\text{Continuous: } \dot{\mathbf{x}} &= \mathbf{A}\mathbf{x} + \mathbf{B}\mathbf{u} \\ \mathbf{y} &= \mathbf{C}\mathbf{x} + \mathbf{D}\mathbf{u} \\ \nonumber \\ \text{Discrete: } \mathbf{x}_{k+1} &= \mathbf{A}\mathbf{x}_k + \mathbf{B}\mathbf{u}_k \\ \mathbf{y}_k &= \mathbf{C}\mathbf{x}_k + \mathbf{D}\mathbf{u}_k\end{split}\]
\[\begin{split}\begin{array}{llll} \mathbf{A} & \text{system matrix} & \mathbf{x} & \text{state vector} \\ \mathbf{B} & \text{input matrix} & \mathbf{u} & \text{input vector} \\ \mathbf{C} & \text{output matrix} & \mathbf{y} & \text{output vector} \\ \mathbf{D} & \text{feedthrough matrix} & & \\ \end{array}\end{split}\]

Sürekli zaman durum uzay sistemi, ayrıklaştırma adı verilen bir süreçle ayrık zamanlı bir sisteme dönüştürülebilir.

Not

Ayrık zamanlı formda, sistemin durumu güncellemeler arasında sabit tutulur. Bu, rahatsızlıklara yalnızca durum tahminimiz güncellendiğinde tepki verebileceğimiz anlamına gelir. Tahminimizi daha hızlı güncellemek, performansın bir noktaya kadar iyileştirilmesine yardımcı olabilir. WPILib’in Notifier sınıfı, ana robot döngüsünden daha hızlı güncellemeler isteniyorsa kullanılabilir.

Not

Bir sistemin sürekli zaman ve ayrık zaman matrisleri A, B, C ve D aynı adlara sahipken, bunlar eşdeğer değildir. Sürekli zaman matrisleri, durum değişim oranını açıklarken:math:mathbf{x} , ayrık zaman matrisleri ise sistemin durumunu bir sonraki zaman adımında mevcut durum ve girdinin bir fonksiyonu olarak tanımlar.

Önemli

WPILib’in LinearSystem’i, sürekli zaman sistem matrislerini alır ve bunları gerektiğinde dahili olarak ayrık zaman biçimine dönüştürür.

Durum Uzayı Gösterimi Örneği: kV ve kA’dan volan

Recall ‘ı, fırçalanmış bir DC motora bağlı bir volanın hareketini şu denklemle modelleyebileceğimizi hatırlayın:math:V = kV cdot v + kA cdot a`, burada V, voltaj çıkışıdır, v çarkın açısal hızı ve a açısal ivmesidir. Bu denklem şu şekilde yeniden yazılabilir \(a = \frac{V - kV \cdot v}{kA}\) veya \(a = \frac{-kV}{kA} \cdot v + \frac{1}{kA} \cdot V\). Tanıdık bir şey fark ettiniz mi? Bu denklem, volanın açısal ivmesini, açısal hızı ve uygulanan voltaj ile ilişkilendirir.

Bu denklemi durum uzayı gösterimine dönüştürebiliriz. Bir durum (hız), bir input (voltage) ve bir output (velocity) olan bir sistem oluşturabiliriz. Hızın ilk türevinin ivme olduğunu hatırlayarak, denklemimizi aşağıdaki gibi yazabiliriz, hızı şu ile değiştirebiliriz: \(\mathbf{x}\), acceleration with \(\mathbf{\dot{x}}\) ve voltaj:math:mathbf{V} ile : math:mathbf {u}:

\[\mathbf{\dot{x}} = \begin{bmatrix}\frac{-kV}{kA}\end{bmatrix} \mathbf{x} + \begin{bmatrix}\frac{1}{kA}\end{bmatrix} \mathbf{u}\]

Bu kadar! Bu, kV ve kA sabitlerine sahip olduğumuz bir sistemin durum uzayı modelidir. Aynı matematik, FRC Karakterizasyonunda volanları ve aktarma organı hız sistemlerini modellemek için kullanılır.

Durum Uzayı Yanıtlarını Görselleştirme: Faz Portresi

Bir`phase portrait <https://en.wikipedia.org/wiki/Phase_portrait>`__ , durum uzayındaki bir sistemin tepkisi için görsel bir sezgi sağlamaya yardımcı olabilir. Grafikteki vektörlerin kökleri bir noktada vardır: durum uzayında \(\mathbf{x}\) ve \(\mathbf{\dot{x}}\),yönünü, yani sistem zamanla gelişecektir. Bu örnek, açı ve açısal hız durumlarıyla bir sarkaç modelini göstermektedir.

Bir sistemin durum uzayında alabileceği potansiyel bir yörüngeyi izlemek için, başlamak üzere bir nokta seçin ve etrafındaki okları takip edin. Bu örnekte, \([-2, 0]\) ile başlayabiliriz. Oradan, biz dikeyde döndükçe hız artar ve salınımın zıt ucuna ulaşana kadar azalmaya başlar. Kökenle ilgili bu dönme döngüsü sonsuza kadar tekrar eder.

Pendulum Phase Plot with arrows all around going roughly in a circle.

Faz portresinin kenarlarının yakınında, X ekseninin saat yönünün tersine: math: pi radyan dönüşü olarak sarıldığına ve \(\pi\) radyanının saat yönünde bir dönüşünün aynı noktada sona ereceğine dikkat edin.

Diferansiyel denklemler ve faz portreleri hakkında daha fazla bilgi için, bkz.`3Blue1Brown Diferansiyel Denklemler videosu <https://www.youtube.com/watch?v=p_di4Zn4wz4>`__ - saat 15: 30’da sarkaç faz uzayını canlandırmak için harika bir iş çıkarırlar.

Feedforward’ı Görselleştirme

Bu aşama portresi, sistemin”open loop” tepkilerini, yani devletin doğal olarak gelişmesine izin verirsek nasıl tepki vereceğini gösterir. Sarkacı yatay olarak dengelemek istiyorsak (at \((\frac{\pi}{2}, 0)\) in state space), bir şekilde bir kontrol uygulamamız gerekir: term: input Sarkacın açık döngü eğiliminin aşağı doğru sallanma eğilimine karşı koymak için. Feedforward’ın yapmaya çalıştığı budur - bunu, faz portremizin durum uzayındaT reference AMkonumunda (veya ayar noktasında) bir dengeye sahip olmasını sağlayın.

Faz portremize daha önce baktığımızda şunu görebiliriz \((\frac{\pi}{2}, 0)\) durum uzayında, yerçekimi bir miktar T torku ile sarkacı aşağı çekiyor ve biraz aşağı doğru üretiyor sarkacın büyüklük : math:frac{tau}{I} ile açısal ivmesi, burada açısal: terim: eylemsizlik momenti. Matematik :(frac{pi} {2}, 0): terim: referansımız ‘da bir denge oluşturmak istiyorsak, bir: terim uygulamamız gerekir :`input, sistemin doğal olarak aşağı doğru sallanma eğilimi. Buradaki amaç math:mathbf{0 = Ax+Bu} denklemini \(\mathbf{u}\) için çözmektir. Aşağıda, sabit input uyguladığımız bir faz portresi gösterilmektedir \((\frac{\pi}{2}, 0)\):

Pendulum phase plot with equilibrium at (pi/2, 0).

Geri bildirim kontrolü

Bir DC motor söz konusu olduğunda, sadece matematiksel bir modelle ve sistemin tüm mevcut durumlarının bilgisiyle (örneğin, açısal hız), gelecekteki voltaj girişleri verildiğinde gelecekteki tüm durumları tahmin edebiliriz. Ancak sistem, bir yük veya beklenmedik sürtünme gibi denklemlerimiz tarafından modellenmeyen herhangi bir şekilde bozulursa, motorun açısal hızı zamanla modelden sapacaktır. Bununla mücadele etmek için, motora bir geri besleme kontrolörü kullanarak düzeltici komutlar verebiliriz.

PID kontrolörü, bir geri besleme kontrolü biçimidir. Durum uzayı kontrolü genellikle şunları kullanır control law, burada \(\mathbf{K}\) bazı kontrolcü gain matrisi, \(\mathbf{r}\) reference durumu ve :matematik:`\mathbf{x}` durum uzayındaki mevcut durumdur. Bu iki vektör arasındaki fark \(\mathbf{r-x}\), :term:`error`dır.

\[\mathbf{u} = \mathbf{K(r - x)}\]

Bu control law, sistemimizin her durumu için oransal bir denetleyicidir. Oransal denetleyiciler, sistemimizin durumunu durum uzayındaki referans durumuna çeken yazılım tanımlı yaylar oluşturur. Kontrol edilen sistemin konum ve hız durumlarına sahip olması durumunda, yukarıdaki :terim:`control law`, aynı zamanda konumu ve hız hatasını sıfıra çekmeye çalışan bir PD kontrolörü gibi davranacaktır.

Bu kontrol yasasının uygulamada bir örneğini gösterelim. Sarkaç sistemini yukarıdan kullanacağız, burada sallanan sarkaç durum uzayında orijini daire içine aldı. \(\mathbf{K}\) sıfır matrisinin (tümü sıfır olan bir matris), sıfırın P ve D kazançlarını toplama gibi olacağı durum – kontrol yok girdi uygulanabilir ve aşama portresi yukarıdakiyle aynı görünecektir.

Geri bildirim eklemek için, rasgele olarak bir \(\mathbf{K}\) of [2, 2] seçiyoruz; burada sarkaç için bizim input açısal ivmedir. Bu K, her bir konumun radyan hata için, açısal ivmenin saniyede 2 radyan kare olacağı anlamına gelir; benzer şekilde, :terim:`hata` nın her saniyesinde her radyan için saniyede 2 radyan kare hızlanırız. Durum uzayında bir yerden içeriye doğru bir oku takip etmeyi deneyin - başlangıçtaki koşullar ne olursa olsun, durum, saf ileri beslemeyle sonsuza kadar daire çizmek yerine referans a yerleşecektir.

Closed loop pendulum phase plot with reference at (pi/2, 0).

Ancak, sistemimiz için bir optimal :terim:`kazanç` matrisi K’yi nasıl seçebiliriz? Manuel olarak şu seçimi yapabilsek de :terim:`<gain> kazanır` ve sistem yanıtını simüle edebilir veya bir PID kontrolörü gibi robot üzerinde ayarlayabilirken, modern kontrol teorisinin daha iyi bir cevabı var :Linear-Quadratic Regulator (LQR).

Linear-Quadratic Regulator / Doğrusal-Kuadratik Düzenleyici

Model tabanlı kontrol, bir başlangıç koşulu ve gelecekteki kontrol girdileri verilen bir sistemin gelecekteki durumlarını tahmin edebileceğimiz anlamına geldiğinden, matematiksel olarak en uygun olanı seçebiliriz gain matrix \(\mathbf{K}\). Bunu yapmak için, önce “iyi” veya “kötü” nün neye benzeyeceğini tanımlamalıyız \(\mathbf{K}\) . Bunu, hata karesini ve zaman içindeki kontrol girdisini toplayarak yaparız, bu da bize kontrol yasamızın ne kadar “kötü” olacağını gösteren bir sayı verir. Bu miktarı en aza indirirsek, optimal kontrol yasasına ulaşmış olacağız.

LQR: Tanım

Doğrusal Karesel Düzenleyiciler, aşağıdaki maliyet fonksiyonunu en aza indiren bir :term:control-law / kontrol yasası bularak çalışır; bu, doğrusal system dynamics \(\mathbf{\dot{x} = Ax + Bu}\) ve control effort nın toplamına ağırlık verir.

\[J = \int\limits_0^\infty \left(\mathbf{x}^T\mathbf{Q}\mathbf{x} + \mathbf{u}^T\mathbf{R}\mathbf{u}\right) dt\]

\(\mathbf{J}\) yi en aza indiren kontrol yasası şöyle yazılabilir \(\mathbf{u = K(r - x)}\), burada \(r-x\); :term:`error`dır.

Not

LQR tasarımının \(\mathbf{Q}\) ve \(\mathbf{R}\) matrisleri ayrıklaştırmaya ihtiyaç duymaz, ancak \(\mathbf{K}\) sürekli zaman ve ayrık zaman için hesaplanır systems farklı olacaktır.

LQR: ayarlama

PID kontrolörlerinin kazançlarını değiştirilerek ayarlanabildiği gibi, kontrol yasamızın hatamızı ve girdimizi nasıl dengelediğini de değiştirmek istiyoruz. Örneğin, bir uzay gemisi belirli bir referansa ulaşmak için harcadığı yakıtı en aza indirmek isteyebilirken, yüksek hızlı bir robotik kolun bozulmalara hızlı tepki vermesi gerekebilir.

LQR’mizdeki hata ve kontrol çabasını \(\mathbf{Q}\) ve \(\mathbf{R}\) matrisleriyle ağırlıklandırabiliriz. Maliyet fonksiyonumuzda (kontrol yasamızın ne kadar “kötü” performans göstereceğini açıklar), \(\mathbf{Q}\) ve \(\mathbf{R}\), hatamızı ve kontrol girdimizi birbirine göre ağırlıklandırır. Yukarıdaki uzay gemisi örneğinde, hatayı çok fazla cezalandırmak istemediğimizi göstermek için nispeten küçük sayılarla \(\ mathbf{Q}\) kullanabiliriz, oysa \(\mathbf{R}\) yakıt harcamanın istenmeyen olduğunu göstermek için büyük olabilir.

WPILib ile LQR sınıfı, istenen maksimum durum sapmalarını ve kontrol çabalarının bir vektörünü alır ve bunları dahili olarak Bryson kuralıyla tam Q ve R matrislerine dönüştürür. Bu vektörlere atıfta bulunmak için genellikle küçük harf \(\mathbf{q}\) ve \(\mathbf{r}\) kullanır ayrıca matrisleri belirtmek için \(\mathbf{Q}\) ve \(\mathbf{R}\) kullanır.

\(\mathbf{q}\) öğelerini artırmak, LQR’yi daha az ağır ağırlıklı büyük hatalar yapacaktır ve sonuçta ortaya çıkan kontrol yasası daha tutucu davranacaktır. Bu, \(\mathbf{q}\)‘nin öğelerini azaltarak :terim:`kontrol çabası` yı daha ağır cezalandırmaya benzer bir etkiye sahiptir .

Benzer şekilde \(\mathbf{q}\) öğelerini azaltmak, LQR’nin büyük hataları daha ağır cezalandırmasına neden olur ve sonuçta ortaya çıkan kontrol yasası daha agresif davranır. Bu, \(\mathbf{q}\) öğelerini artırarak cezalandırmaya benzer bir etkiye sahiptir.

Örneğin, konum ve hız durumlarına sahip bir asansör sistemi için aşağıdaki Q ve R’yi kullanabiliriz.

// Example system -- must be changed to match your robot.
LinearSystem<N2, N1, N1> elevatorSystem = LinearSystemId.identifyPositionSystem(5, 0.5);
LinearQuadraticRegulator<N2, N1, N1> controller = new LinearQuadraticRegulator(elevatorSystem,
    // q's elements
    VecBuilder.fill(0.02, 0.4),
    // r's elements
    VecBuilder.fill(12.0),
    // our dt
    0.020);

LQR: örnek uygulama

Gerçek dünya örneğine bir Linear-Quadratic Regulator uygulayalım. \(kV = 1 \frac{\text{volts}}{\text{radian per second}}\) ve \(kA = 1.5 \frac{\text{volts}}{\text{radian per second squared}}\) sahip olmak için sistem tanımlaması yoluyla belirlenen bir volan hız sistemimiz olduğunu varsayalım. Yukarıdaki volan örneğini kullanarak, aşağıdaki doğrusal system elde ederiz:

\[\mathbf{\dot{x}} = \begin{bmatrix}\frac{-kV}{kA}\end{bmatrix} v + \begin{bmatrix}\frac{1}{kA}\end{bmatrix} V\]

\([12\ \text{volts}]\) nın \(q = [0.1\ \text{rad/sec}]\), ve \(\mathbf{r}\) si ile İstenilen bir durum sapmasını (maksimum hata) keyfi olarak seçeriz. 20 ms’lik bir zaman adımı ile ayrıklaştırmadan sonra, \(\mathbf{K} = ~81\) nın bir gain kazancını buluruz. Bu K gain volanın hızı üzerindeki bir PID döngüsünün orantılı bileşeni olarak işlev görür.

Haydi \(\mathbf{q}\) ve \(\mathbf{r}\) yi ayarlayalım. \(\mathbf{Q}\) and \(\mathbf{R}\) oluşturmak için kullandığımız q öğelerini artırmanın veya \(\mathbf{r}\) öğelerini azaltmanın denetleyicimizin control effort unu ağır bir şekilde cezalandıracağınız biliyoruz, bu yakıt ekonomisini iyileştirmek için bir arabayı daha sakin bir şekilde sürmeye benzer. Aslında, eğer error toleransımız q yu 0,1’den 1,0’a yükseltirsek, bizim gain matrix \(\mathbf{K}\) ~81’den ~11’e düşer. Benzer şekilde, maksimum voltajımızı \(r\) yi 12,0’dan 1,2’ye düşürmek de \(\mathbf{K}\) de aynı sonucu verir .

Aşağıdaki grafik, volanın açısal hızını ve zaman içinde uygulanan voltajı iki farklı gainile gösterir. Daha yüksek bir gain ın sistemin referansa daha hızlı (t = 0,8 saniyede) ulaşmasını sağlarken, motorumuzu daha uzun süre 12V’de doygun tutacağını görebiliriz. Bu, bir PID kontrol cihazının P kazancını ~8x faktörü ile artırmakla tamamen aynıdır.

Flywheel velocity and voltage over time.

LQR ve Ölçüm Gecikme Telafisi

Çoğu zaman, sensörlerimizin ölçümleriyle ilişkili bir gecikmeye sahiptir. Örneğin CAN üzerinden SPARK MAX motor kontrolörü, hız ölçümleriyle ilişkili 30 ms’ye kadar gecikmeye sahip olabilir.

Bu gecikme, geri bildirim denetleyicimizin geçmişteki durum tahminlerine göre voltaj komutları oluşturacağı anlamına gelir. Bu, genellikle aşağıdaki grafikte gösterildiği gibi sistemimize kararsızlık ve salınımlar getirme etkisine sahiptir.

Ancak, denetleyicimizi sistemin state nin gelecekte sapacağı yeri kontrol edecek şekilde modelleyebiliriz. Bu, LQR’nin gain matrix \(\mathbf{K}\) ‘yi azaltarak, kararlılık için denetleyici performansını değiştirecektir. Gecikmeyi hesaba katmak için gain matrisini ayarlayan aşağıdaki formül, frc karakterizasyonunda da kullanılır.

\[\mathbf{K_{compensated}} = \mathbf{K} \cdot \left(\mathbf{A} - \mathbf{BK}\right)^{\text{delay} / dt}\]

\(\mathbf{A} - \mathbf{BK}\) ile \(\mathbf{K}\) çarpmak temelde kazançları bir zaman adımı ilerletir. Bu durumda, kazançları ölçüm gecikmesiyle ilerletmek için \(\left(\mathbf{A} - \mathbf{BK}\right)^{\text{delay} / dt}\) ile çarpıyoruz.

Flywheel velocity and voltage with dt=5.0ms and a 10.0ms delay.

Not

Bu, \(\mathbf{K}\) ‘yi sıfıra düşürerek geribildirim kontrolünü etkin bir şekilde devre dışı bırakma etkisine sahip olabilir.

Not

SPARK MAX motor kontrolörü, 19,5 ms gecikmeli 40-kademe FIR filtresi kullanır ve durum çerçeveleri varsayılan olarak her 20 ms’de bir gönderilir.

Aşağıdaki kod, sensör giriş gecikmeleri için LQR kontrol cihazının K kazancının nasıl ayarlanacağını gösterir:

// Adjust our LQR's controller for 25 ms of sensor input delay. We
// provide the linear system, discretization timestep, and the sensor
// input delay as arguments.
controller.latencyCompensate(elevatorSystem, 0.02, 0.025);

Doğrusallaştırma

Doğrusallaştırma, doğrusal olmayan fonksiyonları ve durum uzay sistemlerini doğrusal olanları kullanarak kestirmek için kullanılan bir araçtır. İki boyutlu uzayda doğrusal fonksiyonlar düz çizgilerdir, doğrusal olmayan fonksiyonlar ise eğri olur. Doğrusal olmayan bir fonksiyonun yaygın bir örneği ve buna karşılık gelen doğrusal yaklaşımı şöyledir \(y=\sin{x}\). Bu fonksiyon şu şekilde yaklaştırılabilir \(y = x\) sıfıra yakın. Bu yaklaşım, \(x=0\) a yakın iken doğrudur, ancak doğrusallaştırma noktasından uzaklaştıkça doğruluğu kaybeder. Örneğin, \(\sin{x} \approx x\) yaklaşımı \(y = 0\) 0,5 radyan içinde 0,02 aralığında doğrudur, ancak bundan sonra doğruluğu hızla kaybeder. Aşağıdaki resimde şunu görüyoruz \(y =\sin{x}\), \(y=x\) ve yaklaşık ile gerçek değeri arasındaki fark \(\sin{x}\) at \(x\).

Three plots showing sin(x), x, and sin(x) - x.

Doğrusal olmayan dynamics” ile durum uzay sistemlerini de doğrusallaştırabiliriz. Bunu durum uzayında bir nokta :math:mathbf{x}` seçerek ve bunu doğrusal olmayan fonksiyonlarımızın girdisi olarak kullanarak yapıyoruz. Yukarıdaki örnekte olduğu gibi, bu, sistemin doğrusallaştırıldığı noktaya yakın durumlar için iyi çalışır, ancak bu durumdan hızla uzaklaşabilir.