Przed przystąpieniem do tworzenia aplikacji z wykorzystaniem funkcji siły powinieneś zapoznać się z artykułami „Konfiguracja parametrów instalacyjnych robota UR” oraz „Poznaj Cobota w godzinę: Aplikacja Pick&Place”.
Opis aplikacji
Gdy pomyślimy o aplikacji, w której chcielibyśmy wykorzystać funkcję siły od razu narzucają nam się zadania polerowania, szlifowania czy gradowania elementu. Kontrola siły jest jednak również wykorzystywana między innymi przy wkręcaniu śruby w celu uzyskania ruchu nadążnego za gwintem, w aplikacjach zgrzewania, gdy robot musi wykryć kolejny element na przykład na stosie lub gdy robot musi dopasowywać swoją pozycję płynnie wraz ze zmieniającym się środowiskiem.
Rysunek 1. Przykłady aplikacji z wykorzystaniem siły
W celu wykonania funkcji związanych z siłą możemy skorzystać z wbudowanych w Robota UR funkcji lub z dodatkowych czujników siły. W artykule rozpatrzymy dwie opcje:
- Wykorzystanie wewnętrznej funkcji siły
- Wykorzystanie dodatkowego rozszerzenia Force Copilot firmy Robotiq
Wykorzystanie możliwości pomiaru siły za pomocą czujnika siły w kiści.
Robot Universal Robots wersji e-series ma w kiści wbudowany czujnik siły, dlatego jej pomiar możliwy jest z dużą dokładnością. W celu wykorzystania tego czujnika konieczne jest wykorzystanie dodatkowych rozszerzeń lub stworzenie własnych funkcji w oparciu o zdefiniowane przez producenta wyrażenia skryptowe. Firma UR zdefiniowała trzy takie funkcje:
- force() – pozwala na odczyt skalarnej wartości siły.
- get_tcp_force() – funkcja zwraca wektor sił i momentów oddziałujących na czujnik. Zwracana wartość ma postać p[Fx(N), Fy(N), Fz(N), TRx(Nm), TRy(Nm), TRz(Nm)].
- zero_ftsensor() – powoduje wytarowanie czujnika siły.
Odczyt wartości w programie może być realizowany poprzez przypisanie powyższych wartości do zmiennych. W celu sprawdzania wartości w czasie rzeczywistym, konieczne jest dodanie odczytu w funkcji Thread.
Rysunek 2. Program z wykorzystaniem Threada.
Gdy wartości zostają odczytane możemy rozpocząć ich przetwarzanie. Jeżeli chcielibyśmy skorzystać tylko z wartości opisanej w konkretnej osi konieczne jest wyciągnięcie jej poprzez podanie odpowiedniego indeksu wektora zmiennej, do której przypisujemy wartość get_tcp_force() (np. zmienna o nazwie siła).
Definicja | Otrzymana wartość |
sila[0] | Fx(N) |
sila[1] | Fy(N) |
sila[2] | Fz(N) |
sila[3] | TRx(Nm) |
sila[4] | TRy(Nm) |
sila[5] | TRz(Nm) |
Tabela 1. Pobranie poszczególnych wartości siły oraz momentu.
Przy wykorzystaniu robota do współpracy z człowiekiem bardzo częstym rozwiązaniem jest rezygnacja z zastosowania fizycznych przycisków, a także zastąpienie ich wywarciem siły na ramię robota w celu np. wystartowania jego cyklu. Takie rozwiązanie może zostać zrealizowane poprzez dodanie na początku programu funkcji Wait, w którym będziemy czekać aż funkcja siły przekroczy określoną wartość. Przykład parametryzacji funkcji przedstawiono na Rysunku 3.
Rysunek 3. Prezentacja sparametryzowanej funkcji Wait.
Wykorzystanie wewnętrznej funkcji siły
Wbudowana funkcja kontroli siły możemy znaleźć w zakładce Templates. Funkcja ta pozwala na dopasowywanie się robota do wyczuwanej przez niego nacisku z otoczenia. Możemy wybrać pomiędzy czterema typami siły
- Simple – odziaływanie siły w osi „z” płaszczyzny.
- Frame – zaawansowana możliwość konfiguracji osi działania siły.
- Point – oddziaływanie siły względem wyznaczonego punktu.
- Move – płaszczyzna oddziaływania zmienia się wraz z kierunkiem ruchu robota.
Rysunek 4. Funkcja Force Simple
Najprostszym rozwiązaniem jest zastosowanie typu siły Simple. Pozwala ona na oddziaływanie robota wzdłuż osi „z” względem wybranej płaszczyzny. Podstawowymi dostępnymi płaszczyznami są Base i Tool. Gdy w oknie ① podamy wartość siły to załączając opcję ② Test oraz wciskając przycisk Freedrive możemy sprawdzić zachowanie robota. W tabeli poniżej przedstawiono zachowanie robota przy poszczególnych wartościach siły z otoczenia.
Płaszczyzna | Wartość siły | Siła Fr<Fz | Siła Fr=Fz | Siła Fr>Fz |
Base | 10N | Robot porusza się do góry | Robot nie porusza się | Robot porusza się w dół |
Base | -10N | Robot porusza się w dół | Robot nie porusza się | Robot porusza się w górę |
Tool | 10N | Robot odsuwa narzędzie | Robot nie porusza się | Robot dosuwa narzędzie |
Tool | -10N | Robot dosuwa narzędzie | Robot nie porusza się | Robot odsuwa narzędzie |
Tabela 2. Sposób działania robota przy różnych wartościach siły zewnętrznej. Fr – siła zdefiniowana, Fz – siła z zewnątrz.
W celu stworzenia aplikacji podobnych do polerowania powierzchni zależy wewnątrz funkcji Force zdefiniować ruch robota.
Ponieważ domyślnie robot zatrzymuje się w każdym punkcie, w tym przypadku skorzystamy z ruchu MoveP, zachowamy dzięki temu stałą prędkość punktu TCP. W przypadku wkręcania czy dopasowywania elementu wewnątrz funkcji Force moglibyśmy zastosować strukturę, w której będziemy oczekiwać na dopasowanie, wykorzystując np. funkcję Wait.
Rozszerzenie możliwości funkcji Force otrzymujemy poprzez zdefiniowanie typu jako Frame. Możemy w nim określić indywidualne wartości oddziaływania z siłą oraz momentem dla każdej z osi. W sytuacji zaznaczenia wykorzystania osi mamy możliwość ustawienia ograniczenia prędkości zmiany pozycji w danym kierunku. Jeżeli ustawimy wartość siły na 0N bądź momentu na 0Nm robot będzie pracował dla danej osi w trybie dostosowywania swojej pozycji na podstawie wartości z otoczenia.
Rysunek 5. Funkcja Force typ Frame.
Wykorzystanie dodatkowego czujnika siły z rozszerzeniem URcaps, na przykładzie Robotiq Force Copilot.
Producenci czujników siły tworzą dla robotów UR specjalne rozszerzenia URcaps. Zawiera on wiele funkcji, które pomagają w przetwarzaniu wartości otrzymywanych z czujnika. Przykładem producentów posiadających w swojej ofercie czujniki siły są Onrobot, Robotiq, ATI, a każdy z nich posiada indywidualne zalety oraz co najważniejsze możliwe jest realizowanie w prosty sposób wszystkich zadań opisanych w poniższym artykule.
Rysunek 6. Czujniki siły z grupy UR+.
Podstawą prawidłowego wykorzystania czujnika siły jest jego prawidłowe wytarowanie. W oprogramowaniu Force Copilot, realizowane jest to za pomocą funkcji Zero FT Sensor rys. 7. Po jej zastosowaniu możemy przejść do wykonywania operacji z wykorzystaniem siły, ponieważ eliminujemy błąd pomiarowy.
Rysunek 7. Funkcja Zero FT Sensor.
Kolejną funkcją jest możliwość znalezienia kontaktu efektora z powierzchnią bądź elementem.
Realizowane jest to za pomocą funkcji Find Surface rys. 8. Znalezienie kontaktu jest najczęściej realizowane poprzez powolne przemieszczanie się w zadanym kierunku aż do momentu wykrycia określonej siły. Im wolniej będziemy się poruszać tym z mniejszą siłą oraz z większą dokładnością możliwe będzie znalezienie kontaktu. Ze względu na występowanie uderzenia w powierzchnię nie zalecane jest wykonywanie operacji z dużą prędkością. W funkcji możemy zdefiniować odległość, po której, gdy robot nie wyczuje siły stwierdzi, że elementu nie ma i zgłosi błąd. Znalezienie powierzchni często wykorzystywane jest w celu znalezienia pozycji odniesienia, od której robot wykonuje kolejne operacje.
Rysunek 8. Funkcja Find Surface.
Jedną z operacji, które wykonujemy po znalezieniu kontaktu jest na przykład polerowanie.
Gdy robot znajdzie się na pozycji początkowej rozpoczyna poruszać się po trajektorii pozwalającej na pokrycie całego obrabianego obszaru. W celu uzyskania dużej dokładności wykonanej operacji konieczne jest oddziaływanie z siłą przez robota. Realizujemy to przy wykorzystaniu funkcji Force Control rys. 9. Podobnie jak dla wbudowanej funkcji Force tutaj również możliwe jest zdefiniowanie wartości siły oddziaływania robota, w każdej z osi względem wybranej płaszczyzny. Różnica względem wzorca Universal Robots polega na możliwości zastosowania adaptacyjnego regulatora wartości siły. Podczas operacji automatycznie dostosowywany jest parametr Stiffness tak, aby jak najszybciej na podstawie aktualnego odczytu siły dostosować prędkość zmian położenia. Ustawienie to może być również parametryzowane przez użytkownika, wartości sztywności będą różniły się ze względu na miękkość materiału, który jest obrabiany.
Rysunek 9. Funkcja Force Control.
Gdy kontrola siły zostanie osiągnięta określamy trajektorię ruchu robota. Dla oprogramowania Foce Copilot mamy możliwość jej określenia na trzy sposoby:
- Za pomocą funkcji Multipoint Path
Przy wykorzystaniu tej możliwości określamy punkty na płaszczyźnie ruchu robota. Każdy punkt musi zostać zdefiniowany oraz koniecznej jest określenie trajektorii jaką będzie realizowany ruch do tego punktu. Mamy możliwość wybrania ruchu liniowego oraz ruchu po krzywej. Ta definicja jest zbliżona do zastosowania funkcji MoveP wbudowanej w robota UR.
Rysunek 10. Przykład programu z funkcją Multipoint Path.
2. Za pomocą funkcji Path
Zastosowanie funkcji Path pozwala na wykonanie bardzo skomplikowanych trajektorii, które zostają określone poprzez nagranie ścieżki ruchu robota. Oznacza to, że cobot będzie odtwarzał wcześniej fizycznie nakreśloną ścieżkę. Ze względu na to, że podczas uczenia trasy możemy zatrzymywać robota w określonych pozycjach, dlatego po zakończeniu nagrywania mamy możliwość usunięcia przerw i wykonania operacji ze stałą prędkością. Stworzona trajektoria może zostać potem odtworzona relatywnie na przykład od punktu styku znalezionego za pomocą funkcji Find Surface.
3. Za pomocą funkcji Path generator
Funkcja Path generator jest najbardziej rozbudowaną operacją w rozszerzeniu Force Copilot. Pozwala ona na automatyczne wygenerowanie ścieżki ruchu robota. W zależności od kształtu powierzchni możemy wybrać pomiędzy trzema metodami tworzenia trajektorii:
- 4-point – wykorzystywane do płaskich regularnych powierzchni o kształcie np. kwadratu, trapezu, trójkąta.
- 6-point – stosujemy również do płaskich powierzchni, które dodatkowo posiadają zaokrąglenia.
- 9-point – w pozostałych przypadkach, gdzie np. chcemy określić ruch po zakrzywionej powierzchni lub sferze.
Rysunek 12. Wybór sposobu generacji trajektorii.
Parametryzacje funkcji sprawdzimy na przykładzie 4-point Path. Po określeniu skrajnych punktów, URcaps automatycznie generuje trajektorie, gdzie robot będzie wykonywał ruchy po całej określonej powierzchni względem określonej reguły przedstawionej na rysunku 13. W celu poprawnego przejazdu przez całą powierzchnię konieczne jest określenie odległości pomiędzy kolejnymi przejazdami oraz prędkości przejazdów. Dodatkowo istnieje możliwość wykonywania przez robota ruchów okrężnych w czasie ruchu.
Rysunek 13. Parametryzacja funkcji 4-point Path
Poprzez wykorzystanie funkcji Force control i prawidłowe określenie trajektorii ruchu robota możliwe jest wykończenie każdej nawet bardzo skomplikowanej powierzchni.
Często wykorzystywaną funkcją, która nie jest związana bezpośrednio z najpopularniejszymi aplikacjami jest komenda Insertion. Pozwala ona na spasowanie elementów w sytuacji, gdy nie są one względem siebie idealnie spozycjonowane. Pozycja umieszczenia elementu jest znajdowana na podstawie pomiaru siły, gdy robot znajduje opór przed dojechaniem do zdefiniowanej pozycji rozpoczyna procedurę poszukiwania wolnej przestrzeni. Znajdowanie odpowiedniego położenia może być realizowane na trzy sposoby rys. 14:
- Spiral – robot poszukuje prawidłowej pozycji za płaszczyźnie zakreślając coraz większe okręgi wokół pozycji wzorcowej.
- Rotational – poszukiwana jest jedynie prawidłowa rotacja narzędzia.
- Linear – służy do znajdowania odpowiedniej głębokości umieszczenia elementu.
Rysunek 14. Funkcja Spiral insertion.
Parametryzacja funkcji polega na podaniu wartości siły, która definiuje znalezienie prawidłowej pozycji oraz tej, która świadczy o konieczności dalszego poszukiwania pozycji. Gdy chcemy znajdować bardzo dokładnie kolejne pozycje musimy zastosować ruch z małą prędkością. Istotne jest również określenie przesunięcia pomiędzy kolejnymi krokami, które określa rozdzielczość poszukiwania prawidłowej pozycji.
Podsumowanie
Dzięki wbudowanemu czujnikowi siły możliwe jest w prosty sposób rozszerzenie możliwości tradycyjnego robota. Ze względu na pomiar możliwe jest znalezienie kontaktu czy generowanie odpowiedniej wartości siły w celu wykończenia powierzchni. Robot dzięki czujnikowi siły zyskuje zmysł dotyku, który w wielu sytuacjach jest niezbędny.