Regulator PID w robotyce – jak robot steruje pozycją, prędkością i ruchem?

Robot nie wykonuje ruchu idealnie tylko dlatego, że otrzymał polecenie „ustaw przegub na 30°” albo „jedź z prędkością 1 m/s”. Rzeczywisty mechanizm ma masę, bezwładność, tarcie, luzy, ograniczoną moc napędu i podlega zakłóceniom. Dlatego układ sterowania musi stale porównywać wartość zadaną z wartością rzeczywistą i na tej podstawie korygować sygnał sterujący.

Jednym z najbardziej rozpowszechnionych sposobów realizacji takiego sterowania jest regulator PID – proportional-integral-derivative. W robotyce może być wykorzystywany między innymi do regulacji pozycji przegubu, prędkości koła, prędkości osi czy momentu napędowego. W klasycznym ujęciu regulator oblicza sygnał sterujący na podstawie aktualnego błędu, jego historii oraz szybkości zmian błędu.

Dobrym przykładem jest pojedynczy przegub ramienia robotycznego. Enkoder mierzy jego aktualny kąt, sterownik porównuje go z kątem zadanym, a regulator PID decyduje, jak mocno napęd powinien zareagować. Proces jest wykonywany wielokrotnie w pętli sprzężenia zwrotnego aż do osiągnięcia wymaganej pozycji lub trajektorii.

PID pozostaje także częścią współczesnych architektur robotycznych. Oficjalny pid_controller w środowisku ros2_control może pracować z różnymi interfejsami stanu i sterowania, m.in. pozycją, prędkością, przyspieszeniem i effort, a także współpracować z członem feedforward.

W tym artykule przejdziemy od intuicyjnego wyjaśnienia działania członów P, I i D, przez przykład sterowania przegubem robota, aż do strojenia regulatora, układów kaskadowych i zastosowania PID w ROS 2. Jednocześnie pokażemy, gdzie kończą się możliwości prostego regulatora PID i dlaczego w bardziej zaawansowanych robotach bywa on łączony z modelem dynamiki, feedforwardem lub innymi metodami sterowania.

Chcesz lepiej zrozumieć technologie wykorzystywane w robotach?

W Akademii Robotyki LEDIO Robotics znajdziesz również materiały o enkoderach, IMU, kinematyce, LiDAR, SLAM, ROS 2 i programowaniu robotów.

Akademia Robotyki

Czym jest regulator PID w robotyce?

Regulator PID to algorytm sterowania ze sprzężeniem zwrotnym, którego zadaniem jest zmniejszanie różnicy pomiędzy wartością zadaną a wartością rzeczywiście zmierzoną w układzie. Skrót PID pochodzi od trzech członów regulatora: P – proporcjonalnego, I – całkującego oraz D – różniczkującego.

W robotyce regulator może na przykład otrzymać informację, że przegub powinien znajdować się pod kątem 30°, podczas gdy enkoder wskazuje 27°. Powstaje wtedy uchyb regulacji, czyli różnica pomiędzy wartością zadaną a zmierzoną:

e(t) = wartość zadana − wartość zmierzona

Na podstawie tego błędu regulator oblicza sygnał sterujący kierowany do napędu. W zależności od architektury układu może to być między innymi polecenie momentu, siły, prądu, napięcia albo wartość przekazywana do kolejnej wewnętrznej pętli regulacji.

Klasyczne sterowanie PID jest jednym z najczęściej stosowanych rodzajów sterowania ze sprzężeniem zwrotnym. W materiałach Modern Robotics regulator PID jest omawiany bezpośrednio na przykładzie pojedynczego przegubu robota, dla którego sygnałem sterującym jest moment lub siła.

Najważniejsza idea jest prosta: regulator nie zakłada, że robot wykonał polecenie poprawnie. Mierzy rezultat ruchu, porównuje go z wartością zadaną i na bieżąco wprowadza korektę. To właśnie zamknięta pętla sprzężenia zwrotnego odróżnia regulację PID od prostego wysłania polecenia do silnika bez sprawdzania efektu.

Zamknięta pętla sterowania

Jak regulator PID kontroluje ruch robota?

Układ nieustannie porównuje wartość zadaną z pomiarem i koryguje pracę napędu.

SET

Wartość zadana

Pozycja, prędkość lub inna wielkość, którą robot ma osiągnąć.

PID

Regulator

Oblicza reakcję na podstawie błędu oraz jego zmian w czasie.

DRV

Napęd

Silnik i sterownik wykonują polecenie regulatora.

ROB

Ruch robota

Przegub, koło lub inny element zmienia swoje położenie.

Podstawowy uchyb regulacji e(t) = wartość zadana − wartość zmierzona

Warto od razu zaznaczyć, że PID nie zawsze musi występować w pełnej postaci. W wielu układach stosuje się regulatory P, PI albo PD, a w robotyce manipulacyjnej często spotyka się sterowanie PD bez członu całkującego, jeśli jego użycie nie jest potrzebne do realizacji zadania. Materiały MIT dotyczące sterowania manipulatorami również pokazują PID jako podstawową metodę śledzenia trajektorii, ale wskazują, że w części zastosowań człon całkujący może być pomijany.

Dlaczego robot potrzebuje sprzężenia zwrotnego?

Gdyby robot sterował napędem wyłącznie na podstawie wcześniej obliczonego polecenia, bez sprawdzania rzeczywistego efektu, mielibyśmy do czynienia ze sterowaniem w pętli otwartej. Taki układ zakładałby, że zadany sygnał zawsze wywoła dokładnie taki sam ruch. W rzeczywistym robocie założenie to zwykle nie jest wystarczające, ponieważ na mechanizm wpływają tarcie, zmieniające się obciążenie, grawitacja, niedokładności modelu oraz zakłócenia zewnętrzne.

Sprzężenie zwrotne zamyka pętlę informacji. Robot mierzy aktualny stan, porównuje go ze stanem wymaganym i na podstawie powstałego błędu koryguje sterowanie. Zamiast wykonać jedno polecenie i założyć, że cel został osiągnięty, regulator wielokrotnie podejmuje niewielkie działania korygujące. Takie podejście pozwala reagować również na zakłócenia, których nie uwzględniono wcześniej w modelu.

Wyobraźmy sobie przegub ramienia, który ma osiągnąć 30°. Sterownik uruchamia silnik, ale ciężar trzymanego przedmiotu powoduje, że ramię zatrzymuje się na 28°. W pętli otwartej system może nawet nie wiedzieć, że wystąpił błąd. W układzie ze sprzężeniem zwrotnym enkoder mierzy 28°, regulator wykrywa uchyb i zwiększa lub odpowiednio modyfikuje sterowanie napędem.

Sprzężenie zwrotne nie gwarantuje jednak automatycznie idealnego zachowania. Odpowiedź układu może charakteryzować się między innymi uchybem ustalonym, przeregulowaniem i określonym czasem ustalania. To właśnie dobór regulatora i jego parametrów decyduje, czy robot osiągnie cel szybko, dokładnie i bez nadmiernych oscylacji. Modern Robotics traktuje analizę odpowiedzi błędu jako jeden z podstawowych etapów projektowania układu sterowania robotem.

Open loop vs closed loop

Dwa sposoby sterowania ruchem robota

Kluczowa różnica polega na tym, czy system sprawdza rzeczywisty rezultat swojego działania.

Pętla otwarta

Bez informacji o wyniku

Sterownik wysyła polecenie do napędu, ale nie wykorzystuje pomiaru rzeczywistego efektu do jego bieżącej korekty.

Polecenie
Sterownik
Napęd i robot
Zakłócenie może zmienić rezultat ruchu, a system nie wykorzystuje tego błędu do automatycznej korekty.
Pętla zamknięta

Sterowanie ze sprzężeniem zwrotnym

Czujnik mierzy rzeczywisty stan robota, a regulator wykorzystuje różnicę pomiędzy pomiarem i wartością zadaną.

Wartość zadana
Regulator PID
Napęd i robot
Czujnik
↺ Pomiar wraca do regulatora i rozpoczyna kolejną korektę
Układ może wykrywać odchylenie od celu i reagować na nie w kolejnych iteracjach sterowania.

Przykład: przegub ma osiągnąć 30°

30° Pozycja zadana
28° Pomiar z enkodera
+2° Uchyb regulacji
Korekta PID odpowiednio zmienia sterowanie napędu

Sprzężenie zwrotne nie oznacza, że robot natychmiast osiągnie wartość zadaną. Regulator musi zostać odpowiednio zaprojektowany i dostrojony, aby układ był stabilny oraz osiągał cel z akceptowalnym czasem odpowiedzi i dokładnością.

MIT w materiałach poświęconych robotyce opisuje tę różnicę bardzo praktycznie: zamiast wykonywać jedną wcześniej ustaloną akcję, robot ze sprzężeniem zwrotnym wykorzystuje czujniki do kolejnych korekt zależnych od aktualnej sytuacji.

W przypadku manipulatora pomiar pozycji przegubu może być bezpośrednio wykorzystany do śledzenia zadanej trajektorii. Materiały MIT Robotic Manipulation pokazują właśnie taki przykład regulatora PID, w którym różnica pomiędzy pozycją zadaną i zmierzoną staje się podstawą sterowania przegubem.

Wartość zadana, wartość zmierzona i uchyb regulacji

Każdy regulator PID potrzebuje trzech podstawowych informacji: wartości zadanej, wartości zmierzonej oraz wynikającego z nich uchybu regulacji. To właśnie uchyb jest sygnałem, na podstawie którego regulator decyduje, jak mocno powinien zareagować układ napędowy.

Wartość zadana określa stan, który robot powinien osiągnąć. Może to być na przykład kąt przegubu równy 30°, prędkość koła 2 rad/s albo prędkość liniowa platformy 0,5 m/s.

Wartość zmierzona pochodzi z czujnika albo estymatora stanu. W przypadku przegubu może być to kąt odczytany z enkodera, a w przypadku prędkości — wartość obliczona na podstawie kolejnych pomiarów położenia.

Różnica pomiędzy wartością zadaną a zmierzoną tworzy uchyb regulacji:

e(t) = r(t) − y(t)

gdzie r(t) oznacza wartość zadaną, y(t) wartość zmierzoną, a e(t) błąd regulacji. Taką konwencję stosuje się powszechnie w teorii sterowania i materiałach dotyczących PID.

Jeżeli przegub ma osiągnąć 30°, a enkoder wskazuje 27°, uchyb wynosi +3°. Jeżeli natomiast robot przekroczy punkt docelowy i osiągnie 32°, uchyb zmieni znak i wyniesie −2°. Znak błędu informuje więc regulator również o kierunku, w którym należy wprowadzić korektę.

W praktyce regulator nie analizuje jednak wyłącznie jednej chwilowej wartości błędu. Człon proporcjonalny reaguje na jego aktualną wartość, człon całkujący uwzględnia błąd nagromadzony w czasie, a człon różniczkujący ocenia szybkość jego zmian. To właśnie dzięki temu pełny regulator PID może reagować inaczej na duży błąd początkowy, niewielkie odchylenie utrzymujące się przez długi czas oraz gwałtowne zbliżanie się do wartości zadanej.

Podstawa działania PID

Regulator steruje na podstawie różnicy

Wartość zadana i rzeczywisty pomiar są porównywane w każdej iteracji pętli sterowania.

r

Wartość zadana

Stan, który robot powinien osiągnąć.

y

Wartość zmierzona

Aktualny stan określony na podstawie czujnika.

=
e

Uchyb regulacji

Informacja o wielkości i kierunku odchylenia od celu.

Robot poniżej celu 30° − 27° = +3°

Regulator powinien kontynuować ruch w stronę wartości zadanej.

Cel osiągnięty 30° − 30° = 0°

W idealnym przypadku nie występuje błąd położenia.

Przekroczenie celu 30° − 32° = −2°

Znak błędu zmienia się i regulator odpowiednio zmienia reakcję.

Uchyb regulacji e(t) = r(t) − y(t)

