Jak zwiększyć wydajność robota Universal Robots o 30%?

160

Jak zoptymalizować program robota współpracującego Universal Robots, aby zwiększyć wydajność zakładu produkcyjnego?

Jednym z ważniejszych wyzwań stojących przed zakładami produkcyjnymi jest ciągłe zwiększanie wydajności, celem sprostania rosnącym wymaganiom rynku. Zastosowanie robotów Universal Robots może się do tego przyczynić, jednakże źle przygotowany program cobota może generować niepotrzebne koszty. Można je zredukować poprzez optymalizację zaprogramowanej sekwencji ruchów robota. Jeśli chcesz, żeby Twój robot UR osiągał jeszcze krótszy czas pojedynczego cyklu to ten artykuł jest dla Ciebie.

Każdy proces produkcyjny składa się z szeregu etapów przez jakie musi przejść dany produkt. Czym krótszy jest czas poszczególnych cykli, tym krótszy jest czas całego procesu produkcyjnego, a co za tym idzie, rośnie wydajność produkcji. Jeśli zaprogramowaliśmy robota Universal Robots nie przykładając większej wagi do optymalizacji jego pracy, może się okazać, że na każdym cyklu sporo tracimy na wydajności. Załóżmy, że jeśli program robota nie jest zoptymalizowany, trwa np. 6,8 s. okazuje się, że po jego zoptymalizowaniu, udało nam się skrócić czas trwania jednego cyklu do 4,8 s, co daje nam oszczędność na poziomie 30% czasu. O tyle też może wzrosnąć wydajność naszego procesu produkcyjnego. W jaki sposób zoptymalizować pracę robota współpracującego UR w praktyce? Istnieje na to kilka sposobów.

Grafika - wpływ optymalizacji cyklu produkcyjnego na wydajność
Rys. nr 1 Wpływ optymalizacji cyklu produkcyjnego na wydajność

Po pierwsze prędkość

Dopasowanie prędkości i przyspieszenia może się wydawać całkiem oczywiste, ale często programiści ustawiają ich domyślną wartość dla ruchu robota pomiędzy dwoma wskazanymi punktami. Dla RuchuJ jest to odpowiednio 60 stopni/sek i 80 stopni/sek^2. W przypadku każdego modelu robota możemy te wartości znacznie zwiększyć, o ile pozwala nam na to analiza ryzyka i wynikające z niej ustawienia bezpieczeństwa. Warto więc zastanowić się czy w naszym programie są miejsca gdzie ramię robota może poruszać się znacznie szybciej, zwłaszcza tam gdzie nie zależy nam na precyzji ruchu.

Zmiana parametrów prędkości i przyspieszenia w środowisku Polyscope
Rys. nr 2 Zmiana parametrów prędkości i przyspieszenia w środowisku PolyScope

Podobnie jeśli chodzi o parametr przyspieszenia, który wpływa na stromość narastania i opadania zbocza prędkości przedstawionej na wykresie na rysunku nr 3.

Wykres prędkości punktu TCP w czasie
Rys. nr 3 Wykres prędkości punktu TCP w czasie

Dla robotów UR3e możemy ustawić maksymalną prędkość w RuchuJ na poziomie 360 stopni/sek, zaś przyspieszenie do wartości 4584 stopnie/sek^2. Z kolei dla modeli UR5e i UR10e będzie to odpowiednio 180 stopni/sek i 2292 stopnie/sek^2. Oczywiście należy pamiętać, że ustawienie wyższej prędkości i przyspieszenia może się wiązać z niebezpieczeństwem dla otoczenia i może powodować w określonych sytuacjach zatrzymania ochronne robota. Należy więc korzystać z tych parametrów z rozsądkiem. W praktyce producent nie zaleca przekraczania wartości 800 stopni/sek^2.  Podobnie możemy dopasowywać parametry w RuchuL i RuchuP, co również pozwoli zaoszczędzić cenne sekundy w procesie produkcyjnym.

Prawidłowy wybór rodzaju ruchu

