Jak napisać pierwszy program robota?
Jedną z najważniejszych zalet robotów współpracujących firmy Universal Robots jest intuicyjny interfejs graficzny robota, upraszczający proces tworzenia algorytmu programu robota, testów aplikacji oraz finalnie czasu procesu wdrożenia gotowej aplikacji u klienta. Z tych względów producent włożył sporo wysiłku do stworzenia optymalnego oprogramowania, które będzie w stanie sprostać powyższym wymogom. Oprogramowaniem do komunikacji programista/operator -> robot jest interfejs graficzny o nazwie „PolyScope”. W poniższym blogu wykorzystywana jest wersja 5.2 oprogramowania dedykowana dla robotów Universal Robots serii e „e-Series”. W poprzednim wpisie zostały poruszone kwestie „pierwszej konfiguracji robota”, natomiast po skończonym procesie konfiguracji czas na pierwszy program robota.
Po włączeniu robota pojawi się okno startowe „What would you like to do first?” (rysunek 1), na którym wybieramy opcję „Program the robot”.
Rysunek 1 Ekran startowy robota Universal Robots
Zakładka programowania robota
Po wybraniu opcji „Program the robot” interfejs przeniesie nas do zakładki „Program”. Okno podzielone jest na następujące obszary (rysunek 2).
Rysunek 2 Zakładka tworzenia programu robota
- Główne zakładki ś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 oraz 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 funkcje „Templates” stworzone przez producenta robota (np. funkcja paletyzacji „Pallet”).
- Główne drzewo programu robota, miejsce gdzie zostaną umieszczane instrukcje, a ich kolejność wykonywania będzie zgodna z kierunkiem od góry do dołu. Całość będzie opierała się na języku sekwencyjnym, tzn. kolejna instrukcja będzie wykonywała się gdy poprzedzająca zostanie wykonana. 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 programie zmiennych.
- Belka kontrolna sterowania programem robota, start/stop programu, suwak prędkości dla ograniczania dynamiki ruchu ramion robota (używany np. podczas testowego uruchomienia programu robota) oraz po lewej stronie przycisk statusu inicjalizacji robota „Initialize button”).
Inicjalizacja robota
Program 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”. Punkty te możemy 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 przegubów robota tak, aby uzyskać wymagane położenie punktu „TCP”). Ten drugi tryb jest wyjątkowo „przyjazny” użytkownikowi 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 mógł 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 przycisku „Initialize button” znajdującym się w lewym dolnym rogu ekranu (ma kolor czerwony). Otworzy się okno inicjalizacji (rysunek 3) w nim możemy odnaleźć następujące obszary:
Rysunek 3 Okno inicjalizacji robota
- Aktualny status ramienia robota.
- Power OFF – wyłączone zasilanie
- Robot Idle – ramię robota w gotowości
- Robot Operational – ramię aktywne
Tabela 1 Kroki inicjalizacji robota
- 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 1. Co ciekawe proces inicjalizacji robota możemy zrealizować zdalnie za pomocą wejść cyfrowych robota.
Rodzaje ruchów w robocie
W robocie współpracującym możemy 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).
Rysunek 4 Instrukcja ruchu swobodnego MoveJ
Po prawej stronie mamy widoczne następujące ustawienia:
- Selektor rodzaju ruchu, tu możemy zmieniać typ wykonywanego ruchu.
- 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 przegubów „Use joint angles”.
- Parametry dynamiki ruchu, prędkości i przyspieszenia.
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 na zakładkę „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 poniższym pierwszym programie).
- „Relative 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 wizyjny itd.).
- 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 określonym czasie.
Rysunek 5 Deklarowanie punktu kontrolnego "Waypoint"
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żemy użyć trybu ręcznego prowadzenia końcówki robota dostępnego w robotach UR poprzez 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 poprzez selektor (pole 1), a następnie wykonanie ruchu za pomocą strzałek (pole 2). Możemy również wpisać współrzędne punktu za pomocą pola 3. Istnieje również możliwość ruchu poszczególnymi przegubami 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=140mm, Y=-430mm, Z=100mm, 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=140mm, Y=-430mm, Z=0mm, 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 a zarazem ostatni punkt Waypoint3 będzie miał współrzędne X=40mm, Y=-430mm, Z=0mm, 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.
Rysunek 6 Zakładka ruchu "Move"
Ruch typu MoveJ
Rysunek 7 Testowanie instrukcji ruchu MoveJ
Ruch swobodny dedykowany jest 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ą dla nas istotne. Ruch MoveJ możemy 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 możemy zaobserwować, że linie łączące punkty kontrolne są tak naprawdę łukami.
Ruch typu MoveL
Ruch liniowy wykorzystujemy w przypadkach gdy chcemy mieć pełną kontrolę nad całą 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 istnieje 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ę w ruchu w stosunku do poprzedniego ruchu MoveJ zaznaczamy w drzewie programu instrukcję MoveJ i w zakładce „Command” zmiany selektor instrukcji ruchu na MoveL (rysunek 8), sprawdzamy jak zmienia się trajektoria ruchu narzędzia (rysunek 9).
Rysunek 8 Podgląd parametrów dla ruchu liniowego MoveL
Rysunek 9 Trajektoria ruchu liniowego
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 musimy zagwarantować stałą 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 w zakładce ruchu, który nazywa się „Blend with radius” promienia mieszania. Jego zastosowanie wynika z braku zatrzymania w punkcie kontrolnym (rysunek 10). W przypadku tego mechanizmu programista podaje promień r wyrażony w mm, trajektoria ruchu narzędzia w punktach kontrolnych zakrzywia się, tak jak na rysunku 11.
Rysunek 10 Ruch procesowy MoveP
Rysunek 11 Zakrzywienie trajektorii ruchu narzędzia poprzez mechanizm promienia mieszania
Po zastosowaniu tego typu ruchu końcówka narzędzia będzie poruszała się w poniższy sposób (Rysunek 12).
Rysunek 12 Trajektoria dla ruchu procesowego MoveP
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 3 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 ostatnim punkcie kontrolnym, który kończy ruch obrotowy. Dodatkowo po zaznaczeniu instrukcji „CircleMove” i przejściu na zakładkę „Command” możemy zdefiniować jak ma być zorientowane narzędzie w przestrzeni robota:
- „Fixed” – wykorzystywana jest jedynie orientacja narzędzia dla punktu początkowego, następnie orientacja ta zachowana jest 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, a Waypoint3 punktem końcowym. Zaznaczamy w drzewie programu poziom „MoveP”, następnie z zakładki „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 przypisuję punkt „EndPoint_1” do punktu Waypoint3 (rysunek 13). Po zaznaczeniu pozycji w drzewie „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.
Rysunek 13 Deklarowanie punktów dla ruchu po okręgu
Rysunek 14 Trajektoria dla ruchu po okręgu
Podsumowanie
Bazując na trzech powyższych typach ruchów oraz ich kombinacjach możemy zaprogramować dowolną ścieżkę dla narzędzia robota. W celu zasymulowania pracy robota można skorzystać z darmowego oprogramowania „URSim”.
Skontaktuj się ze specjalistą Elmark
Masz pytania? Potrzebujesz porady? Zadzwoń lub napisz do nas!