Sam uchyb nie mówi jeszcze, jaka powinna być reakcja napędu. O sposobie wykorzystania błędu decydują współczynniki P, I i D, które określają znaczenie jego aktualnej wartości, historii oraz szybkości zmian.

Z czego składa się regulator PID?

Regulator PID łączy trzy sposoby reagowania na uchyb regulacji. Każdy z nich analizuje błąd z innej perspektywy: człon P reaguje na jego aktualną wartość, człon I uwzględnia błąd nagromadzony w czasie, a człon D reaguje na tempo jego zmian.

Można więc potraktować PID jako połączenie informacji o teraźniejszości, przeszłości i zmianie błędu. Takie ujęcie jest zgodne z klasycznym opisem regulatora PID w teorii sterowania.

Współczynniki Kp, Ki i Kd określają, jak duży wpływ ma każdy z tych trzech członów na końcowy sygnał sterujący. Regulator nie musi przy tym zawsze wykorzystywać wszystkich składników. W praktyce spotyka się również regulatory P, PI i PD, zależnie od dynamiki układu i wymagań zadania.

Człon P – proporcjonalny

Człon P reaguje bezpośrednio na aktualny uchyb. Im większa różnica pomiędzy wartością zadaną i zmierzoną, tym większa jest jego reakcja.

Jeżeli przegub powinien znajdować się w pozycji 30°, a aktualnie znajduje się przy 10°, regulator widzi duży błąd i człon proporcjonalny może wygenerować silną reakcję. Gdy przegub zbliży się do 29°, uchyb będzie znacznie mniejszy, więc również udział członu P w sterowaniu będzie mniejszy.

Siłę tego działania określa współczynnik Kp. Zbyt mała wartość Kp może powodować powolną i mało zdecydowaną reakcję układu. Zwiększanie Kp zwykle przyspiesza reakcję na błąd, ale zbyt duże wzmocnienie może prowadzić do przeregulowania, oscylacji, a w pewnych układach nawet utraty stabilności. Dokładny efekt zależy od dynamiki sterowanego mechanizmu.

Człon I – całkujący

Człon I analizuje błąd, który utrzymywał się w czasie. Jeżeli niewielki uchyb występuje przez dłuższy okres, jego wpływ jest stopniowo akumulowany.

Załóżmy, że przegub powinien utrzymywać 30°, ale pod wpływem grawitacji i obciążenia stale zatrzymuje się na 29°. Człon P reaguje na błąd 1°, lecz jego działanie może nie wystarczyć do całkowitego usunięcia odchylenia. Człon całkujący będzie natomiast gromadził ten utrzymujący się błąd i zwiększał swoją korektę, dopóki uchyb nie zostanie zredukowany.

Za jego wpływ odpowiada współczynnik Ki. Jedną z podstawowych zalet członu całkującego jest możliwość eliminowania uchybu ustalonego wynikającego np. ze stałego zakłócenia. Jednocześnie zbyt silne działanie całki może pogarszać odpowiedź układu, dlatego jej stosowanie wymaga ostrożnego strojenia.

Człon D – różniczkujący

Człon D reaguje na szybkość zmian błędu. Nie interesuje go wyłącznie to, jak duży jest uchyb w danej chwili, lecz również jak szybko sytuacja się zmienia.

Jeżeli przegub bardzo szybko zbliża się do pozycji zadanej, człon różniczkujący może zwiększyć działanie tłumiące i ograniczyć tendencję do przekroczenia celu. Z tego powodu składnik D jest często kojarzony z poprawą tłumienia i ograniczaniem przeregulowania.

Jego wpływ określa współczynnik Kd. Człon D jest jednak bardziej wrażliwy na szybkozmienne zakłócenia i szum pomiarowy, ponieważ operacja różniczkowania może wzmacniać wysokoczęstotliwościowe zmiany sygnału. Do tego problemu wrócimy później w osobnej sekcji dotyczącej szumu i filtracji.

Trzy elementy regulatora

P + I + D – trzy różne sposoby obserwowania błędu

Końcowa reakcja regulatora powstaje z połączenia działania członu proporcjonalnego, całkującego i różniczkującego.

P

Człon proporcjonalny

Reaguje na aktualną wartość uchybu. Im większy błąd, tym silniejsze działanie tego członu.

Współczynnik Kp – reakcja na aktualny błąd
I

Człon całkujący

Akumuluje błąd występujący w czasie i pomaga usuwać trwałe odchylenie od wartości zadanej.

Współczynnik Ki – reakcja na nagromadzony błąd
D

Człon różniczkujący

Reaguje na tempo zmian błędu i może zwiększać tłumienie podczas szybkiego zbliżania się do celu.

Współczynnik Kd – reakcja na szybkość zmian błędu
I – przeszłość Co działo się z błędem w poprzednich chwilach?
P – teraźniejszość Jak duży jest błąd właśnie teraz?
D – tempo zmian Jak szybko zmienia się aktualny błąd?
Ważne: P, I i D nie są trzema osobnymi poleceniami wysyłanymi do napędu. Ich wartości są odpowiednio skalowane współczynnikami Kp, Ki i Kd, a następnie łączone w jeden sygnał sterujący.

W robotyce nie zawsze korzysta się z pełnego PID. Przykładowo materiały MIT dotyczące sterowania manipulatorami wskazują, że w niektórych zadaniach manipulacyjnych często stosuje się PD, czyli Ki = 0. Dobór struktury regulatora zależy więc od właściwości mechanizmu oraz charakteru zadania.

Jak wygląda równanie regulatora PID?

Działanie wszystkich trzech członów można zapisać jednym równaniem. W najczęściej stosowanej, równoległej postaci regulatora PID sygnał sterujący ma postać:

u(t) = Kp · e(t) + Ki · ∫e(τ)dτ + Kd · de(t)/dt

gdzie u(t) jest sygnałem wyjściowym regulatora, e(t) oznacza uchyb regulacji, a współczynniki Kp, Ki i Kd określają udział członu proporcjonalnego, całkującego i różniczkującego. Taką postać prawa sterowania podają zarówno materiały MIT dotyczące teorii sterowania, jak i Modern Robotics w przykładzie sterowania pojedynczym przegubem robota.

Równanie można czytać jako sumę trzech niezależnie obliczanych składników. Człon P odpowiada za reakcję na błąd występujący właśnie teraz. Człon I uwzględnia sumę błędów z poprzednich chwil. Człon D wykorzystuje informację o tym, jak szybko błąd rośnie lub maleje.

W przypadku przegubu robota sygnał u(t) może reprezentować na przykład zadany moment napędowy. Modern Robotics omawia właśnie taki przypadek: regulator obserwuje błąd położenia przegubu, a jego wyjściem jest moment sterujący działający na oś.

Ważne jest również to, że wartości Kp, Ki i Kd nie są uniwersalne. Ich jednostki oraz wartości zależą od tego, jaka wielkość jest regulowana i co stanowi sygnał wyjściowy. Inne nastawy będą potrzebne przy regulacji kąta przegubu momentem, a inne przy regulacji prędkości koła.

Prawo sterowania

Trzy składniki tworzą jeden sygnał sterujący

Regulator oblicza osobno reakcję P, I i D, a następnie sumuje je na swoim wyjściu.

u(t) = Kpe(t) + Ki∫e(τ)dτ + Kdde(t)/dt
P

Składnik proporcjonalny

Kp · e(t)

Aktualny błąd jest mnożony przez wzmocnienie Kp.

I

Składnik całkujący

Ki · ∫e(τ)dτ

Regulator uwzględnia błąd nagromadzony w czasie.

D

Składnik różniczkujący

Kd · de(t)/dt

Reakcja zależy od szybkości zmian uchybu regulacji.

Reakcja P
+
Reakcja I
+
Reakcja D
=
u(t) – sterowanie napędem
u(t) – sygnał wyjściowy regulatora
e(t) – aktualny uchyb regulacji
Kp – wzmocnienie proporcjonalne
Ki – wzmocnienie całkujące
Kd – wzmocnienie różniczkujące
t – czas

W rzeczywistym sterowniku obliczenia są wykonywane cyfrowo w kolejnych chwilach próbkowania. Całka jest wtedy wyznaczana na podstawie nagromadzonych próbek błędu, a pochodna na podstawie zmian sygnału pomiędzy kolejnymi iteracjami.

To ostatnie rozróżnienie jest istotne. Równanie zapisane powyżej opisuje idealny regulator w czasie ciągłym, natomiast komputer sterujący robotem działa dyskretnie — wykonuje obliczenia w określonych odstępach czasu. MIT przedstawia zarówno klasyczne równanie PID, jak i jego interpretację jako regulatora reagującego proporcjonalnie na błąd, jego całkę i pochodną.

W praktycznym sterowniku robota czas pomiędzy kolejnymi iteracjami będzie więc miał duże znaczenie. Do częstotliwości pętli sterowania wrócimy później, ponieważ niewłaściwy czas próbkowania może wpływać na działanie części I i D.

Jak działa regulator PID – krok po kroku?

Działanie regulatora PID można najlepiej zrozumieć jako ciąg powtarzających się obliczeń wykonywanych w pętli sterowania. W każdej iteracji system odczytuje aktualny stan robota, porównuje go z wartością zadaną, oblicza uchyb, wyznacza składniki P, I i D, a następnie wysyła nowe polecenie do napędu.

Załóżmy, że przegub ramienia powinien osiągnąć 30°, a w danej chwili enkoder wskazuje 20°. Regulator otrzymuje więc dodatni uchyb równy 10°. Człon P reaguje na jego aktualną wartość, człon I uwzględnia błędy zgromadzone podczas wcześniejszych iteracji, a człon D analizuje, jak szybko uchyb się zmienia.

Po zsumowaniu tych trzech składników powstaje sygnał sterujący. Napęd zmienia położenie przegubu, enkoder wykonuje kolejny pomiar i cały proces rozpoczyna się ponownie. W ten sposób regulator nie wykonuje jednej dużej korekty, lecz wielokrotnie aktualizuje sterowanie na podstawie bieżącego stanu robota.

Taką ideę zamkniętej pętli sterowania wykorzystuje również współczesny pid_controller w ros2_control: kontroler otrzymuje wartość odniesienia i stan zmierzony, oblicza błąd, a następnie generuje polecenie dla odpowiedniego interfejsu sprzętowego. Aktualna dokumentacja pozwala również pracować w układach kaskadowych oraz wykorzystywać pochodną sygnału odniesienia i sprzężenia zwrotnego.

W przypadku sterowania momentem przegubu robotycznego sytuacja jest jeszcze bardziej wymagająca, ponieważ ruch zależy od dynamiki mechanizmu: masy, bezwładności, grawitacji i oddziaływań pomiędzy członami. Modern Robotics wykorzystuje właśnie taki przykład do pokazania sterowania PID pojedynczym przegubem.

Jedna iteracja pętli

Od pomiaru do kolejnej korekty napędu

Sterownik wykonuje ten sam cykl wielokrotnie, aktualizując sygnał sterujący na podstawie bieżącego błędu.

1

Odczyt wartości zadanej

Sterownik otrzymuje informację, jaki stan powinien osiągnąć robot, np. pozycję przegubu równą 30°.

2

Pomiar aktualnego stanu

Czujnik lub estymator stanu informuje regulator, gdzie robot znajduje się w danej chwili.

3

Obliczenie uchybu

Wartość zmierzona jest odejmowana od wartości zadanej, co daje aktualny błąd regulacji.

4

Obliczenie P, I i D

Regulator wyznacza reakcję na bieżący błąd, jego historię oraz szybkość zmian.

5

Wyznaczenie sterowania

Składniki P, I i D są sumowane, tworząc sygnał wyjściowy przekazywany do napędu lub kolejnej pętli sterowania.

6

Nowy pomiar

Po wykonaniu korekty system ponownie odczytuje stan robota i rozpoczyna następną iterację.

Przykład: przegub zbliża się do pozycji 30°