Domyślnym typem ruchu robota jest RuchJ. Nie jest to jednak jedyny sposób w jaki może się poruszać ramię robota. Do dyspozycji mamy także RuchL (liniowy) i RuchP (procesowy). Który typ ruchu wybrać do naszej aplikacji?

Wybór rodzaju ruchu w środowisku Polyscope
Rys. nr 4 Wybór rodzaju ruchu w środowisku PolyScope

RuchJ

Z punktu widzenia wydajności najkorzystniejszy będzie RuchJ. Przy jego zastosowaniu punkt TCP robota porusza się po trajektorii łuku. Jest to najkorzystniejsze z punktu widzenia niezbędnych do osiągnięcia przez poszczególne przeguby robota prędkości i przyspieszeń. Stosujemy go wszędzie tam, gdzie ruch narzędzia nie musi być liniowy i nie musi się odbywać ze stałą prędkością. Przykładowo będzie to powrót na pozycję początkową, przenoszenie w wolnej przestrzeni przedmiotów i w niektórych sytuacjach dojazd do miejsca pracy narzędzia. Nie będzie się on jednak nadawał gdy będzie nam zależało na precyzji czynności wykonywanej przez ramię robota. Należy więc korzystać z niego tam gdzie prędkość narzędzia jest ważniejsza od precyzji. W ruchu tym możemy ustawić tzw. “promień mieszania”, czyli zaokrąglać ruch narzędzia w poszczególnych punktach.

RuchL

Wszędzie tam gdzie narzędzie robota musi poruszać się po linii prostej, wybieramy RuchL. W tym przypadku dość często zdarza się, że poszczególne przeguby będą poruszały się ze znacznymi prędkościami i przyspieszeniami, po to, aby punkt TCP utrzymał liniową trajektorię ruchu. Ruch ten wybieramy wszędzie tam, gdzie musimy dojechać do jakiegoś elementu po linii prostej lub użyć narzędzia na prostym odcinku. Co istotne, to fakt, że prędkość narzędzia będzie zmienna w czasie. W RuchuL możemy również ustawić tzw. “promień mieszania”. Z punktu widzenia wydajności zwykle jest on wolniejszy od RuchuJ, jednakże bardzo dużo zależy od ustawień parametrów prędkości i przyspieszenia.

RuchP

RuchP to inaczej ruch procesowy, czyli ruch narzędzia ze stałą prędkością, z automatycznym “blendowaniem” ruchu narzędzia w punktach. Stosujemy go w tych wszystkich aplikacjach, gdzie wymagana jest stała prędkość pracy narzędzia robota – w klejeniu, spawaniu, dozowaniu, lakierowaniu. Z punktu widzenia wydajności jest to najmniej korzystny ruch, albowiem przy dużych prędkościach może powodować on zatrzymania ochronne. Aby ich uniknąć należy zwiększyć tzw. “promień mieszania”, co nie zawsze jest możliwe. Jednym z wariantów tego ruchu jest RuchC, czyli ruch po okręgu, który używamy tylko wtedy gdy robot UR ma się poruszać po ściśle określonym łuku lub okręgu.

(Więcej o rodzajach ruchów robota w artykule “Pierwszy program robota Universal Robots”.)

 Rodzaje ruchów ramienia robota Universal Robots
Rys. nr 5 Rodzaje ruchów ramienia robota Universal Robots

“Zaokrąglanie” punktów na ścieżce robota

Kolejnym bardzo skutecznym sposobem na zoptymalizowanie pracy robota współpracującego jest “zaokrąglanie” punktów na ścieżce robota. Działanie to nazywane jest także “blendowaniem”. Na czym ono polega? Standardowo robot przemieszcza się pomiędzy dwoma punktami przyspieszając gdy rusza z początkowej pozycji i zwalniając gdy dojeżdża do końcowej. Zobrazowano to dobrze na animacji nr 1. Powoduje to utratę cennych sekund w procesie produkcyjnym, które przekładają się na obniżenie wydajności robota.

Animacja nr 1 Ruch liniowy bez “blendowania”

