Jak oprogramować robota Universal Robots? Tworzymy pierwszy program
Robert Krupiński (ELMARK Automatyka) print
Jedną z najważniejszych zalet robotów współpracujących firmy Universal Robots jest intuicyjny interfejs graficzny, upraszczający proces tworzenia algorytmu programu robota, testów aplikacji oraz – finalnie – czasu procesu wdrożenia gotowej aplikacji u klienta. Z tego względu producent włożył sporo wysiłku w stworzenie optymalnego oprogramowania, które będzie w stanie sprostać wspomnianym wymogom.
Oprogramowaniem do komunikacji programista/operator -> robot jest interfejs graficzny o nazwie „PolyScope”. Stosowana tu wersja 5.2 oprogramowania przeznaczona jest dla robotów Universal Robots serii „e-Series”. Na stronie http://roboty.elmark.com.pl/index.php/2019/01/02/ można znaleźć omówienie konfigurowania robota, zaś w tym artykule skupiamy się na kolejnym etapie, tj. tworzeniu pierwszego programu sterującego robotem.
Programowanie robota
Po uruchomieniu robota pojawia się okno startowe „What would you like to do first?” (rysunek 1), w którym wybieramy opcję „Program the robot”. Teraz interfejs przeniesie nas do zakładki „Program”. Okno podzielone jest na kilka obszarów (rysunek 2).
- Główne elementy środowiska „PolyScope” z podświetloną zakładką „Program”. Pozostałe to „Run” – aktualnie załadowany program, „Installation” – parametry konfiguracyjne robota, „Move” – okno z konsolą do wykonywania ruchów robota, „I/O” – podgląd sygnałów wejść/wyjść oraz „Log” – dostęp do diagnostyki robota.
- Belka menu z informacją dotyczącą aktualnie załadowanego pliku programu „*.urp” oraz nazwą pliku konfiguracyjnego „*.installation” przyporządkowanego do programu (programów, jak i plików instalacyjnych może być wiele); opcja zapisu/załadowania powyższych plików, informacje o sumie kontrolnej ustawień bezpieczeństwa robota oraz przycisk głównego menu ustawień robota.
- Zakładka z dostępnymi instrukcjami, jakie mogą zostać umieszczone w programie robota, podzielone na trzy kategorie: podstawowe „Basic”, zaawansowane „Advanced” oraz gotowe wzorce „Templates” stworzone przez producenta robota (np. funkcja paletyzacji „Pallet”).
- Główne drzewo programu robota, miejsce, gdzie zostaną umieszczone wykonywane instrukcje. Całość ma strukturę sekwencyjną, tzn. kolejna instrukcja jest wykonywana, gdy zostanie wykonana poprzedzająca. Poniżej drzewa umieszczono belkę z szybkimi przyciskami, które umożliwiają zmianę pozycji instrukcji, funkcje kopiowania/wklejania itd.
- Okno konfiguracji dla wybranej z drzewa programu instrukcji „Command”, dodatkowo zakładki „Graphics” podgląd położenia/ruchu robota oraz „Variables” – zakładka z podglądem wartości użytych w programiezmiennych.
- Belka kontrolna sterowania programem, start/stop programu, suwak prędkości dla ograniczania dynamiki ruchu ramion robota (używany np. podczas testowego uruchomienia programu) oraz przycisk statusu inicjalizacji robota „Initialize button”.
Inicjalizacja robota
Oprogramowanie robota to lista wykonywanych po kolei instrukcji, które realizują trajektorię ruchu narzędzia, kontrolują decyzyjność algorytmu programu, czy sterują wyjściami do przesyłania sygnałów kontrolnych dla urządzeń peryferyjnych (elektrozawór instalacji sprężonego powietrza itd.). Aby zdefiniować ruch musimy wyznaczyć punkty kontrolne „Waypoints”. Można je zdefiniować jako zmienne variables (format „pose”) lub jako położenie końcówki robota w przestrzeni roboczej (wtedy „PolyScope” sam przelicza położenie poszczególnych członów robota tak, aby uzyskać wymagane położenie punktu „TCP”). Ten drugi tryb jest wyjątkowo przyjazny dla użytkownika, ponieważ roboty współpracujące umożliwiają ręczne pochwycenie oraz prowadzenie końcówki narzędzia robota „Hand guiding”.
Aby jakikolwiek ruch ramienia robota był możliwy, serwonapędy poszczególnych przegubów muszą zostać odpowiednio zasilone, a hamulce zwolnione. W tym celu przeprowadzamy sekwencję inicjalizacji ramienia robota. Klikamy na przycisk „Initialize button” znajdujący się w lewym dolnym rogu ekranu (kolor czerwony). Otworzy się okno inicjalizacji (rysunek 3), w którym można znaleźć kilka obszarów:
Aktualny status ramienia robota:
- Power OFF – wyłączone zasilanie
- Robot Idle – ramię robota w gotowości
- Robot Operational – ramię aktywne
- Podgląd ustawień obciążenia dla robota.
- Aktualny podgląd położenia robota.
Korzystamy z przycisku „ON”, który po załączeniu zasilania do serwonapędów robota zmieni stan na „START”. Proces inicjalizacji przedstawiony jest w tabeli. Co ciekawe, proces inicjalizacji robota można zrealizować zdalnie za pomocą wejść cyfrowych robota.
Rodzaje ruchów robota
W robocie współpracującym można wykorzystać następujące typy ruchów:
- MoveJ – ruch swobodny,
- MoveL – ruch liniowy,
- MoveP – ruch procesowy.
Każdy z nich ma inne zastosowanie w procesie tworzenia trajektorii ruchu narzędzia. W naszym przykładowym programie najpierw użyjemy ruchu swobodnego. Przechodzimy do zakładki „Program” i z menu po lewej stronie drzewa programu wybieramy instrukcję „Move” (rysunek 4).
Po prawej stronie są widoczne następujące ustawienia:
2. Selektor rodzaju ruchu – tu możemy zmieniać typ wykonywanego ruchu.
3. Ustawienia dotyczące zmiany punktu „TCP” oraz układu współrzędnych, względem których będzie realizowany ruch „Feature”. Dodatkową opcją jest wykonanie ruchu po współrzędnych kątowych poszczególnych członów „Use joint angles”.
4. Parametry dynamiki ruchu, prędkość i przyspieszenie.
Tworzenie punktu kontrolnego dla ruchu robota
Po dodaniu instrukcji MoveJ automatycznie pojawia się pierwszy punkt kontrolny ruchu „Waypoint”. Katalog MoveJ jest podświetlony na żółto, ponieważ nie zakończył się proces tworzenia programu – musi zostać zdefiniowany punkt Waypoint1. Zaznaczamy w drzewie projektu punkt Waypoint1 i przechodzimy do zakładki „Command” (rysunek 5). Zakładka podzielona jest na następujące obszary:
- Przycisk deklarowania nowego punktu kontrolnego „Set Waypoint” oraz edycji wcześniej istniejącego „Edit Pose”.
- Selektor wyboru typu punktu kontrolnego:
- „Fixed position” – punkt stały (taki będzie użyty w pierwszym programie),
- „Realitive position” – punkt względny, wyznaczana pozycja z przesunięciem względem pozycji z poprzedniego kroku,
- „Variable position” – punkt jako zmienna – mamy ciągłą kontrolę nad pozycją punktu, np. pozycja wyliczana w algorytmie programu robota lub pobierana z zewnętrznego urządzenia (PLC, system wizyjnyitd.).
- Podgląd graficzny pozycji ramion robota po zdefiniowaniu punktu kontrolnego, z opcją przesunięcia końcówki narzędzia do wybranego punktu „Move here”.
- Opcje dotyczące zachowania się końcówki narzędzia po dojeździe do punktu kontrolnego:
- „Stop at this point” – zatrzymanie w punkcie kontrolnym,
- „Blend with radious” – mieszanie z promieniem przy ruchu bez zatrzymywania w punkcie kontrolnym.
- Parametry dynamiki ruchu robota przy dojeździe do punktu kontrolnego:
- „Use shared parameters” – parametry dynamiki skopiowane z ustawień instrukcji MoveJ,
- „Joint speed” itd. – indywidulane ustawienia prędkości i przyspieszenia dla punktu,
- „Time” – wykonanie ruchu do punktu w zadanym czasie.
Po wciśnięciu przycisku „Set Waypoint” przechodzimy do zakładki „Move” – możemy wyznaczyć położenie punktu kontrolnego (rysunek 6).
Do wyznaczenia położenia punktu oraz orientacji narzędzia można użyć trybu ręcznego prowadzenia końcówki robota dostępnego w robotach, współpracujących przez wciśnięcie przycisku „Freedrive” znajdującego się z tyłu panela operatorskiego „Teach pendant”. Innym, bardziej precyzyjnym sposobem jest skorzystanie z wybranego układu współrzędnych przez selektor (pole 1), a następnie wykonanie ruchu za pomocą strzałek (pole 2). Możemy również wpisać współrzędne punktu, używając pola 3. Możliwy jest również ruch poszczególnymi członami robota za pomocą pola 4.
W naszym przykładzie wybieramy układ współrzędnych bazy „Base”, w pole 3 wpisujemy współrzędne punktu X = 140 mm, Y =- 430 mm, Z = 100 mm, Rx = 0, Ry = 3.14, Rz = 0 oraz zatwierdzamy punkt za pomocą przycisku „OK”. W zakładce „Program” wybieramy instrukcję „Waypoint” i wstawiamy ją poniżej wcześniej zdefiniowanego punktu. Pozycja nowego punktu Waypoint2 będzie wynosiła
X = 140 mm, Y = 430 mm, Z = 0 mm, Rx = 0, Ry = 3.14, Rz = 0, czyli będzie to punkt, który jest przesunięty względem osi Z układu bazy robota o 10 cm w dół (punkt narzędzia robota powinien być na wysokości podstawy robota). Trzeci, ostatni punkt Waypoint3 będzie miał współrzędne X = 40 mm, Y = 430 mm, Z = 0 mm, Rx = 0, Ry = 3.14, Rz = 0. Te trzy punkty utworzą wierzchołki trójkąta prostokątnego wpisanego w płaszczyznę XZ bazy robota, a całość programu będzie wyglądała jak na rysunku 7 (nie powinno być żadnych żółtych pół podświetleń). Aby przetestować program, z menu z dolnej części okna wciskamy przycisk „Play”. Aby podejrzeć zdefiniowane punkty oraz zobaczyć/monitorować trajektorię ruchu robota, używamy zakładki „Graphics” znajdującej się po prawej stronie okna.
Ruch typu MoveJ
Ruch swobodny jest potrzebny w przypadku szybkiego przemieszczania głowicy narzędzia po nieliniowej trajektorii ruchu. Końcówka narzędzia porusza się po łuku, osiągając poszczególne punkty kontrolne, gdzie promień łuku uzależniony jest od wymiarów poszczególnych członów robota. W przypadku tego typu ruchu interesuje nas jedynie osiągnięcie wyznaczonych pozycji robota „Waypoints”, natomiast punkty pośrednie nie są istotne. Ruch MoveJ można zastosować wszędzie tam, gdzie wykonywane są duże i szybkie przesunięcia narzędzia, w których nie ma ryzyka wystąpienia kolizji. Na rysunku 7 widać, że linie łączące punkty kontrolne są w rzeczywistości łukami.
Ruch typu MoveL
Ruch liniowy wykorzystujemy w przypadku, gdy chcemy mieć pełną kontrolę nad trajektorią ruchu narzędzia robota. Robot wyznacza ścieżkę ruchu narzędzia jako prostą, która przechodzi przez punkty kontrolne „Waypoints”. Ten rodzaj ruchu wykorzystywany jest wszędzie tam, gdzie występuje ryzyko kolizji (np. wkładanie detalu do pudełka). W aplikacjach zrobotyzowanych współrzędne punktów kontrolnych często są powiązane z lokalnym układem współrzędnych (ruch względem wybranego układu kartezjańskiego). Aby zobaczyć różnicę ruchu typu MoveL w stosunku do ruchu MoveJ, zaznaczamy w drzewie programu instrukcję MoveJ, a w zakładce „Command” zmieniamy selektor instrukcji ruchu na MoveL (rysunek 8). Następnie sprawdzamy, jak zmienia się trajektoria ruchu narzędzia (rysunek 9).
Ruch typu MoveP
Ostatnim typem ruchu, jaki można realizować w robotach współpracujących Universal Robots jest ruch MoveP – ruch procesowy. Jest on wykorzystywany wszędzie tam, gdzie musi być zagwarantowana stała prędkość ruchu narzędzia na całej trajektorii ruchu robota. Jest to szczególnie istotne np. w aplikacjach klejenia czy spawania, gdzie każde zatrzymanie w punkcie kontrolnym „Waypoints” skutkowałoby nawarstwieniem się masy klejącej lub przegrzaniem materiału.
Ten typ ruchu wymaga użycia nowego parametru, który określa promień mieszania – „Blend with radius”. Jego zastosowanie wynika z braku zatrzymania w punkcie kontrolnym (rysunek 10). W przypadku tego mechanizmu programista podaje promień r wyrażony w mm, a trajektoria ruchu narzędzia w punktach kontrolnych zakrzywia się, tak jak na rysunku 11.
Po zastosowaniu ruchu typu MoveP końcówka narzędzia będzie poruszała się w taki sposób, jak pokazano na rysunku 12.
W ramach ruchu procesowego możliwe jest zrealizowanie ruchu po okręgu. Na rysunku 10 poniżej opcji związanych z wyborem układu współrzędnych znajduje się przycisk „Add circle move” – dodaj ruch po okręgu. Instrukcja wymaga podania trzech punktów: punktu początkowego, od którego zaczyna się ruch, następnie punktu przejściowego, przez który ma zostać wyznaczona trajektoria ruchu, kończąc na punkcie kontrolnym, który kończy ruch obrotowy. Dodatkowo po zaznaczeniu instrukcji „CircleMove” i przejściu do zakładki „Command” można zdefiniować, jak ma być położone narzędzie w przestrzenirobota:
- „Fixed” – wykorzystywana jest jedynie orientacja narzędzia dla punktu początkowego, później ta orientacja jest zachowana dla całego ruchu po okręgu (stała),
- „Unconstrained” – orientacja narzędzia zmienia się od orientacji położenia dla punktu początkowego aż do orientacji narzędzia dla punktu końcowego (zmienna).
Aby przetestować ruch po okręgu, wykorzystamy wcześniej zdefiniowane trzy punkty w przestrzeni robota, gdzie punkt Waypoint1 będzie punktem startowym, Waypoint2 – punktem przejściowym, aWaypoint3 – punktem końcowym. Zaznaczamy w drzewie programu poziom „MoveP”, a następnie w zakładce „Command” zaznaczamy przycisk „Add circle move”. Wybieramy pozycję w drzewie programu „ViaPoint_1” i za pomocą przycisku łańcucha przypisujemy do punktu Waypoint2. W identyczny sposób przypisujemy punkt „EndPoint_1” do punktu Waypoint3 (rysunek 13). Po zaznaczeniu pozycji wdrzewie „CircleMove” wybieramy orientację narzędzia na zmienną „Unconstrained”. Natomiast punkty kontrolne z poprzedniego programu komentujemy w drzewie za pomocą przycisku „komentarz” znajdującego się na dolnej belce menu.
Ruch narzędzia będzie wyglądał jak na rysunku 14. Po zakończonych testach warto zapisać nasz projekt.
Podsumowanie
Bazując na trzech powyższych typach ruchów oraz ich kombinacjach, można zaprogramować dowolną ścieżkę dla narzędzia robota. W celu zasymulowania pracy robota można skorzystać z darmowego oprogramowania URSim, które jest dostępne na stronie producenta Universal Robots: www.universal-robots.com/download/.
ELMARK AUTOMATYKA Sp. z o.o.
ul. Niemcewicza 76
05-075 Warszawa-Wesoła
tel. 22 773 79 37, 22 778 99 25
fax 22 773 79 36
e-mail: elmark@elmark.com.pl
www.elmark.com.pl
source: Automatyka 1-2/2019