Wartość zadana 30°
Pierwszy pomiar 20°
Uchyb +10°
Reakcja PID
Po korekcie przegub może osiągnąć np. 25°. W kolejnej iteracji uchyb wynosi już tylko +5°, więc regulator ponownie oblicza odpowiednią reakcję. Proces trwa dalej podczas śledzenia wartości zadanej.

Regulator nie musi czekać, aż robot całkowicie zakończy poprzedni ruch. W typowym cyfrowym układzie sterowania kolejne pomiary i obliczenia wykonywane są cyklicznie podczas ruchu, zgodnie z częstotliwością pętli sterowania.

Istotne jest też rozróżnienie między regulacją a planowaniem trajektorii. Regulator PID nie decyduje zwykle, gdzie robot powinien znaleźć się za kilka sekund. Otrzymuje wartość zadaną lub kolejne punkty odniesienia z warstwy nadrzędnej i stara się możliwie dokładnie je śledzić. Aktualna dokumentacja ros2_control również rozdziela te role: dedykowany PID nie służy do interpolowania trajektorii pomiędzy wieloma punktami — do tego przeznaczone są inne kontrolery, np. JointTrajectoryController.

To rozróżnienie będzie ważne później, gdy będziemy omawiać układy kaskadowe i ros2_control.

Przykład: sterowanie pozycją jednego przegubu robota

Rozważmy pojedynczy przegub ramienia robotycznego, którego pozycja jest mierzona przez enkoder. Układ nadrzędny zadaje kąt 30°, natomiast aktualny pomiar wynosi 20°. Regulator otrzymuje więc uchyb:

e = 30° − 20° = 10°

Na tej podstawie obliczane są składniki regulatora. Człon P reaguje na aktualny błąd 10°. Człon I uwzględnia błędy nagromadzone w poprzednich iteracjach, a człon D ocenia, jak szybko różnica pomiędzy pozycją zadaną i rzeczywistą maleje lub rośnie.

Jeżeli wyjściem regulatora jest moment zadany dla przegubu, otrzymany sygnał sterujący wpływa na silnik, a następnie na ruch mechanizmu. Po krótkim czasie enkoder może wskazać na przykład 24°. Uchyb zmniejsza się wtedy do 6° i regulator wykonuje kolejne obliczenie. Proces jest powtarzany podczas całego ruchu.

Warto zauważyć, że w takim przykładzie sterownik nie mówi po prostu silnikowi: „obróć się o 10°”. Regulator określa jak należy oddziaływać na napęd, aby zmniejszyć błąd wynikający z aktualnego stanu mechanizmu. Przy sterowaniu momentowym na ruch wpływają jednocześnie bezwładność, tarcie, grawitacja i obciążenie przegubu. Z tego powodu ten sam moment nie musi zawsze powodować identycznej zmianę położenia. Modern Robotics wykorzystuje właśnie pojedynczy przegub sterowany momentem jako podstawowy przykład wyjaśniający PID w robotyce.

Szczególnie ciekawy jest wpływ grawitacji. Dla regulatora PD stabilizującego przegub w określonej pozycji moment grawitacyjny może powodować niezerowy uchyb ustalony. Dodanie członu całkującego pozwala usuwać taki trwały błąd, ponieważ całka narasta tak długo, jak długo uchyb się utrzymuje.

Przykład robotyczny

Regulacja pozycji pojedynczej osi

Zadaniem regulatora jest prowadzenie rzeczywistego przegubu tak, aby możliwie dokładnie śledził pozycję zadaną.

30°

Pozycja zadana

Układ nadrzędny określa, gdzie powinien znaleźć się przegub.

PID

Regulator

Porównuje cel z pomiarem i wyznacza odpowiednią korektę.

τ

Moment napędowy

Silnik wytwarza moment działający na przegub robota.

ARM

Ruch przegubu

Rzeczywisty mechanizm reaguje zgodnie ze swoją dynamiką.

Start 20°

Uchyb: +10°

Kolejny pomiar 24°

Uchyb: +6°

Zbliżanie do celu 28,5°

Uchyb: +1,5°

Stan bliski zadanemu ≈30°

Uchyb bliski zeru

Regulator PD i stałe obciążenie

Jeżeli na przegub działa stały moment, np. wynikający z grawitacji, sam człon P może wymagać niezerowego błędu, aby wygenerować moment równoważący obciążenie.

PID i człon całkujący

Utrzymujący się uchyb jest akumulowany przez człon I, dzięki czemu regulator może wygenerować dodatkowe sterowanie i ograniczyć uchyb ustalony.

Podane wartości 20°, 24° i 28,5° służą wyłącznie do ilustracji kolejnych iteracji regulatora. Rzeczywisty przebieg zależy od parametrów PID, napędu, obciążenia, dynamiki mechanizmu oraz częstotliwości pętli sterowania.

Dlaczego przegub nie zatrzymuje się po prostu dokładnie na 30°?

To ważne pytanie. Regulator sterujący rzeczywistym robotem działa na układ dynamiczny. Człon ma określoną masę i bezwładność, a silnik wytwarza moment, który powoduje przyspieszenie. Gdy przegub zbliża się do punktu zadanego, nadal może posiadać prędkość, więc zbyt agresywne sterowanie może doprowadzić do przekroczenia celu.

Właśnie tutaj szczególne znaczenie ma człon D, który może zwiększać tłumienie poprzez reakcję na zmianę błędu. Odpowiednio dobrane P i D pozwalają kształtować szybkość oraz tłumienie odpowiedzi, natomiast I może kompensować trwałe zakłócenia. Modern Robotics pokazuje to na przykładzie odpowiedzi pojedynczego przegubu oraz porównania PD i PID w obecności grawitacji.

Jednocześnie PID nie jest jedynym możliwym rozwiązaniem. Jeżeli dostępny jest odpowiednio dokładny model dynamiki robota, można przewidywać wymagany moment wynikający z bezwładności, grawitacji i tarcia, a PID lub PD pozostawić przede wszystkim do korygowania błędów modelu i zakłóceń. To prowadzi do metod takich jak computed-torque control, które Modern Robotics omawia jako kolejny krok po klasycznym PID.

Sterowanie pozycją, prędkością i momentem – czym się różnią?

W robotyce regulator PID może pracować w różnych warstwach układu sterowania. Nie zawsze reguluje tę samą wielkość. W jednym robocie jego zadaniem może być utrzymanie pozycji przegubu, w innym – prędkości obrotowej, a w jeszcze innym – pośrednie sterowanie momentem napędowym.

Najważniejsze jest rozróżnienie pomiędzy wielkością zadaną, wielkością mierzoną oraz sygnałem wyjściowym regulatora.

Przy sterowaniu pozycją wartością zadaną może być kąt przegubu, np. 30°. Regulator porównuje go z pozycją zmierzoną przez enkoder. Jego wyjście nie musi jednak bezpośrednio oznaczać „nowej pozycji silnika”. W zależności od konstrukcji napędu może być to zadana prędkość dla kolejnego regulatora albo zadany moment.

Przy sterowaniu prędkością układ porównuje prędkość zadaną z prędkością rzeczywistą. Regulator próbuje wtedy zmniejszyć różnicę pomiędzy tymi wartościami, a jego wyjściem może być np. żądany moment lub prąd napędu.

W sterowaniu momentem poziom abstrakcji jest jeszcze niższy. Układ próbuje uzyskać określony moment działający na przegub. W Modern Robotics sterowanie PID analizowane jest właśnie dla przypadku, w którym sygnałem wejściowym dynamiki robota jest moment lub siła. Przy takim sterowaniu trzeba bezpośrednio uwzględniać dynamikę mechanizmu.

Sterowanie pozycją

W sterowaniu pozycyjnym głównym celem jest osiągnięcie i utrzymanie określonego położenia.

Przykład:

pozycja zadana: 45°

pozycja zmierzona: 42°

uchyb pozycji: +3°

Regulator reaguje tak, aby zmniejszyć tę różnicę.

Takie sterowanie jest naturalne w ramionach robotycznych, chwytakach, osiach liniowych czy mechanizmach robotów humanoidalnych, gdzie nadrzędny system często określa docelowe pozycje przegubów.

Sterowanie prędkością

Tutaj wartością regulowaną jest prędkość.

Przykład:

prędkość zadana: 5 rad/s

prędkość zmierzona: 4,6 rad/s

uchyb prędkości: +0,4 rad/s

Takie podejście jest powszechne między innymi w układach napędowych kół robotów mobilnych oraz wewnętrznych pętlach serwonapędów.

Regulator prędkości nie musi wiedzieć, do jakiego punktu końcowego zmierza robot. Jego zadaniem może być wyłącznie utrzymanie zadanej prędkości obrotowej danej osi.

Sterowanie momentem

Sterowanie momentem jest związane bezpośrednio z siłowym oddziaływaniem napędu na mechanizm.

Moment obrotowy wpływa na przyspieszenie przegubu zgodnie z dynamiką robota. Dlatego identyczny moment może wywołać różne zachowanie zależnie od pozycji ramienia, masy ładunku, grawitacji czy oddziaływania pozostałych członów.

W rzeczywistym serwonapędzie moment silnika jest często powiązany z prądem generującym moment, ale moment i prąd nie są pojęciami tożsamymi. Przeliczenie zależy m.in. od właściwości silnika i sposobu sterowania napędem.

Warstwy sterowania

Ta sama oś może być sterowana na różnych poziomach

Pozycja, prędkość i moment opisują inne wielkości, dlatego każdy regulator otrzymuje inny rodzaj błędu.

θ

Pozycja

Cel: osiągnięcie określonego położenia
Pomiar: np. enkoder
Przykład: przegub ma osiągnąć 45°
ω

Prędkość

Cel: utrzymanie zadanej prędkości
Pomiar: prędkość osi
Przykład: koło ma obracać się 5 rad/s
τ

Moment

Cel: uzyskanie określonego momentu
Pomiar: zależnie od konstrukcji napędu
Przykład: moment działający na przegub

Przykładowa hierarchia serwonapędu

Pozycja zadana zewnętrzna pętla
Regulator pozycji wyznacza np. prędkość zadaną
Regulator prędkości wyznacza np. żądany moment
Sterowanie napędem realizuje polecenie

Jest to przykład architektury kaskadowej, a nie obowiązkowa budowa każdego robota. Konkretna struktura zależy od serwonapędu, dostępnych interfejsów oraz poziomu sterowania udostępnionego przez producenta.

To rozróżnienie dobrze widać również w ros2_control. Interfejs sprzętowy może udostępniać dla przegubu różne interfejsy stanu i poleceń, m.in. position, velocity oraz effort. W dokumentacji effort odpowiada wielkości siłowej: dla ruchu obrotowego jest to moment, a dla ruchu liniowego – siła.

Nie oznacza to jednak, że każdy robot udostępnia wszystkie te poziomy użytkownikowi. Często producent serwonapędu realizuje część szybkich pętli regulacji wewnątrz napędu, a aplikacja robotyczna otrzymuje jedynie interfejs pozycyjny lub prędkościowy. Z punktu widzenia programisty można więc wydawać polecenia pozycji, mimo że niżej działają kolejne, niewidoczne dla niego pętle sterowania.

Regulator PID a enkoder

W wielu układach robotycznych enkoder jest jednym z podstawowych źródeł sprzężenia zwrotnego dla regulatora. Dostarcza informacji o rzeczywistym położeniu osi, a na podstawie kolejnych pomiarów może być również wyznaczana jej prędkość.

Regulator PID sam w sobie nie „wie”, gdzie znajduje się przegub. Potrzebuje pomiaru stanu robota. Jeżeli zadana pozycja osi wynosi 45°, a enkoder wskazuje 42°, regulator otrzymuje informację o uchybie wynoszącym 3° i na tej podstawie wyznacza odpowiednią reakcję.

Schemat jest więc bardzo prosty:

pozycja zadana → regulator → napęd → przegub → enkoder → pozycja zmierzona → regulator

Enkoder i regulator pełnią jednak zupełnie różne funkcje. Enkoder jest elementem pomiarowym – informuje system o stanie mechanizmu. PID jest algorytmem sterowania – wykorzystuje ten pomiar do obliczenia korekty.

