Dlaczego robot szarpie i co z tym zrobić
Robot dojeżdża do punktu i drga, a mechanika się zużywa. Zwykle winny jest profil prędkości, nie sterownik. O zrywie, profilu trapezoidalnym i S-curve, z policzonym kosztem w milisekundach.
Objaw jest zawsze ten sam. Robot jedzie do punktu, zatrzymuje się, a chwilę po zatrzymaniu końcówka jeszcze drga. Przy pierwszych uruchomieniach nikt się tym nie przejmuje, bo pozycja się zgadza. Po kilku miesiącach pracy ciągłej okazuje się, że w przekładni jest luz, a powtarzalność spadła.
Odruch jest taki, żeby szukać winy w sterowniku: przestroić regulator, zmiękczyć wzmocnienia, dołożyć filtr. Czasem to pomaga. Znacznie częściej problem siedzi wcześniej, w tym, jak w ogóle zaplanowano ruch.
Zryw, czyli trzecia pochodna
Ruch opisujemy zwykle położeniem i prędkością. Do zrozumienia drgań potrzebne są jeszcze dwie pochodne wyżej.
Przyspieszenie jest proporcjonalne do siły, a więc do momentu na wale. Zryw, czyli pochodna przyspieszenia po czasie (w literaturze angielskiej jerk), opisuje jak szybko ten moment się zmienia. To właśnie zryw, a nie samo przyspieszenie, wzbudza drgania konstrukcji.
Intuicja z samochodu działa dobrze. Można przyspieszać mocno i płynnie, i pasażer to zniesie. Ale szarpnięcie sprzęgłem przy tym samym przyspieszeniu średnim rzuci wszystkimi do przodu. Różnica nie tkwi w wartości przyspieszenia, tylko w tempie jego narastania.
W robocie ta sama zasada dotyczy przekładni, pasków i całej ramy. Konstrukcja ma swoje częstotliwości własne. Skokowa zmiana momentu jest, w sensie widmowym, pobudzeniem szerokopasmowym: zawiera składowe o wszystkich częstotliwościach, w tym te, które konstrukcja chętnie wzmocni.
Skąd bierze się skok momentu
Najprostszy sensowny profil prędkości to trapez: rozpędzamy ze stałym przyspieszeniem, jedziemy ze stałą prędkością, hamujemy ze stałym opóźnieniem.
faza 1: q̈ = +a_max | faza 2: q̈ = 0 | faza 3: q̈ = -a_max
Profil ma trzy fazy i jest optymalny czasowo przy zadanych ograniczeniach prędkości i przyspieszenia. Ma jednak jedną cechę, którą łatwo przeoczyć patrząc wyłącznie na wykres prędkości: przebieg przyspieszenia jest prostokątny.
Prostokąt oznacza, że w chwili przejścia między fazami przyspieszenie zmienia się skokowo, z zera na maksimum. Pochodna skoku jest nieskończona. W implementacji, którą utrzymuję w platformie szkoleniowej, funkcja licząca profil trapezoidalny zwraca wprost peakJ: Infinity, i nie jest to niedopatrzenie, tylko uczciwy opis tego, co ten profil robi.
Oczywiście fizycznie nieskończonego zrywu nie ma. Ograniczy go bezwładność wirnika, indukcyjność uzwojeń i pasmo regulatora prądu. Problem polega na tym, że to napęd decyduje, jak wygląda przejście, a nie planer. Skoro nie zaplanowaliśmy tego przejścia, dostajemy to, co wyjdzie z dynamiki układu, wraz z pobudzeniem rezonansów.
S-curve, czyli siedem faz zamiast trzech
Naprawa polega na potraktowaniu zrywu jak kolejnego ograniczenia. Zamiast pozwolić, żeby przyspieszenie skakało, narastamy nim ze stałym tempem j_max.
Przebieg przyspieszenia przestaje być prostokątem, a staje się trapezem. Prędkość przybiera kształt litery S i stąd nazwa profilu. Faz jest teraz siedem:
+j → 0 → −j → 0 → −j → 0 → +j
Czas narastania przyspieszenia do wartości maksymalnej wynosi:
t_j = a_max / j_max
Cały ruch trwa 4·t_j + 2·t_2 + t_stała, gdzie t_2 to czas jazdy ze stałym przyspieszeniem, a t_stała czas jazdy ze stałą prędkością.
Ile to kosztuje w sekundach
Tu zaczyna się rozmowa, którą naprawdę warto odbyć z klientem, bo płynność nie jest darmowa.
Weźmy ruch na dystansie jednego metra, z ograniczeniami v_max = 1 m/s oraz a_max = 2 m/s². Profil trapezoidalny wykonuje go w 1,500 s. Ten sam ruch z ograniczeniem zrywu do j_max = 10 m/s³ trwa 1,700 s.
Dwieście milisekund, czyli trzynaście procent. Przy takcie linii wynoszącym kilka sekund jest to zauważalne, ale akceptowalne. Przy tysiącach cykli dziennie warto policzyć, ile to daje w skali zmiany.
Zależność od j_max nie jest liniowa i to jest najciekawsza część:
| Ograniczenie zrywu | Czas ruchu | Narzut |
|---|---|---|
| brak (trapez) | 1,500 s | 0 % |
j_max = 5 | 1,900 s | +26,7 % |
j_max = 10 | 1,700 s | +13,3 % |
j_max = 20 | 1,600 s | +6,7 % |
j_max = 50 | 1,540 s | +2,7 % |
Wniosek praktyczny jest taki, że nie trzeba wybierać między płynnością a wydajnością. Trzeba znaleźć próg, powyżej którego dalsze luzowanie ograniczenia przestaje cokolwiek dawać mechanice, a zaczyna tylko psuć przebieg. Ten próg wyznacza się pomiarem, nie z katalogu. Najprostsza metoda: akcelerometr na końcówce, powtórzenie tego samego ruchu przy kilku wartościach j_max i obserwacja amplitudy drgań po zatrzymaniu.
Kiedy wystarczy wielomian
Profile z ograniczeniami nadają się do ruchów, w których zależy nam na czasie. Bywają jednak sytuacje, w których liczy się wyłącznie gładkość, a czas jest zadany z góry: ruch ma trwać dokładnie T, bo tak wynika z synchronizacji z inną osią albo z podajnikiem.
Wtedy prościej sięgnąć po wielomian. Dla ruchu od spoczynku do spoczynku klasyczny wybór to wielomian piątego stopnia, spełniający sześć warunków brzegowych: położenie, prędkość i przyspieszenie na obu końcach.
q(t) = 10t³ − 15t⁴ + 6t⁵ (dla t znormalizowanego do przedziału [0, 1])
To rozwiązanie minimalizuje całkę z kwadratu zrywu i jest znane z pracy Flasha i Hogana z 1985 roku o koordynacji ruchów ramienia. Ta sama krzywa opisuje ruchy ludzkiego ramienia i pojawia się w robotyce, co zawsze robi wrażenie na kursantach.
Trzeba tylko wiedzieć, ile się za to płaci. Dla ruchu na dystansie D w czasie T wartości szczytowe wynoszą:
v_max = 1,875 · D/T a_max = 5,774 · D/T²
Prędkość szczytowa jest więc o osiemdziesiąt osiem procent wyższa od średniej. Jeśli dobierzesz T z prędkości średniej, przekroczysz limit napędu i sterownik i tak przytnie ruch, tracąc całą zaplanowaną gładkość. Wielomian nie zna ograniczeń napędu, więc ograniczenia trzeba sprawdzić samodzielnie.
Gdy dodatkowo zależy nam na zerowym zrywie na krańcach, na przykład przy łączeniu segmentów, wchodzi wielomian siódmego stopnia z ośmioma warunkami brzegowymi.
Co wybrać
Praktyczna kolejność decyzji wygląda tak.
Ruch punkt do punktu, liczy się takt, mechanika sztywna. Trapez wystarczy. Nie komplikuj tam, gdzie nic nie drga.
Ruch punkt do punktu, cokolwiek drga albo konstrukcja jest wysoka i wiotka. S-curve z j_max dobranym pomiarowo. Zacznij od wartości dającej narzut rzędu dziesięciu procent i schodź w dół, dopóki drgania nie znikną.
Czas ruchu zadany z zewnątrz. Wielomian piątego stopnia, ale koniecznie ze sprawdzeniem wartości szczytowych wobec limitów napędu.
Łączenie wielu segmentów w jedną ciągłą ścieżkę. Wielomian siódmego stopnia albo profil z jawnie zadaną ciągłością na złączeniach. To już osobny temat, bo dochodzi kwestia zachowania w narożnikach.
Uwaga o implementacjach
Wersja profilu S-curve, którą utrzymuję w platformie szkoleniowej, zakłada ruch od spoczynku do spoczynku i przy krótkich odcinkach schodzi z powrotem do trapezu. Dla dydaktyki to wystarcza, bo pokazuje kształt i wpływ ograniczenia zrywu.
Pełna implementacja przemysłowa musi obsłużyć znacznie więcej: niezerową prędkość początkową i końcową, przypadki, w których nie zdążymy osiągnąć a_max, oraz przeliczanie profilu w czasie rzeczywistym, gdy cel zmieni się w trakcie ruchu. To ostatnie jest najtrudniejsze i jednocześnie najbardziej przydatne przy zadaniach z podążaniem za obiektem na taśmie. Jeżeli tego potrzebujesz, nie pisz tego od zera, tylko sięgnij po gotową bibliotekę.
Co sprawdzić u siebie
Jeśli Twój robot drga po zatrzymaniu, zanim zaczniesz stroić regulator, odpowiedz sobie na trzy pytania.
- Czy planer w ogóle ogranicza zryw, czy tylko prędkość i przyspieszenie? W wielu sterownikach parametr istnieje, ale domyślnie jest ustawiony bardzo wysoko, co jest równoważne jego brakowi.
- Jaki jest realny narzut czasowy przy sensownej wartości ograniczenia? Policz to dla swojego typowego ruchu, zanim uznasz, że nie stać Cię na płynność.
- Czy drgania pojawiają się przy każdej prędkości, czy tylko przy jednej? Jeżeli tylko przy jednej, to nie jest problem zrywu, tylko rezonans, i wtedy szukamy gdzie indziej.
Skąd te liczby
- Implementacje profili: time-optimal.ts oraz polynomials.ts w platformie do planowania trajektorii (trapez, S-curve siedmiofazowy, wielomiany 3, 5 i 7 stopnia).
- Rozwiązanie minimum jerk: Flash T., Hogan N., The coordination of arm movements, Journal of Neuroscience, 1985.
- Wartości szczytowe wielomianu piątego stopnia sprawdzone numerycznie na 20 001 próbkach.