Okazuje się, że w wielu procesach produkcyjnych robot nie musi zatrzymywać się w każdym punkcie ścieżki. Wówczas możemy zaokrąglać ruch przez konkretny punkt, wskazując na wartość promienia łuku jaki pokona ramię robota. Robimy to poprzez tzw. dodanie “promienia mieszania” w punkcie co obrazuje rys. nr 6, domyślnie wartość blendowania wynosi 50 mm. Zwiększając ją poprawiamy płynność ruchu, ale jednocześnie coraz bardziej odbiegamy od początkowej trajektorii ruchu. Jest to jednak operacja, która pozwala znacznie zoptymalizować cykl pracy robota, który nie musi już za każdym razem zatrzymywać się, aby przejść przez dany punkt. Dodatkowo minimalizujemy ryzyko zatrzymań awaryjnych, które mogą powstać na skutek przekroczenia dopuszczalnych wartości przyspieszeń. Efekty tego możemy podziwiać na animacji nr 2.

"Blendowanie" punktów na ścieżce robota w środowisku Polyscope
Rys. nr 6 “Blendowanie” punktów na ścieżce robota w środowisku PolyScope

 

Animacja nr 2 Ruch liniowy z “blendowaniem”

Wątki – równoległe działania w programie robota

Standardowo większość operacji wykonywanych przez robota UR odbywa się sekwencyjnie, jedna po drugiej. Istnieje jednak możliwość wykonywania niektórych z nich równolegle. Do tego celu służą tzw. “wątki” (z ang. thread) lub “wydarzenia” (z ang. event). Pozwalają one na wykonywanie różnego rodzaju obliczeń, kontrolowanie komunikacji z innymi urządzeniami, sprawdzanie parametrów robota, sterowanie we/wy w sposób równoległy do głównego programu robota. “Wątek” wykonywany jest przez cały czas działania programu głównego robota, zaś “zdarzenie” tylko w trakcie spełniania określonego warunku. Przedstawia to rys. nr 7.

Schemat przedstawiający różnice między programem, "wydarzeniem" i "wątkiem"
Rys. nr 7 Schemat przedstawiający różnice między programem, “wydarzeniem” i “wątkiem”

“Wątki” oraz “wydarzenia” można wykorzystać także do optymalizacji działania programu. Jeśli chcemy, żeby jakaś czynność, np. otwarcie chwytaka wykonywała się równolegle do przemieszczania się ramienia robota pomiędzy kolejnymi punktami, możemy zastosować “wątek”, który będzie wykrywał położenie robota w określonej pozycji (If get_actual_tcp_pose()=Waypoint_1), co ma zainicjować otwarcie chwytaka (TO[0]=On). Przykład takiego programu zobrazowano na rys. nr 8. Oczywiście można to także zrealizować poprzez “wydarzenie”. Dzięki temu oszczędzamy czas, który normalnie zajęłoby oczekiwanie na otwarcie lub zamknięcie chwytaka (z takim problemem mamy do czynienia np. w przypadku chwytaków RG2 i RG6 firmy OnRobot).

Wykorzystanie "wątku" w programie robota UR
Rys. nr 8 Wykorzystanie “wątku” w programie robota UR

Podsumowanie

Optymalizacja cyklu produkcyjnego jest niezwykle istotna z punktu widzenia wydajności produkcji. Wdrażając coboty Universal Robots należy pamiętać o tym, że odpowiednio napisany program pozwala skrócić czas cyklu. W tym celu mamy do dyspozycji szereg rozwiązań, które możemy zastosować. Zaczynając od zmian prędkości i przyspieszenia, poprzez wybór odpowiedniego rodzaju ruchu, na zaokrąglaniu punktów i wykorzystaniu “wątków” kończąc. Oczywiście zawsze musimy pamiętać przy tym o bezpieczeństwie pracowników i precyzji, która jest kluczowa z punktu widzenia jakości produkcji. Jak wykonać to praktyce uczymy na prowadzonych przez Elmark Automatyka szkoleniach w naszym Autoryzowanym Centrum Szkoleniowym Universal Robots w Warszawie.

Źródło: Elmark