W środowisku ros2_control stan przegubów może być udostępniany poprzez interfejsy takie jak position, velocity i effort. joint_state_broadcaster publikuje dostępne informacje o ruchu przegubów w /joint_states, natomiast kontrolery mogą wykorzystywać odpowiednie interfejsy stanu jako sprzężenie zwrotne.

Czy regulator PID zawsze korzysta bezpośrednio z enkodera?

Nie. W rzeczywistym robocie pomiędzy fizycznym enkoderem a regulatorem mogą znajdować się dodatkowe warstwy przetwarzania. Pomiar może być skalowany, filtrowany, przeliczany przez przekładnię albo łączony z innymi informacjami w estymatorze stanu.

Regulator może więc otrzymywać już przygotowaną wartość pozycji lub prędkości, nie mając bezpośredniego dostępu do surowych impulsów enkodera.

W przypadku bardziej złożonych robotów jeden sygnał pomiarowy może także nie wystarczać. Robot kroczący lub humanoidalny może wykorzystywać jednocześnie enkodery przegubów, IMU, czujniki siły i inne sensory, a regulator pracuje wtedy na stanie wyznaczonym przez odpowiednią warstwę estymacji.

Pomiar i sterowanie to dwa różne zadania

Enkoder informuje system, co rzeczywiście zrobił mechanizm. Regulator PID decyduje, jak należy na tę informację zareagować.

ENC

Enkoder – pomiar

Określa położenie osi, a jego dane mogą być również wykorzystywane do wyznaczania prędkości ruchu.

PID

Regulator – decyzja

Porównuje zmierzony stan z wartością zadaną i oblicza odpowiedni sygnał sterujący.

Przykład: zadane 45° → enkoder mierzy 42° → uchyb +3° → regulator koryguje sterowanie → wykonywany jest kolejny pomiar.

PID w układzie kaskadowym

W wielu rzeczywistych robotach jedna pętla regulacji nie steruje całym napędem od początku do końca. Zamiast tego stosuje się układ kaskadowy, w którym kilka regulatorów pracuje jeden za drugim na różnych poziomach sterowania.

Typowy przykład wygląda następująco:

pozycja → prędkość → moment lub prąd → napęd

Zewnętrzna pętla może kontrolować pozycję przegubu. Jej wyjściem nie jest wtedy bezpośrednio sygnał dla silnika, lecz na przykład zadana prędkość. Ta staje się wartością odniesienia dla kolejnego regulatora, który steruje prędkością i może wyznaczać wymagany moment. Jeszcze niżej serwonapęd może posiadać własną, bardzo szybką pętlę regulacji prądu silnika.

Takie rozwiązanie pozwala rozdzielić zadania sterowania. Zewnętrzna pętla odpowiada za dokładność położenia, natomiast wewnętrzne pętle reagują na szybsze zjawiska zachodzące bezpośrednio w napędzie.

Dlaczego stosuje się kilka pętli?

Poszczególne wielkości w napędzie zmieniają się z różną dynamiką. Prąd silnika może być regulowany znacznie szybciej niż pozycja całego przegubu robota. Z tego powodu wewnętrzne pętle są zazwyczaj projektowane tak, aby reagowały szybciej niż pętle znajdujące się wyżej w hierarchii.

Dzięki temu regulator pozycji nie musi samodzielnie zajmować się wszystkimi szczegółami pracy silnika. Może założyć, że niższa warstwa w rozsądnym zakresie zrealizuje zadaną prędkość lub moment.

Przykład dla przegubu robota

Załóżmy, że przegub powinien osiągnąć 60°. Aktualna pozycja wynosi 50°.

Regulator pozycji wykrywa uchyb +10° i może wyznaczyć na przykład:

zadana prędkość = +2 rad/s

Regulator prędkości porównuje następnie tę wartość z rzeczywistą prędkością osi. Jeżeli enkoder wskazuje 1,5 rad/s, powstaje kolejny uchyb:

2,0 − 1,5 = +0,5 rad/s

Na jego podstawie niższa pętla wyznacza odpowiednie sterowanie napędem.

W efekcie wyjście jednego regulatora staje się wartością zadaną dla kolejnego. To właśnie jest istota regulacji kaskadowej.

Regulacja kaskadowa

Jedna pętla przekazuje zadanie kolejnej

W serwonapędzie kilka regulatorów może pracować hierarchicznie, od sterowania położeniem aż do sterowania napędem.

Pozycja zadana np. 60°
Regulator pozycji wyznacza prędkość zadaną
Regulator prędkości wyznacza żądany moment
Sterowanie napędem realizuje polecenie silnika
Ruch osi rzeczywista odpowiedź mechanizmu
Pętla zewnętrzna

Pozycja

Odpowiada przede wszystkim za śledzenie położenia zadanego.

Pętla pośrednia

Prędkość

Kontroluje szybkość ruchu i reaguje szybciej niż pętla pozycji.

Pętla wewnętrzna

Napęd

Może kontrolować moment, prąd lub inną wielkość zależnie od konstrukcji serwonapędu.

Przykład:

60° pozycji zadanej → regulator pozycji wyznacza 2 rad/s → regulator prędkości wyznacza wymagane sterowanie → napęd porusza przegub → pomiary wracają do odpowiednich pętli.

Pokazany schemat jest przykładową architekturą. Rzeczywisty robot może mieć inną liczbę pętli, a część regulatorów może być zaimplementowana bezpośrednio w serwonapędzie i niedostępna dla programisty systemu nadrzędnego.

Układy kaskadowe w ROS 2

ros2_control obsługuje również łączenie kontrolerów w łańcuchy. Kontroler może udostępniać swoje interfejsy referencyjne innemu kontrolerowi, dzięki czemu wyjście jednego elementu może stać się wejściem następnego. Oficjalna dokumentacja opisuje tę funkcję jako controller chaining / cascade control.

Dobrym przykładem jest demonstracja robota różnicowego w ros2_control, gdzie diff_drive_controller wyznacza prędkości kół, a następnie dwa regulatory PID sterują poszczególnymi kołami. Dokumentacja pokazuje więc dokładnie tę samą ideę: warstwa nadrzędna określa wartość odniesienia, a regulator niższego poziomu realizuje ją na sprzęcie.

Sam pid_controller również może działać jako element takiego łańcucha, zarówno z kontrolerem poprzedzającym, jak i następującym. Co istotne, jego konfiguracja zależy od użytych interfejsów — dokumentacja podaje przykłady m.in. regulacji position → velocity, velocity → acceleration czy sterowania przy zgodnych interfejsach pozycji, prędkości lub effort.

Jak dobiera się Kp, Ki i Kd?

Dobór współczynników Kp, Ki i Kd, nazywany strojeniem regulatora PID, decyduje o tym, jak szybko i dokładnie robot będzie reagował na wartość zadaną oraz czy jego ruch pozostanie stabilny.

Nie istnieje jeden zestaw nastaw odpowiedni dla wszystkich robotów. Wartości regulatora zależą m.in. od bezwładności mechanizmu, przełożenia, tarcia, mocy napędu, obciążenia, częstotliwości pętli sterowania oraz rodzaju regulowanej wielkości. Nastawy dobre dla nieobciążonego przegubu mogą nie być optymalne po zamontowaniu ciężkiego chwytaka albo przenoszonego ładunku.

W przypadku prostego modelu pojedynczego przegubu Modern Robotics pokazuje bezpośredni związek pomiędzy Kp a szybkością odpowiedzi oraz pomiędzy Kd a tłumieniem układu. Dodanie Ki pozwala usuwać uchyb ustalony, ale jednocześnie zwiększa rząd układu i może pogorszyć jego stabilność, jeśli wzmocnienie całkujące zostanie dobrane zbyt agresywnie.

Co zmienia zwiększanie Kp?

Kp określa, jak silnie regulator reaguje na aktualny błąd.

Przy bardzo małym Kp robot może reagować powoli i „miękko”. Zwiększenie Kp zazwyczaj powoduje bardziej zdecydowaną reakcję oraz szybsze zbliżanie się do wartości zadanej.

Nie można jednak zwiększać Kp bez ograniczeń. Przy zbyt dużym wzmocnieniu mogą pojawić się przeregulowanie, oscylacje, pobudzanie niezamodelowanych rezonansów mechanicznych albo ograniczenia napędu.

W modelu pojedynczego przegubu omawianym w Modern Robotics Kp wpływa bezpośrednio na częstotliwość naturalną odpowiedzi układu. W rzeczywistym robocie sytuację komplikują jednak opóźnienia, elastyczność konstrukcji, przekładnia i ograniczona częstotliwość sterowania.

Co zmienia zwiększanie Kd?

Kd zwiększa reakcję na szybkość zmian błędu. W odpowiednio zaprojektowanym układzie może działać podobnie do tłumienia, ograniczając tendencję przegubu do przekraczania wartości zadanej.

Jeżeli Kp powoduje szybką, ale zbyt oscylacyjną odpowiedź, właściwie dobrany człon D może poprawić tłumienie i uspokoić ruch.

Zbyt duże Kd również nie jest korzystne. Człon różniczkujący jest szczególnie wrażliwy na szum i szybkie zmiany sygnału pomiarowego, dlatego w rzeczywistych sterownikach często stosuje się odpowiednią filtrację. Do tego problemu wrócimy w dalszej części artykułu.

Co zmienia zwiększanie Ki?

Ki odpowiada za działanie całkujące. Jego podstawowym zadaniem jest eliminowanie błędu, który utrzymuje się przez dłuższy czas.

Przykładem może być przegub, który pod wpływem stałego obciążenia zatrzymuje się o 0,5° poniżej wartości zadanej. Człon I będzie gromadził ten utrzymujący się uchyb i stopniowo zwiększał odpowiednią korektę.

Z Ki należy jednak postępować ostrożnie. MIT zwraca uwagę, że w przeciwieństwie do prostego regulatora PD samo ustawienie dodatnich Kp, Ki i Kd nie gwarantuje stabilności. Zbyt silne działanie całkujące może prowadzić do oscylacji lub destabilizacji pętli.

Praktyczna kolejność strojenia PID

Dla prostych, bezpiecznych do testowania układów często stosuje się podejście stopniowe. MIT przedstawia praktyczną heurystykę, w której najpierw dobiera się działanie proporcjonalne i różniczkujące tak, aby uzyskać akceptowalną odpowiedź przejściową, a dopiero później ostrożnie dodaje człon całkujący w celu usunięcia uchybu ustalonego.

W uproszczeniu proces może wyglądać następująco:

małe Kp → zwiększanie Kp → dodanie Kd → ocena odpowiedzi → dopiero później niewielkie Ki

Nie jest to jednak uniwersalny algorytm strojenia. W nowoczesnych systemach wykorzystuje się również modele matematyczne, identyfikację obiektu, symulacje oraz automatyczne algorytmy doboru parametrów.

Strojenie regulatora

Jak zmiana Kp, Ki i Kd wpływa na zachowanie robota?

Każde wzmocnienie odpowiada za inny element odpowiedzi. Ich dobór musi uwzględniać dynamikę konkretnego mechanizmu.

Kp

Reakcja na bieżący błąd

Za małe: reakcja może być zbyt powolna lub zbyt słaba.
Zwiększenie: zwykle daje bardziej zdecydowaną odpowiedź.
Za duże: możliwe przeregulowanie, oscylacje i pobudzanie rezonansów.
Ki

Usuwanie trwałego błędu

Za małe: uchyb ustalony może pozostawać przez długi czas.
Zwiększenie: wzmacnia korektę utrzymującego się błędu.
Za duże: może powodować oscylacje i pogorszenie stabilności.
Kd

Tłumienie zmian

Za małe: odpowiedź może być słabo tłumiona.
Zwiększenie: może ograniczać przeregulowanie i oscylacje.
Za duże: zwiększa wrażliwość na szum i może pogarszać pracę układu.

Uproszczona kolejność ręcznego strojenia

1. Małe Kp rozpocznij od łagodnej reakcji
2. Zwiększaj Kp uzyskaj odpowiednią szybkość reakcji
3. Dobierz Kd popraw tłumienie odpowiedzi
4. Dodaj Ki tylko jeśli potrzebne jest usunięcie uchybu ustalonego
Ważne: powyższa kolejność jest metodą poglądową, a nie uniwersalną procedurą uruchamiania każdego robota. Podczas strojenia rzeczywistego napędu należy stosować ograniczenia prędkości, momentu i zakresu ruchu oraz przewidzieć możliwość bezpiecznego zatrzymania mechanizmu.

Metody Zieglera–Nicholsa – czy nadal mają zastosowanie?

Jedną z najbardziej znanych klasycznych metod strojenia PID jest metoda Zieglera–Nicholsa. Pozwala oszacować początkowe nastawy regulatora na podstawie charakterystyki badanego układu.

MIT nadal przedstawia ją jako przykład heurystycznego strojenia, ale jednocześnie wyraźnie wskazuje ograniczenia tej metody: reguły są oparte na określonych założeniach dotyczących dynamiki obiektu i nie powinny być traktowane jako uniwersalny przepis.

W robotyce takie nastawy mogą być co najwyżej punktem startowym. Wymagania dotyczące dokładności, przeregulowania, ograniczeń momentu, rezonansów mechanicznych i bezpieczeństwa sprawiają, że końcowe parametry zwykle wymagają dalszej analizy i testów.

W szczególności nie należy celowo doprowadzać dużego, ciężkiego lub szybkiego robota do niekontrolowanych oscylacji tylko po to, aby eksperymentalnie znaleźć graniczne wzmocnienie regulatora. Metodę strojenia trzeba dopasować do możliwości bezpiecznego testowania konkretnego układu.

Co się dzieje przy źle dobranych nastawach PID?

Źle dostrojony regulator można często rozpoznać już po przebiegu ruchu robota. Przegub może zbyt wolno dochodzić do wartości zadanej, przekraczać ją, wielokrotnie oscylować wokół celu albo pozostawiać trwały uchyb.

Nie należy jednak przypisywać każdego takiego zachowania wyłącznie nastawom PID. Podobne objawy mogą powodować również opóźnienia komunikacyjne, luzy przekładni, elastyczność konstrukcji, nasycenie napędu, błędny pomiar czy nieuwzględniona dynamika mechanizmu. Regulacja musi być więc oceniana razem z właściwościami całego układu.

Zbyt wolna odpowiedź

Jeżeli regulator reaguje zbyt łagodnie, robot potrzebuje dużo czasu na osiągnięcie wartości zadanej. Przyczyną może być między innymi zbyt małe wzmocnienie proporcjonalne albo nadmierne tłumienie.

Sam wolny ruch nie oznacza oczywiście błędu — w niektórych zastosowaniach właśnie taka odpowiedź może być pożądana. Problem pojawia się wtedy, gdy układ nie spełnia wymaganej dynamiki zadania.

Przeregulowanie

Przeregulowanie występuje wtedy, gdy odpowiedź przekracza wartość zadaną.

Jeżeli przegub ma zatrzymać się przy 30°, może chwilowo osiągnąć np. 33°, a dopiero później wrócić w kierunku celu. Niewielkie przeregulowanie nie zawsze jest niedopuszczalne, ale w robotyce może mieć szczególne znaczenie przy ruchu w pobliżu przeszkód, ograniczników mechanicznych albo podczas precyzyjnej manipulacji.

Człon D może zwiększać tłumienie i ograniczać przeregulowanie. Materiały MIT opisują właśnie tę rolę działania różniczkującego: przeciwdziała ono ruchowi w kierunku zerowego błędu, co może zmniejszać tendencję do przekroczenia punktu docelowego.

Oscylacje wokół wartości zadanej

Przy niewłaściwym doborze parametrów przegub może wielokrotnie przechodzić przez wartość zadaną:

29° → 31,5° → 29,4° → 30,8° → 29,7°...

Jeżeli amplituda takich oscylacji stopniowo maleje, odpowiedź jest tłumiona i może ostatecznie osiągnąć stan ustalony. Jeżeli oscylacje utrzymują się lub narastają, oznacza to poważniejszy problem ze stabilnością układu.

W Modern Robotics pokazano, że dodanie członu całkującego może usuwać uchyb ustalony, ale jednocześnie może zwiększać przeregulowanie i oscylacje, a przy niewłaściwych nastawach prowadzić nawet do niestabilności.

Uchyb ustalony

Robot może również zatrzymać się blisko wartości zadanej, ale nigdy jej dokładnie nie osiągnąć.

Przykład:

wartość zadana: 30°

pozycja ustalona: 29,3°

uchyb ustalony: 0,7°

W przypadku regulatora PD działającego na przegub obciążony grawitacją taki niezerowy uchyb może być potrzebny do wygenerowania momentu proporcjonalnego równoważącego stałe obciążenie. Człon I pozwala wówczas wytworzyć wymagane sterowanie także przy zerowym uchybie pozycji.

Odpowiedź układu

Jak robot dochodzi do wartości zadanej?

Schematyczne przebiegi pokazują typowe różnice pomiędzy różnymi odpowiedziami układu regulacji.

1. Odpowiedź zbyt wolna

Układ zmierza do celu, ale potrzebuje na to dużo czasu.

wartość zadana czas
Objaw: długi czas narastania i dojścia do celu.

2. Odpowiedź dobrze tłumiona

Robot szybko zbliża się do celu bez dużego przekroczenia.

wartość zadana czas
Objaw: krótka odpowiedź i niewielkie odchylenia.

3. Przeregulowanie

Układ przekracza wartość zadaną, a następnie do niej wraca.

wartość zadana czas
Objaw: chwilowe przekroczenie celu.

4. Odpowiedź oscylacyjna

Robot wielokrotnie przechodzi przez wartość zadaną.

wartość zadana czas
Objaw: naprzemienne przekraczanie celu.
Linia przerywana oznacza wartość zadaną, a linia ciągła schematyczną odpowiedź układu w czasie.

Wykresy mają charakter poglądowy. Nie istnieje jeden uniwersalny „idealny” przebieg PID. Dopuszczalny czas odpowiedzi, przeregulowanie i uchyb zależą od konkretnego robota oraz wymagań aplikacji.

MIT zwraca również uwagę na ważny kompromis: bardzo duże tłumienie może ograniczać oscylacje, ale jednocześnie powodować nadmiernie wolną odpowiedź. Z kolei człon całkujący poprawia eliminację uchybu ustalonego, lecz może zwiększać przeregulowanie, wydłużać przebieg przejściowy i prowadzić do zjawiska integrator windup.

Saturacja, integral wind-up i anti-windup

W równaniu PID łatwo założyć, że regulator może wygenerować dowolnie duży sygnał sterujący. Rzeczywisty napęd ma jednak ograniczenia fizyczne. Silnik ma maksymalny prąd i moment, falownik ograniczone napięcie, a sterownik może mieć zdefiniowany maksymalny zakres polecenia.

Jeżeli regulator obliczy wartość większą niż napęd jest w stanie wykonać, następuje saturacja, czyli nasycenie sygnału sterującego.

Przykładowo regulator może żądać momentu:

τ = 12 Nm

podczas gdy napęd jest ograniczony do:

τmax = 6 Nm

Do silnika zostanie więc przekazane najwyżej 6 Nm. Z punktu widzenia regulatora błąd może jednak nadal pozostawać duży.

I właśnie tutaj może pojawić się problem nazywany integral wind-up.

Czym jest saturacja regulatora?

Saturacja oznacza osiągnięcie ograniczenia sygnału sterującego. Nawet jeśli obliczony wynik PID nadal rośnie, rzeczywisty napęd nie może zwiększać swojej reakcji ponad dostępne maksimum.

W praktyce może to nastąpić między innymi podczas gwałtownego przyspieszania ciężkiego ramienia, próby zatrzymania szybko poruszającego się przegubu albo wtedy, gdy robot próbuje wykonać ruch niemożliwy z powodu przeszkody lub ograniczenia mechanicznego.

Sama saturacja nie jest błędem regulatora. Jest naturalnym skutkiem tego, że każdy fizyczny układ wykonawczy ma ograniczony zakres działania.

Problem pojawia się wtedy, gdy regulator nie uwzględnia tego ograniczenia.

Czym jest integral wind-up?

Jeżeli podczas saturacji nadal występuje uchyb, człon całkujący może go dalej gromadzić:

I ← I + e(t) · Δt

Wyobraźmy sobie przegub zablokowany przez przeszkodę. Regulator cały czas widzi błąd położenia. Napęd pracuje już z maksymalnym dopuszczalnym momentem, ale człon I nadal zwiększa swoją wartość.

Po usunięciu przeszkody zgromadzona całka może być bardzo duża. Regulator nadal generuje wtedy silne sterowanie, mimo że robot zaczyna szybko zbliżać się do celu. Rezultatem może być duże przeregulowanie i długi czas powrotu do normalnej pracy.

MIT opisuje integrator wind-up właśnie jako efekt gromadzenia błędu w sytuacji, gdy napęd nie może zrealizować wymaganego polecenia. Po ustąpieniu ograniczenia nagromadzona całka działa przez pewien czas jak dodatkowe zakłócenie i może powodować znaczne przeregulowanie.

Jak działa anti-windup?

Anti-windup to mechanizm ograniczający niepożądane narastanie członu całkującego podczas saturacji.

Nie istnieje tylko jedna metoda. Dwie bardzo popularne strategie to:

Conditional integration – całkowanie jest zatrzymywane lub ograniczane, gdy wyjście regulatora znajduje się w saturacji i dalsze całkowanie zwiększałoby nasycenie.

Back-calculation – regulator porównuje wartość obliczoną przed ograniczeniem z wartością faktycznie dopuszczoną po saturacji, a różnica jest wykorzystywana do odpowiedniej korekty całki.

Takie dwa mechanizmy są obecnie zaimplementowane również w control_toolbox używanym przez ros2_control: conditional_integration oraz back_calculation. Dokumentacja wskazuje wprost, że brak anti-windup może prowadzić do nadmiernego narastania całki, przeregulowania i powolnego wychodzenia z saturacji.

MIT przedstawia analogiczne podejścia: wyłączenie całkowania podczas saturacji oraz sprzężenie do integratora różnicy pomiędzy rzeczywistym ograniczonym sygnałem a sygnałem żądanym przez regulator.

Ograniczenia rzeczywistego napędu

Dlaczego całka może „nakręcić” regulator?

Problem pojawia się wtedy, gdy regulator nadal zwiększa człon całkujący, mimo że napęd osiągnął już swoje ograniczenie.

1

Duży uchyb

Robot znajduje się daleko od wartości zadanej.

2

Duże sterowanie

PID żąda coraz większej reakcji napędu.

3

Saturacja

Napęd osiąga maksymalny dostępny moment lub inne ograniczenie.

4

Całka nadal rośnie

Uchyb pozostaje, więc składnik I może dalej się akumulować.

5

Silne przeregulowanie

Po ustaniu ograniczenia zgromadzona całka nadal wymusza ruch.

Bez anti-windup

Integrator może gromadzić błąd mimo nasycenia napędu. Po wyjściu z saturacji regulator potrzebuje czasu, aby „rozładować” zgromadzoną całkę.

Z anti-windup

Regulator uwzględnia ograniczenie wykonawcze i zapobiega nadmiernemu narastaniu składnika całkującego.

Conditional integration Całkowanie zostaje zatrzymane, gdy napęd jest nasycony i błąd powodowałby dalsze zwiększanie saturacji.
Back-calculation Różnica pomiędzy poleceniem obliczonym i rzeczywiście dopuszczonym jest wykorzystywana do korekcji integratora.
Przykład: PID żąda 12 Nm → napęd może wygenerować maksymalnie 6 Nm → układ pozostaje w saturacji → anti-windup ogranicza narastanie członu I do czasu, aż napęd ponownie będzie mógł realizować wymagane sterowanie.

Ograniczać wyjście czy samą całkę?

To nie jest dokładnie to samo.

Można ograniczyć końcowy sygnał regulatora do zakresu akceptowanego przez napęd, np.:

−6 Nm ≤ u(t) ≤ +6 Nm

ale samo ograniczenie u(t) nie musi zapobiegać wind-upowi, ponieważ wewnętrzny stan integratora może nadal narastać.

Dlatego mechanizm anti-windup powinien oddziaływać również na działanie członu I – zatrzymywać jego dalsze narastanie, odpowiednio je ograniczać albo aktywnie sprowadzać integrator do wartości zgodnej z rzeczywistym ograniczeniem napędu.

Aktualny control_toolbox rozróżnia ograniczenia wyjścia u_min/u_max od strategii anti-windup. W pid_controller dostępne są ponadto ograniczenia całki i_clamp_min i i_clamp_max, a także wspomniane strategie conditional_integration i back_calculation.

To bardzo dobrze pokazuje, że rzeczywisty PID jest czymś więcej niż tylko równaniem P + I + D. Implementacja musi uwzględniać ograniczenia fizycznego układu.

Częstotliwość pętli sterowania i czas próbkowania

W rzeczywistym robocie regulator PID nie oblicza sterowania w sposób ciągły. Sterownik cyfrowy wykonuje kolejne obliczenia w określonych odstępach czasu. Odstęp pomiędzy kolejnymi iteracjami nazywamy czasem próbkowania Ts, a jego odwrotność określa częstotliwość pętli sterowania.

Zależność jest prosta:

f = 1 / Ts

Jeżeli pętla pracuje z częstotliwością 100 Hz, nowe obliczenie wykonywane jest co 10 ms. Przy 500 Hz okres wynosi 2 ms, a przy 1000 Hz – 1 ms.

MIT w materiałach dotyczących sterowania cyfrowego podkreśla, że regulator cyfrowy obserwuje sygnały tylko w kolejnych chwilach próbkowania. Pomiędzy nimi nie otrzymuje nowej próbki pomiarowej. Dlatego dobór Ts staje się częścią projektu całego układu sterowania.

Co dzieje się, gdy pętla jest zbyt wolna?

Wyobraźmy sobie szybko poruszający się przegub. Jeżeli regulator wykonuje pomiar i korektę zbyt rzadko, mechanizm może w czasie pomiędzy kolejnymi iteracjami znacząco zmienić swoje położenie.

Informacja docierająca do regulatora jest wtedy mniej aktualna, a reakcja następuje z większym efektywnym opóźnieniem. Może to powodować pogorszenie śledzenia wartości zadanej, większe przeregulowanie, a w niekorzystnych warunkach nawet utratę stabilności.

Podobny kompromis pokazują materiały MIT dotyczące pomiaru prędkości z enkodera: wydłużenie czasu próbkowania może poprawiać jakość pewnych pomiarów impulsowych, ale zwiększa opóźnienie sprzężenia zwrotnego, co może negatywnie wpływać na stabilność układu.

Czy im wyższa częstotliwość, tym lepiej?

Nie zawsze.

Bardzo szybka pętla może ograniczać opóźnienie sterowania i pozwalać lepiej reagować na szybką dynamikę robota, ale jednocześnie stawia większe wymagania komputerowi, komunikacji oraz czujnikom.

Jeżeli enkoder lub inny sensor nie dostarcza wystarczająco dobrej informacji przy bardzo krótkim czasie próbkowania, kolejne pomiary mogą zawierać niewiele nowych danych. Szczególnie widoczne może być to przy wyznaczaniu prędkości na podstawie impulsów enkodera. MIT zwraca uwagę, że zbyt krótki okres pomiaru może zwiększać wpływ dyskretyzacji, zwłaszcza przy małych prędkościach.

Wyższa częstotliwość oznacza również mniej czasu na wykonanie wszystkich operacji:

odczyt czujników → obliczenie regulatora → zapis polecenia do napędu

Jeżeli cały cykl trwa dłużej niż przewidziany okres, pojawiają się przekroczenia czasu wykonania – overruns.

Sterowanie cyfrowe

Jak często regulator wykonuje kolejne obliczenie?

Częstotliwość pętli określa, ile razy w ciągu sekundy układ odczytuje stan, oblicza sterowanie i aktualizuje napęd.

f = 1 / Ts
100 Hz 10 ms

100 kolejnych iteracji regulatora w ciągu sekundy.

500 Hz 2 ms

Jedna aktualizacja sterowania co dwie milisekundy.

1000 Hz 1 ms

Jedna aktualizacja sterowania w każdej milisekundzie.

Każda iteracja musi zmieścić się w dostępnym czasie

Odczyt stanu
Obliczenie uchybu
Obliczenie PID
Zapis sterowania

Wartości 100, 500 i 1000 Hz są tutaj jedynie przykładami pokazującymi zależność częstotliwości od czasu próbkowania. Nie są zalecanymi częstotliwościami dla każdego robota.

Czas próbkowania a człony I i D

Czas pomiędzy kolejnymi iteracjami ma szczególne znaczenie dla członu całkującego i różniczkującego.

W uproszczonej implementacji dyskretnej całka może być aktualizowana w postaci:

I[k] = I[k−1] + e[k] · Ts

natomiast pochodną można przybliżyć jako:

D[k] = (e[k] − e[k−1]) / Ts

Widać więc, że Ts występuje bezpośrednio w obliczeniach. Dlatego implementacja regulatora musi znać rzeczywisty czas pomiędzy kolejnymi aktualizacjami.

Trzeba tu jednak zachować precyzję: zmiana częstotliwości pętli nie oznacza automatycznie, że współczynniki Kp, Ki i Kd muszą zostać przeliczone w każdym regulatorze. Jeżeli implementacja prawidłowo uwzględnia Ts, współczynniki mogą być zdefiniowane jako parametry odpowiadające regulatorowi ciągłemu. Mimo to zmiana częstotliwości zmienia opóźnienie, dokładność dyskretyzacji i warunki pracy układu, dlatego po znaczącej zmianie okresu sterowania zachowanie regulatora powinno zostać ponownie zweryfikowane.

W innych implementacjach stosuje się współczynniki już przeliczone bezpośrednio do postaci dyskretnej. Wtedy zmiana Ts może wymagać również zmiany samych parametrów regulatora. To jedna z przyczyn, dla których wartości PID nie powinny być kopiowane bez sprawdzenia pomiędzy różnymi sterownikami.

Częstotliwość pętli w ros2_control

W aktualnej dokumentacji ros2_control parametr update_rate określa częstotliwość czasu rzeczywistego pętli controller_manager, która wykonuje kolejno odczyt stanu sprzętu, aktualizację kontrolerów i zapis poleceń do sprzętu. W dokumentacji Kilted domyślną wartością jest obecnie 100 Hz, ale jest to ustawienie frameworka, a nie uniwersalna wartość odpowiednia dla każdego robota.

ros2_control umożliwia również pracę poszczególnych komponentów sprzętowych z różnymi częstotliwościami. Dokumentacja podaje przykładowo sytuację, w której jeden sensor może wymagać 1000 Hz, podczas gdy inne elementy pracują przy 500 Hz.

Istotny jest również rzeczywisty czas wykonania pętli. Przy częstotliwości 100 Hz cały cykl ma do dyspozycji 10 ms. Jeżeli odczyt sprzętu, obliczenia kontrolerów i zapis poleceń wymagają więcej czasu, okres pętli nie zostanie zachowany. Aktualne ros2_control udostępnia mechanizmy monitorowania częstotliwości aktualizacji i pominiętych cykli właśnie po to, aby takie sytuacje wykrywać.

To również pokazuje, dlaczego w sterowaniu robotem liczy się nie tylko średnia częstotliwość, ale także regularność kolejnych wywołań. Zmienny okres wykonywania pętli, czyli jitter, powoduje, że kolejne obliczenia nie zachodzą dokładnie w takich samych odstępach czasu.

Szum pomiarowy i człon D

Człon różniczkujący D może poprawiać tłumienie układu i ograniczać przeregulowanie, ale ma jedną istotną wadę: jest szczególnie wrażliwy na szum pomiarowy.

W cyfrowym regulatorze pochodną błędu można w uproszczeniu wyznaczyć z kolejnych próbek:

D[k] = (e[k] − e[k−1]) / Ts

Oznacza to, że człon D reaguje nie tyle na samą wartość błędu, ile na różnicę pomiędzy kolejnymi pomiarami. Jeżeli odczyt z czujnika lekko „drży”, nawet wtedy, gdy rzeczywista pozycja robota prawie się nie zmienia, różniczkowanie może zamienić niewielkie wahania pomiaru w znacznie większe zmiany sygnału sterującego.

MIT zwraca uwagę, że czyste różniczkowanie jest rzadko stosowane w praktycznych regulatorach właśnie dlatego, że wzmacnia składowe o wysokiej częstotliwości. Im szybciej zmienia się zakłócenie pomiarowe, tym większy może być jego wpływ po różniczkowaniu.

Dlaczego niewielki szum może mieć duże znaczenie?

Załóżmy, że przegub praktycznie się nie porusza, ale kolejne pomiary enkodera wynoszą:

30,00° → 30,02° → 29,99° → 30,01°

Różnice są bardzo małe. Jeżeli jednak czas próbkowania wynosi tylko 1 ms, wyznaczona szybkość zmian może być znaczna.

Dla dwóch kolejnych próbek:

30,02° → 29,99°

zmiana wynosi:

−0,03°

Przy Ts = 0,001 s:

−0,03° / 0,001 s = −30°/s

Regulator może więc zobaczyć znaczącą wartość pochodnej, mimo że rzeczywisty przegub znajduje się praktycznie w tej samej pozycji.

Nie oznacza to oczywiście, że każdy taki pomiar wywoła niebezpieczny ruch. Ostateczny wpływ zależy między innymi od Kd, filtracji, rozdzielczości czujnika, częstotliwości próbkowania i architektury regulatora. Przykład pokazuje jednak, dlaczego człon D wymaga szczególnej uwagi.

Jak szum członu D może objawiać się w robocie?

Jeżeli różniczkowana informacja jest zaszumiona, polecenie regulatora może szybko zmieniać się w obu kierunkach. W praktyce może to powodować drobne drgania osi, nierówną pracę napędu, wzrost aktywności silnika albo charakterystyczne „nerwowe” zachowanie mechanizmu.

Przy większych wzmocnieniach mogą również wzrosnąć obciążenia elementów mechanicznych i napędu.

Nie każdy przypadek drgania robota oznacza jednak problem z członem D. Podobne objawy mogą powodować m.in. luzy przekładni, rezonanse konstrukcji, tarcie, zbyt duże Kp, opóźnienia komunikacyjne albo niewłaściwa estymacja prędkości.

Człon różniczkujący

Mały szum pomiaru może dać dużą pochodną

Człon D reaguje na szybkość zmian sygnału, dlatego szybkie wahania pomiarowe mają szczególne znaczenie.

ENC

Pomiar

Enkoder wskazuje pozycję z niewielkim szumem lub błędem kwantyzacji.

Δe

Zmiana błędu

Kolejne próbki różnią się od siebie, choć mechanizm prawie się nie porusza.

D

Różniczkowanie

Dzielenie zmiany przez krótki czas próbkowania może dać dużą wartość pochodnej.

DRV

Sterowanie

Szybkie zmiany członu D mogą przejść do polecenia kierowanego do napędu.

Próbka 1 30,02°
Próbka 2 29,99°
Ts 1 ms
Zmiana / czas −30°/s
Filtracja Ograniczenie wysokoczęstotliwościowych składowych przed wykorzystaniem pochodnej.
Lepszy pomiar Odpowiednia rozdzielczość czujnika i poprawna estymacja prędkości zmniejszają wpływ przypadkowych wahań.
Właściwe Kd Nadmierne wzmocnienie członu D może niepotrzebnie zwiększać wpływ szumu na sterowanie.

Pokazane wartości są przykładem matematycznym. Rzeczywisty wpływ szumu zależy od czujnika, implementacji regulatora, filtracji, czasu próbkowania oraz wartości Kd.

Jak ogranicza się wpływ szumu?

Jednym z klasycznych rozwiązań jest filtrowanie członu różniczkującego. Zamiast idealnego różniczkowania stosuje się w praktyce różniczkowanie o ograniczonym paśmie, najczęściej z elementem filtrującym składowe o wysokiej częstotliwości. MIT opisuje takie podejście jako band-limited differentiator i wskazuje je jako praktyczny sposób ograniczania wpływu szumu czujników na działanie PD/PID.

Filtracja nie powinna jednak być traktowana jako magiczne rozwiązanie. Zbyt silny filtr może wprowadzić dodatkowe opóźnienie i ograniczyć informację o rzeczywistych szybkich zmianach ruchu. Potrzebny jest więc kompromis pomiędzy tłumieniem szumu a zachowaniem odpowiednio szybkiej informacji o stanie robota.

W robotyce często można również wykorzystać bezpośrednio zmierzoną lub estymowaną prędkość osi, zamiast numerycznie różniczkować zaszumioną pozycję. To zależy jednak od dostępnego sprzętu oraz architektury układu sterowania.

Pochodna błędu czy pochodna pomiaru?

Jest jeszcze jeden praktyczny szczegół. W klasycznej postaci PID człon D może być obliczany z pochodnej błędu:

de(t)/dt

Jeżeli jednak wartość zadana nagle zmieni się skokowo, również błąd zmienia się gwałtownie. W rezultacie człon D może wygenerować bardzo duży chwilowy impuls nazywany derivative kick.

Dlatego w praktycznych regulatorach spotyka się rozwiązanie, w którym człon różniczkujący działa na zmianę wartości zmierzonej, a nie bezpośrednio na skok wartości zadanej. Materiały MIT dotyczące praktycznych implementacji PID opisują właśnie takie podejście jako sposób ograniczania impulsów członu D przy zmianach setpointu.

Nie oznacza to, że istnieje tylko jedna poprawna implementacja PID. W zależności od sterownika można spotkać różne formy regulatora, dlatego przy analizie konkretnego robota warto sprawdzić, w jaki sposób faktycznie obliczany jest człon D.

W aktualnym control_toolbox dla ROS 2 regulator może sam wyznaczyć pochodną błędu na podstawie kolejnych wartości i dt, ale interfejs pozwala również przekazać wcześniej obliczoną wartość error_dot. Dzięki temu implementacja wyższej warstwy może dostarczyć własną informację o szybkości zmian błędu.

PID i feedforward – dlaczego samo sprzężenie zwrotne nie zawsze wystarcza?

Regulator PID działa na podstawie błędu, który już występuje. Jeżeli rzeczywista pozycja przegubu zaczyna odbiegać od wartości zadanej, sprzężenie zwrotne wykrywa różnicę i wprowadza korektę. Jest to ogromna zaleta PID, ponieważ regulator może reagować również na zakłócenia i niedokładności modelu.

Ma to jednak pewną konsekwencję: aby klasyczny człon sprzężenia zwrotnego zareagował, musi pojawić się uchyb lub jego zmiana.

Jeżeli natomiast znamy z wyprzedzeniem zadaną trajektorię albo dysponujemy modelem dynamiki robota, możemy oszacować część sterowania potrzebną do wykonania ruchu, zanim powstanie znaczący błąd. Takie działanie nazywamy feedforward, czyli sterowaniem wyprzedzającym.

Modern Robotics zwraca na to uwagę bezpośrednio przy przejściu od PID do sterowania wykorzystującego model dynamiki: klasyczne sprzężenie zwrotne potrzebuje błędu, aby rozpocząć odpowiednią korektę momentu, natomiast poprawny model może wcześniej określić moment potrzebny do realizacji zadanej trajektorii

Feedback i feedforward – dwie różne informacje

Feedback wykorzystuje informację o tym, co rzeczywiście zrobił robot:

wartość zadana − wartość zmierzona → błąd → korekta

Feedforward wykorzystuje natomiast informację dostępną wcześniej – na przykład zadaną prędkość, przyspieszenie, znane obciążenie albo model dynamiki.

Można to zapisać koncepcyjnie jako:

u = ufeedforward + ufeedback

gdzie ufeedforward reprezentuje sterowanie wynikające z informacji o żądanym ruchu lub modelu, a ufeedback jest korektą wynikającą ze sprzężenia zwrotnego.

Nie jest to jedno uniwersalne równanie konkretnego regulatora, lecz wygodny sposób pokazania podziału ról pomiędzy obiema częściami.

Przykład: robot podnosi ramię przeciwko grawitacji

Załóżmy, że przegub ramienia ma utrzymywać ciężki element w określonej pozycji.

Przy samym regulatorze sprzężenia zwrotnego działanie grawitacji może najpierw spowodować niewielkie odchylenie. Dopiero pojawienie się błędu wywoła odpowiednią reakcję regulatora.

PID lub PD pozostaje wtedy odpowiedzialny przede wszystkim za korygowanie:

niedokładności modelu, zmian rzeczywistego obciążenia, tarcia, zakłóceń zewnętrznych, błędów pomiarowych i pozostałych odchyleń.

W sterowaniu manipulatorami pozwala to połączyć zalety obu podejść: model wykonuje dużą część przewidywalnej pracy, a sprzężenie zwrotne stabilizuje rzeczywisty układ. Modern Robotics pokazuje tę ideę w metodzie computed-torque control.

Dwie części sterowania

Feedforward wykonuje przewidywalną pracę, feedback koryguje błąd

W zaawansowanym układzie obydwie części mogą działać równocześnie.

FB

Feedback – sprzężenie zwrotne

Reaguje na różnicę pomiędzy stanem zadanym i rzeczywiście zmierzonym.

Źródło informacji: pomiar robota
Zaleta: reaguje na rzeczywiste zakłócenia
Ograniczenie: korekta wymaga informacji o błędzie
FF

Feedforward – sterowanie wyprzedzające

Wykorzystuje znaną wartość odniesienia, trajektorię albo model układu do wcześniejszego wyznaczenia sterowania.

Źródło informacji: zadanie lub model
Zaleta: nie musi czekać na narastanie błędu
Ograniczenie: zależy od jakości dostępnej informacji

Połączenie obu metod

Feedforward
model / trajektoria
+
Feedback
PID / PD
=
Sterowanie napędem
u = uff + ufb

Feedforward nie zastępuje automatycznie sprzężenia zwrotnego. Jeżeli model robota jest niedokładny albo pojawi się nieprzewidziane zakłócenie, sama część wyprzedzająca nie ma informacji pozwalającej skorygować powstały błąd.

Dlaczego nie stosować wyłącznie feedforward?

Ponieważ żaden model rzeczywistego robota nie jest idealny.

Masa przenoszonego obiektu może się zmienić, tarcie w przekładni zależy od warunków pracy, elementy konstrukcji mogą być elastyczne, a robot może zostać poddany nieprzewidzianemu zakłóceniu.

Jeżeli sterownik korzystałby tylko z feedforward, nie miałby mechanizmu pozwalającego wykryć, że rzeczywisty ruch zaczął odbiegać od oczekiwanego.

Modern Robotics pokazuje to na symulacji sterowania manipulatorem: przy samym feedforward niedokładność modelu powoduje stopniowe odchodzenie rzeczywistej trajektorii od zadanej. Połączenie modelu dynamiki ze sprzężeniem zwrotnym pozwala natomiast korygować te różnice.

Dlatego praktyczna idea brzmi:

feedforward realizuje to, co można przewidzieć, a feedback poprawia to, czego przewidzieć się nie udało.

Computed-torque control – krok dalej niż prosty PID

W robotach manipulacyjnych można wykorzystać pełniejszy model dynamiki. Sterownik uwzględnia wtedy między innymi:

konfigurację robota, macierz bezwładności, wymagane przyspieszenie, grawitację, siły Coriolisa i odśrodkowe, czasem również model tarcia.

Na tej podstawie można oszacować momenty potrzebne do wykonania zadanej trajektorii. Sprzężenie zwrotne PD lub PID koryguje natomiast błędy wynikające z niedoskonałości modelu.

Takie podejście nazywa się często computed-torque control. Modern Robotics pokazuje, że przy wystarczająco dobrym modelu dynamiki połączenie feedforward i feedback może poprawić śledzenie trajektorii w porównaniu zarówno z samym feedforward, jak i prostym PID bez wykorzystania modelu.

Feedforward w ros2_control

Aktualny pid_controller w ros2_control również obsługuje część feedforward. W bieżącej dokumentacji Rolling dostępny jest parametr:

feedforward_gain

który określa wzmocnienie części wyprzedzającej regulatora. Dokumentacja wskazuje, że kontroler może pracować z feedforwardem w celu poprawy dynamiki odpowiedzi.

Co istotne, w aktualnym wydaniu Kilted starsze parametry enable_feedforward i usługa set_feedforward_control zostały usunięte. Obecnie feedforward aktywuje się poprzez ustawienie feedforward_gain na wartość różną od zera.

Trzeba jednak rozróżnić dwie rzeczy:

feedforward_gain w prostym kontrolerze ROS 2 nie oznacza automatycznie pełnego modelu dynamiki robota.

Computed-torque control wykorzystuje znacznie bardziej rozbudowany model bezwładności, grawitacji i innych składników dynamiki.

To dwa przykłady tej samej ogólnej idei sterowania wyprzedzającego, ale o zupełnie różnym poziomie złożoności.

W JointTrajectoryController feedforward może być również łączony ze sprzężeniem zwrotnym PID podczas śledzenia trajektorii, np. poprzez odpowiednio skalowaną prędkość zadaną i korektę wynikającą z błędu pozycji oraz prędkości.

Ważny wniosek

PID jest bardzo skutecznym narzędziem, ale nie należy traktować go jako kompletnego opisu sterowania nowoczesnym robotem. W praktyce może być tylko jedną warstwą większego układu, współpracującą z:

planowaniem trajektorii → modelem dynamiki → feedforward → PID/PD → serwonapędem → czujnikami

To pozwala nam teraz przejść od samej teorii regulatora do praktycznych zastosowań.

PID w ramionach, robotach mobilnych, kroczących i humanoidalnych

Regulator PID nie pełni identycznej roli w każdym typie robota. W prostym serwonapędzie może bezpośrednio odpowiadać za pozycję jednej osi, natomiast w zaawansowanym robocie kroczącym lub humanoidalnym może być tylko jedną z najniższych warstw znacznie bardziej rozbudowanego systemu sterowania.

To ważne rozróżnienie. Stwierdzenie, że „robot wykorzystuje PID”, nie oznacza, że regulator PID odpowiada za całą nawigację, planowanie ruchu czy utrzymywanie równowagi.

PID w ramionach robotycznych

W manipulatorze regulatory mogą pracować osobno dla poszczególnych przegubów. Układ nadrzędny określa żądaną trajektorię, a warstwa sterowania osiami próbuje ją możliwie dokładnie odtworzyć.

W zależności od architektury napędu regulator może sterować pozycją, prędkością albo momentem. W ros2_control dobrze widać podział pomiędzy trajektorią zadaną a niższą warstwą regulacji. JointTrajectoryController interpoluje zadane punkty trajektorii, a przy interfejsach velocity lub effort może wykorzystywać regulator PID do przekształcenia błędu śledzenia w polecenie dla sprzętu.

Regulator PID nie oblicza więc zwykle całej trajektorii ramienia. Jego zadaniem może być dopilnowanie, aby rzeczywisty przegub nadążał za kolejnymi wartościami zadanymi.

PID w robotach mobilnych

W robocie kołowym bardzo naturalnym zastosowaniem regulatora jest kontrola prędkości poszczególnych kół.

Warstwa nadrzędna może określić, że lewe koło powinno obracać się z prędkością 4 rad/s, a prawe z 5 rad/s. Regulatory napędów porównują te wartości z rzeczywistymi prędkościami i korygują pracę silników.

PID może być również stosowany do regulacji prędkości liniowej, prędkości kątowej lub orientacji robota, ale nie należy utożsamiać tego z całym systemem nawigacyjnym.

Planowanie trasy, omijanie przeszkód, SLAM i lokalizacja należą do wyższych warstw systemu. Regulator niskiego poziomu realizuje jedynie polecenia ruchu wygenerowane przez te warstwy.

To dobrze pasuje do architektury ROS 2, gdzie kontroler napędu różnicowego może wyznaczać wymagane prędkości kół, natomiast niżej mogą pracować osobne regulatory realizujące te wartości na fizycznych napędach.

PID i PD w robotach kroczących

W robotach czworonożnych sytuacja jest bardziej złożona. System musi jednocześnie kontrolować wiele przegubów, kontakty nóg z podłożem, orientację korpusu oraz ruch całego robota.

Na poziomie pojedynczych przegubów bardzo często spotyka się sterowanie PD połączone z feedforwardem momentu.

Dobrym praktycznym przykładem jest oficjalne SDK Unitree. W aktualnym przykładzie niskopoziomowego sterowania Go2 dla każdego silnika przesyłane są m.in.:

q – pozycja zadana,

dq – prędkość zadana,

kp – wzmocnienie proporcjonalne,

kd – wzmocnienie różniczkujące,

tau – moment feedforward.

Przykładowy program producenta używa Kp = 60, Kd = 5 i aktualizuje polecenia z krokiem dt = 0,002 s. Są to wartości konkretnego przykładu demonstracyjnego, a nie uniwersalne nastawy dla robota.

To bardzo dobrze pokazuje praktyczną strukturę:

pozycja zadana + prędkość zadana + Kp + Kd + moment feedforward → sterowanie przegubem

Nie oznacza to jednak, że chód Go2 jest realizowany wyłącznie przez kilka regulatorów PD. Algorytm lokomocji znajdujący się wyżej musi rozwiązać znacznie trudniejszy problem: gdzie postawić nogi, jakie siły kontaktowe wytworzyć i jak stabilizować ruch całego korpusu.

PID i PD w robotach humanoidalnych

Jeszcze wyraźniej widać to w robotach humanoidalnych. Pojedyncze przeguby nadal mogą korzystać z regulatorów o charakterze P/PD/PID, ale utrzymanie równowagi całego humanoida jest zadaniem wielowymiarowym.

Oficjalne przykłady SDK Unitree G1 pokazują niskopoziomowe polecenia zawierające m.in. q_target, dq_target, kp, kd oraz tau_ff. Oznacza to, że również tutaj na poziomie osi występuje klasyczna idea sterowania pozycją i prędkością z dodatkiem momentu feedforward.

Natomiast algorytmy odpowiadające za ruch całego humanoida mogą wykorzystywać znacznie bardziej zaawansowane metody. Literatura dotycząca robotów kroczących obejmuje m.in. whole-body control, optymalizację, MPC, planowanie kroków i sterowanie wykorzystujące dynamikę centroidalną. Materiały MIT dotyczące wysokoartykulowanych robotów kroczących omawiają właśnie ZMP, planowanie ruchu środka masy, dynamikę centroidalną i whole-body control jako osobne warstwy problemu lokomocji.

W praktyce nie ma więc sprzeczności między stwierdzeniami:

„humanoid wykorzystuje PD w przegubach”

oraz

„humanoid wykorzystuje MPC lub whole-body control do utrzymywania równowagi”.

Obydwa mogą być prawdziwe jednocześnie, ponieważ dotyczą różnych poziomów sterowania.

Różne typy robotów

PID może działać na innym poziomie niż „inteligencja” robota

Im bardziej złożony robot, tym ważniejsze staje się rozdzielenie sterowania pojedynczym napędem od planowania ruchu całego systemu.

ARM

Ramię robotyczne

Regulatory osi pomagają śledzić zadane pozycje, prędkości lub momenty poszczególnych przegubów.

Wyżej: trajektoria i kinematyka
Niżej: regulacja przegubów
MOB

Robot mobilny

PID może regulować prędkość kół lub inną wielkość wykonawczą związaną z ruchem platformy.

Wyżej: lokalizacja i nawigacja
Niżej: sterowanie napędami kół
QUAD

Robot kroczący

Na poziomie przegubów może działać PD/PID połączony z momentem feedforward.

Wyżej: lokomocja i planowanie kontaktów
Niżej: kontrola pozycji i prędkości osi
HUM

Robot humanoidalny

Niskopoziomowe regulatory przegubów współpracują z warstwami odpowiedzialnymi za ruch całego ciała.

Wyżej: balans, WBC, MPC lub inne strategie
Niżej: serworegulacja poszczególnych osi

Przykładowa hierarchia w zaawansowanym robocie

Plan ruchu
Sterowanie całym robotem
PID / PD przegubów
Silniki i mechanika

Schemat jest celowo uproszczony. Konkretna architektura zależy od robota, producenta i sposobu udostępnienia warstw sterowania. Część regulatorów może pracować wewnątrz serwonapędów i być całkowicie niewidoczna dla użytkownika.

Najważniejszy wniosek z tej sekcji jest taki: im bardziej zaawansowany robot, tym mniej sensowne jest pytanie „czy robot działa na PID?” bez określenia poziomu sterowania. PID może znakomicie regulować pojedynczy przegub, podczas gdy równocześnie ruch całego robota jest generowany przez znacznie bardziej złożony algorytm.

Widać to nawet w publicznych przykładach Unitree: Go2 i G1 udostępniają na niskim poziomie wartości Kp, Kd, pozycję, prędkość i moment feedforward, natomiast ich SDK posiada również osobne interfejsy wysokopoziomowe dla ruchu, równowagi czy śledzenia trajektorii. Związek pomiędzy położeniem przegubów a pozycją chwytaka opisuje kinematyka robota, która stanowi podstawę planowania i realizacji ruchu manipulatora.

Robotyka od teorii do rzeczywistych zastosowań

LEDIO Robotics dostarcza roboty dla edukacji, badań, laboratoriów i projektów wdrożeniowych. Pomagamy również w doborze platformy odpowiedniej do nauki programowania, ROS 2, sterowania i rozwoju własnych aplikacji robotycznych.

Najczęściej zadawane pytania o regulator PID

Co oznacza skrót PID?

PID oznacza Proportional–Integral–Derivative, czyli regulator proporcjonalno-całkująco-różniczkujący. Trzy człony reagują odpowiednio na aktualny błąd, błąd nagromadzony w czasie oraz szybkość zmian błędu.

Do czego służy regulator PID w robotyce?

PID może służyć między innymi do regulacji pozycji przegubu, prędkości koła lub osi oraz innych wielkości sterowanych. Jego zadaniem jest zmniejszanie różnicy pomiędzy wartością zadaną a rzeczywiście zmierzoną.

Czy regulator PID zawsze wykorzystuje wszystkie trzy człony?

Nie. W zależności od właściwości układu stosuje się również regulatory P, PI i PD. W robotyce często spotyka się na przykład sterowanie PD, szczególnie w niskopoziomowej regulacji przegubów.

Co oznaczają Kp, Ki i Kd?

Kp określa siłę działania członu proporcjonalnego, Ki wpływ członu całkującego, a Kd członu różniczkującego. Ich odpowiedni dobór nazywany jest strojeniem regulatora PID.

Dlaczego źle dostrojony PID powoduje oscylacje?

Zbyt agresywne wzmocnienia mogą powodować nadmierną reakcję układu i wielokrotne przekraczanie wartości zadanej. Zachowanie zależy jednak również od dynamiki mechanizmu, opóźnień, częstotliwości sterowania oraz ograniczeń napędu.

Czym jest integral wind-up?

Integral wind-up występuje wtedy, gdy człon całkujący nadal gromadzi uchyb mimo osiągnięcia ograniczenia napędu. Po ustaniu saturacji może to powodować duże przeregulowanie i długi czas powrotu do normalnej pracy.

Dlaczego człon D jest wrażliwy na szum?

Człon D wykorzystuje szybkość zmian sygnału. Nawet niewielkie, ale szybkie wahania pomiaru mogą więc po różniczkowaniu wygenerować znaczącą zmianę sterowania. Z tego powodu w praktycznych regulatorach często stosuje się filtrację.

Czy regulator PID może współpracować z feedforward?

Tak. Feedforward może przewidywać część potrzebnego sterowania na podstawie zadanej trajektorii lub modelu, natomiast PID koryguje błędy wynikające z zakłóceń i niedokładności modelu.

Czy nowoczesne roboty humanoidalne nadal wykorzystują PID?

Tak, regulatory P, PD i PID nadal mogą pracować na poziomie poszczególnych przegubów. Sterowanie ruchem całego humanoida może jednak równocześnie wykorzystywać bardziej zaawansowane metody, takie jak whole-body control czy MPC.

Czy ROS 2 obsługuje regulatory PID?

Tak. Framework ros2_control i pakiet ros2_controllers udostępniają między innymi pid_controller oraz mechanizmy pozwalające stosować regulację PID w różnych architekturach sterowania robotem.

Źródła i materiały uzupełniające

UNI Podstawy akademickie i teoria sterowania
Modern Robotics – Motion Control with Torque or Force Inputs, Part 1

PID i PD dla pojedynczego przegubu robota, sprzężenie zwrotne oraz sterowanie momentem.

Modern Robotics – Northwestern University →
Modern Robotics – Motion Control with Torque or Force Inputs, Part 2

Porównanie PD i PID, wpływ grawitacji, uchyb ustalony i działanie członu całkującego.

Modern Robotics – Northwestern University →
Modern Robotics – Motion Control with Torque or Force Inputs, Part 3

Feedforward, model dynamiki robota i computed-torque control.

Modern Robotics – Northwestern University →
MIT OpenCourseWare – Control Fundamentals

Podstawy stabilności, sprzężenia zwrotnego, regulatorów PID i heurystycznego strojenia.

MIT OpenCourseWare →
ROS ROS 2 i ros2_control
ros2_control – PID Controller

Oficjalna dokumentacja kontrolera PID, interfejsów position, velocity, acceleration i effort oraz działania feedforward.

Dokumentacja ros2_control →
ROS 2 control_toolbox – PID

Implementacja regulatora, ograniczenia wyjścia, saturacja oraz strategie anti-windup: back-calculation i conditional integration.

Dokumentacja control_toolbox →
ros2_control – Controller Manager

Pętla read–update–write, parametr update_rate, deterministyczność, jitter oraz diagnostyka czasu wykonania.

Dokumentacja Controller Manager →
ros2_control – JointTrajectoryController

Śledzenie trajektorii przegubów oraz współpraca warstwy trajektorii z regulatorami niższego poziomu.

Dokumentacja JointTrajectoryController →
ROB Praktyczne przykłady robotyczne
Unitree SDK2 – przykład niskopoziomowego sterowania Go2

Praktyczny przykład wykorzystania pozycji zadanej, prędkości, Kp, Kd oraz momentu feedforward w sterowaniu przegubami robota kroczącego.

Oficjalne repozytorium Unitree →
Unitree SDK2 – niskopoziomowe sterowanie G1

Przykład sterowania osiami robota humanoidalnego z wykorzystaniem pozycji, prędkości, Kp, Kd i momentu feedforward.

Oficjalne repozytorium Unitree →
MIT Underactuated Robotics – Highly-articulated Legged Robots

Materiał uzupełniający dotyczący sterowania robotami kroczącymi i humanoidalnymi, dynamiki centroidalnej, MPC i whole-body control.

MIT Underactuated Robotics →
Źródła dobrano tak, aby rozdzielić teorię regulatorów od ich praktycznej implementacji. Podstawy matematyczne i teorię sterowania oparto przede wszystkim na materiałach akademickich, implementację na oficjalnej dokumentacji ROS 2, a przykłady niskopoziomowego sterowania robotami na dokumentacji producenta.