Języki programowania robotów
Języki programowania wysokiego poziomu (takie jak Java, C, Pascal, BASIC) służą powszechnie do rozwiązywania problemów analitycznych i tworzenia aplikacji dla użytkowników końcowych. Zmiany jakie kształtowały się na przestrzeni dziesięcioleci i ewolucja tych języków nakierowane były na dostosowanie ich do potrzeb programistów idąc w kierunku optymalizacji obsługi danych (programowanie obiektowe). Powstawały biblioteki i narzędzia (kompilatory i środowiska IDE), upraszczające proces tworzenia kodu, jak również weryfi kujące poprawność składni. W przypadku języków programowania robotów ich ewolucja przebiegała bardzo podobnie, jak języków wysokiego poziomu.
Większość języków programowania robotów wywodzi się właśnie bezpośrednio z języków C oraz PASCAL czy BASIC. W przypadku robotów ABB (język RAPID) punktem wyjścia był język C. W przypadku robotów firmy FANUC (język Karel) i KUKA (język KRL) językiem wyjściowym był Pascal, zaś przypadku dla programowania robotów firmy MITSUBISHI (język Melfa Basic) był to język BASIC. Potrzeba bezpośredniego sterowa nia jednostką mechaniczną oraz potrzeba komunikacji z osprzętem i urządzeniami peryferyjnymi sprawiła, że podstawowe instrukcje języków wysokiego poziomu uzupełnione zostały o dodatkowe elementy zapewniające wsparcie w takich zagadnieniach jak:
• kontrola i koordynacja ruchu układów wieloosiowych w trzech wymiarach (uwzględniająca ryzyko kolizji),
• komunikacja z urządzeniami zewnętrznymi przy wykorzystaniu zaimplementowanych protokołów komunikacyjnych,
• komunikacja z czujnikami i urządzeniami peryferyjnymi.
Wzbogacenie składni języków wysokiego poziomu o instrukcje ruchu oraz komunikacyjne nie wyczerpuje pełni potrzeb w zakresie języków programowania robotów. Nowoczesne języki programowania robotów mają strukturę modułową, której tworzenie może być oparte na programowaniu strukturalnym (ang. worker-subset). Worker-subset stanowi grupę prostych, zrozumiałych i łatwych w użyciu komend, dzięki którym nawet niedoświadczony programista z łatwością radzi sobie z tworzeniem prostych programów robotów. Taki sposób programowania sprowadza się do wyboru i modyfikacji formularzy komend, na których dokonuje się parametryzacji danych instrukcji. Rozwiązanie to pozwala na znaczące ułatwienie samego procesu programowania, jak również ograniczenie błędów składni podczas programowania. Często można spotkać się z pewnego rodzaju dwo istością podejścia producentów robotów w zakresie programowania.
Podstawowe operacje związane ze sterowaniem, obsługą wejść/wyjść oraz konfiguracją układów współrzędnych można zrobić bezpośrednio z panelu nauczania, często korzystając z predefiniowanych instrukcji mających niejednokrotnie charakter formularzy (np. w przypadku robotów KUKA), w których wybiera się opcje konfiguracji. W razie potrzeby, kiedy konieczny jest dostęp do parametrów bardziej zaawansowanych (jak chociażby implementacja regulatora PID, konfiguracja komunikacji w nietypowym protokole transmisji i analizy danych), programista może skorzystać z elementów języka wysokiego poziomu (tak jest między innymi w przypadku robotów firmy FANUC i KUKA, gdzie programowanie robota można zrealizować bezpośrednio odpowiednio w językach Karel i KRL). Rozwiązanie takie dostosowuje poziom zaangażowania narzędzi wymaganych do realizacji zadania do problemu, który ma być rozwiązany. Dzięki temu, zaprogramowanie prostego ruchu związanego np. z przenoszeniem detali, może być zrealizowane bez angażowania w tym celu elementów języka wysokiego poziomu. Przy objaśnianiu dowolnego języka programowania, warto poruszyć trzy aspekty określające język jako taki. Są to: składnia języka, nazywana również syntaktyką lub potocznie strukturą języka, semantyka oraz pragmatyka (wspominaliśmy o tym na początku). Składnia języka jest to ciąg znaków, instrukcji i reguł, który jest poprawny z punktu widzenia danego języka. Producenci robotów opracowując języki programowania dedykowane do swoich robotów postarali się, aby składnia komend i instrukcji była możliwie najprostsza oraz aby miała ele menty wspólne z językami wysokiego poziomu, które są konstrukcjami standardowymi w informatyce.
Jeśli chodzi o semantykę języka, zagadnienie jest bardziej złożone, ponieważ dotyczy znaczenia używanych instrukcji i składni języka, czyli tego, co dzieje się podczas wykonywania programu robota. Kod programu może być poprawny, jeśli chodzi o składnię, natomiast może mieć błędy semantyczne. Część błędów semantycznych jest możliwa do wykrycia w momencie edycji lub wstępnego przetwarzania czy też kompilacji programu. Część błędów może się jednak ujawnić dopiero w momencie wykonywania programu i z tego też względu tak istotną rolę odgrywa tu testowanie programu. Przykładami błędów związanych z semantyką może być np. odwołanie do niezadeklarowanej zmiennej, wywołanie niewłaściwego wyjścia cyfrowego czy też niewłaściwej funkcji. Ze względu na różnorodność rozwiązań trudno jest semantykę języka ująć w sposób jednorodny, gdyż jak już wspomniano, dąży się do eliminacji wszelkiego rodzaju błędów mogących skutkować nieprzewidzianym działaniem robota. Warto jednak mieć świadomość tego, że rozumienie kodu i tego, co robot ma zrobić, implementując zapisany kod, jest kluczowe dla poprawności programowania robotów. Trzeci element – pragmatyka, opisuje w jaki sposób należy używać tego języka, jego składni, procedur, funkcji oraz reguł w zastosowaniu do konkretnego zadania, które mamy zrealizować. Stanowi to pewnego rodzaju doświadczenie, pozwalające na efektywne wykorzystanie składni i semantyki języka w celu rozwiązania problemu.
W wielu przypadkach pragmatyka programowania robotów jest wspólna dla wielu firm, choć każda stara się implementować i patentować rozwiązania mające na celu uproszczenie procesu programowania. Pragmatyka w zakresie programowania robotów nie podlega formalizacji, ponieważ niemal każda aplikacja jest inna. Nabywanie poprawnej pragmatyki języka programowania powinno opierać się na jego poprawnym używaniu i zdobywaniu doświadczenia przez realizację różnorodnych aplikacji oraz poprzez analizę kodu tworzonego przez innych programistów. Czasami rozwiązania zaimplementowane przez jednego z producentów mogą dać się zaimplementować w robotach innego producenta bez naruszania własności intelektualnej.
Program sterujący robota przemysłowego standardowo składa się z instrukcji ruchu, instrukcji obsługi wejść/wyjść, instrukcji obsługi zmiennych (u różnych producentów robotów zmienne w programie są zapisywane w różny sposób: poprzez zapis do wydzielonych rejestrów, czy przez deklarację i późniejsze przypisanie do zmiennych programowych – jednak niezależnie od tego instrukcje te służą do zapisu, odczytu oraz przetwarzania różnego rodzaju danych, wykorzystywanych w programie) oraz standardowych instrukcji warunkowych, pętli oraz innych instrukcji służących do parametryzacji pracy robota. Program sterujący może być jedno- lub wielowątkowy. Dodatkowo może uwzględniać współpracę z urządzeniami zewnętrznymi, dla których robot może być w zależności od konfiguracji – urządzeniem nadrzędnym (ang. Master) lub urządzeniem obsługiwanym (ang. Slave). Najczęściej w tego typu przypadkach mamy do czynienia z robotem pełniącym rolę Slave, który wykonuje operacje zdalnie wymuszone np. przez maszynę CNC. Przy współpracy robota z pozycjonerem, w celu zapewnienia skoordynowanego ruchu robota względem pozycjonera, robot jest konfi gurowany jako Slave, natomiast pozycjoner jako Master. Komunikacja z urządzeniami zewnętrznymi realizowana jest za pośrednictwem zaimplementowanych sprzętowo i programowo protokołów komunikacyjnych, albo za pośrednictwem instrukcji wejść/wyjść. Instrukcje zapisane w programie wykonywane są sekwencyjnie zgodnie z zaprogramowaną kolejnością, uwzględniając instrukcje pętli i instrukcje warunkowe.
Zasadniczo w przypadku wszystkich języków programowania robotów możemy wyróżnić kilka grup instrukcji wykorzystywanych podczas programowania:
• instrukcje opisujące deklarację i obsługę zmiennych,
• instrukcje opisujące układy współrzędnych,
• instrukcje opisujące ruch robota,
• instrukcje opisujące obsługę sygnałów,
• instrukcje sterujące przepływem programu,
• instrukcje matematyczne,
• instrukcje dedykowane do procesu [I.11],
• instrukcje dodatkowe.
Instrukcje opisujące deklarację i obsługę zmiennych
Producenci robotów w różny sposób podchodzą w swoich rozwiązaniach do deklaracji zmiennych. Niezależnie od tego, w każdym systemie zrobotyzowanym istnieje potrzeba przetwarzania zmiennych numerycznych, które mogą mieć różny charakter. Niektórzy producenci pozwalają w swoim języku programowania na deklarację zmiennych w sposób typowy dla języków wysokiego poziomu, definiując różne typy zmiennych oraz pozwalając na tworzenie własnych typów zmiennych, traktując to zagadnienie w sposób obiektowy. Inni, starając się ograniczyć problemy typowe dla obsługi zmiennych (związane z zarządzaniem pamięcią), tworzą specjalne struktury zmiennych, do których użytkownik ma dostęp na ściśle określonych zasadach. W przypadku robotów fi rmy FANUC istnieje np. możliwość programowania w języku KAREL, wywodzącym się z języka PASCAL i wówczas mamy do dyspozycji pełen asortyment typów zmiennych, dodatkowo wzbogacony o zmienne strukturalne opisujące pozycję robota. Innym rozwiązaniem jest programowanie przy wykorzystaniu panelu nauczania, gdzie programista ma do dyspozycji różne typy rejestrów (numeryczne, pozycji, paletyzacji, wizyjne, tekstowe), do których może wprowadzać ściśle określone typy danych. W ramach instrukcji obsługi zmiennych, należy uwzględnić również instrukcje pozwalające na proste operacje matematyczne i logiczne.
Instrukcje opisujące układy współrzędnych
Operowanie w różnych układach współrzędnych wynika z potrzeby zachowania elastyczności rozwiązania w przygotowywanej aplikacji. Łatwiej jest np. zbudować aplikację realizującą proces paletyzacji czy depaletyzacji, korzystając z układu współrzędnych związanego z paletą, na której znajdują się elementy, na których operuje robot, niż programować w układzie BASE (znajdującym się w podstawie robota) lub WORLD (określającym globalny układ stacji), ponieważ ewentualne przestawienie palety będzie się wiązało z uwzględnieniem przesunięcia palety względem układu WORLD, zaś położenie wszystkich elementów dalej pozostanie niezmienione względem układu lokalnego znajdującego się na palecie. W związku narzędzia względem stanowiska, względem detalu, jak i względem realizowanego zadania. Położenie każdego punktu w programie robota jest defi niowane w jednym z przyjętych układów współrzędnych w związku z czym istnieje potrzeba zarówno opisu tych układów, jak również możliwości zmiany ich parametrów oraz zmiany samych układów w trakcie realizacji programu.
Instrukcje opisujące ruch robota
Ruchy robota są programowane jako ruchy z jednej pozycji do drugiej (rys. 1.13). Z reguły w instrukcji głównym argumentem jest pozycja i orientacja punktu, do którego robot ma się przemieścić. Należy przy tym pamiętać, że robot wykonuje ruch do punktu, który jest zapisany w aktywnym układzie współrzędnych. Jeżeli zatem punkt został zapisany w innym układzie współrzędnych, instrukcja ruchu musi się wiązać ze zmianą układu współrzędnych na zgodny z tym, w jakim zapisany został punkt. Droga pomiędzy tymi dwoma pozycjami jest automatycznie wyliczana i w razie potrzeby interpolowana przez system robota. Podstawowe charakterystyki ruchu są wyszczególniane przez wybieranie odpowiednich instrukcji pozycjonowania oraz podanie pozycji i orientacji punktu.
Rys. 1.13. Podstawowe typy ruchu robota pomiędzy dwoma punktami: a) ruch PTP (Point-to-Point), b) ruch z interpolacją liniową, c) ruch z interpolacją kołową
Pozostałe parametry ruchu mogą być wyszczególniane przez zdefiniowanie prędkości, przyspieszenia, dokładności pozycji, opisu aktualnego układ współrzędnych. Dodatkowo instrukcja ruchu może uwzględniać modyfi katory, zmieniające pozycję lub orientację punktu docelowego w sposób dynamiczny (obliczony w trakcie wykonywania programu). Rozwiązanie takie wynika ze strategii programowania, mówiącej o tworzeniu programu opartego na jak najmniejszej liczbie punktów. Pozwala to na uzyskanie większej czytelności kodu oraz minimalizuje błędy związane z niezaktualizowaniem którejś z pozycji podczas modyfi kacji programu.
Najprostszym rodzajem ruchu robota jest ruch z punktu do punktu tzw. PTP (patrz podrozdz. 1.1.1). W ruchu tym (rys. 1.13a) wartościami zadanymi są współrzędne punktu końcowego położenia efektora oraz jego orientacja. Prędkość jest podawana jako wartość procentowa wartości maksymalnej. Robot poruszając się w ruchu typu PTP nie dokonuje interpolacji położenia narzędzia pomiędzy punktami początkowym i końcowym, a trajektoria nie jest do końca przewidywalna. Ten typ ruchu może być wykorzystywany przy prostych czynnościach, kiedy nie jest istotny kształt toru ruchu efektora. Drugim podstawowym rodzajem ruchu robota jest ruch liniowy (rys. 1.13b). W ruchu tym osie robota są sterowane w taki sposób, aby zapewnić liniowy ruch TCP narzędzia po trajektorii wyznaczonej w wyniku interpolacji pomiędzy punktami początkowym i końcowym z zachowaniem orientacji narzędzia. Prędkość w tym ruchu jest już sparametryzowana i może być ściśle określona przez użytkownika. Trzecim podstawowym rodzajem ruchu robota jest ruch z interpolacją kołową (rys. 1.13c), w której położenie narzędzia (TCP) od punktu startu do punktu końcowego realizowane jest po wycinku koła (łuku), przez dodatkowy punkt pośredni wprowadzony podczas programowania. W tym rodzaju ruchu prędkość również jest sparametryzowana. W wielu przypadkach dla zapewnienia odpowiedniej jakości procesu konieczne jest zapewnienie ciągłości trajektorii robota i wówczas mogą być stosowane bardziej zaawansowane instrukcje ruchu, pozwalające na sterowanie pozycją, orientacją oraz prędkością narzędzia na ścieżce.
Instrukcje opisujące obsługę sygnałów
Każdy robot jest wyposażony w pewną liczbę cyfrowych i analogowych wejść/wyjść (we/wy), których stan może być zmieniany programowo. Wejścia/wyjścia z reguły wykorzystywane są do obsługi urządzeń peryferyjnych oraz do integracji z innymi elementami stanowiska zrobotyzowanego. W celu ich obsługi w składni języka znalazły się instrukcje przyporządkowujące fizycznym adresom we/wy cyfrowych i analogowych oznaczenia i numery, do których może odwołać się użytkownik w celu odczytania lub wystawienia konkretnego sygnału, np. w przypadku robotów firmy FANUC zapis RO[1] oznacza zapis na wyjściu pierwszym robota (znajdującym się na manipulatorze) sygnału ON.
Instrukcje sterujące przepływem programu
Instrukcje sterujące służą do sterowania przepływem programu. Możemy zasadniczo wyróżnić:
• instrukcje wyboru (If, Else, Switch, Case, Default), pozwalające na uwarunkowanie kierunku przepływu programu w zależności od wartości zmiennych, sygnałów, parametrów robota;
• instrukcje realizujące pętle (For, While, Do), pozwalające na wielokrotne wykonywanie instrukcji umieszczonych wewnątrz konstrukcji ograniczonych przez słowa kluczowe;
• instrukcje wyjścia, zakończenia oraz skoku do etykiety w programie (Break, Continue, Goto, Return), pozwalające na realizację wyjścia z pętli, funkcji oraz przeskoku w związku ze spełnieniem określonego warunku;
• instrukcje wywołania innego podprogramu (Call), pozwalające na podział programu już na etapie tworzenia algorytmu na moduły odpowiedzialne za realizację często powtarzających się elementów, np. obsługa otwarcia i zamknięcia chwytaka;
• instrukcje wstrzymujące wykonanie dalszej części programu na określony czas mierzony w milisekundach lub sekundach albo do czasu spełnienia określonego warunku, np. uzyskania sygnału na wejściu robota;
• instrukcje zakończenia programu, pozwalające na wcześniejsze zakończenie programu lub na wyjście z podprogramu do programu głównego (End).
Instrukcje matematyczne
Instrukcje matematyczne zawierają przede wszystkim dostęp do bardziej zaawansowanych elementów niż dodawanie, odejmowanie, mnożenie, dzielenie i operacje modulo. Biblioteka instrukcji matematycznych dotyczy przede wszystkim instrukcji związanych z obsługą funkcji trygonometrycznych, które mogą być wykorzystane do obliczania wartości zmiennych w pamięci robota, które to zmienne mogą być następnie wykorzystane do modyfi kacji parametrów instrukcji ruchu.
Instrukcje dedykowane do procesu
Instrukcje przeznaczone do procesu charakteryzują się tym, że są w sposób bezpośredni dedykowane do konkretnego procesu technologicznego. W przypadku robotów spawalniczych jest to cała biblioteka komend, służących do obsługi procesu wraz z bardzo szczegółową parametryzacją poszczególnych instrukcji. Dodatkowo za samymi instrukcjami idą specjalne „menedżery” ułatwiające konfi gurację i wypełnianie formularzy opisujących parametry procesu. Użytkownik wywołuje tylko komendy udostępnione dla danego robota, a w tle realizowane są poszczególne operacje, o których użytkownik może w pełni nie wiedzieć [I.11].
Instrukcje dodatkowe
Instrukcje dodatkowe to wszelkiego rodzaju elementy mające na celu poprawienie czytelności opracowywanego kodu. Przykładem mogą być tutaj takie elementy kodu jak komentarze. Poza wymienionymi grupami instrukcji, część producentów robotów w rozwiązaniach bazujących na językach wysokiego poziomu pozwala na tworzenie własnych funkcji oraz makr. Z zagadnieniami tymi nierozerwalnie wiąże się kwestia zasięgu zmiennych programowych oraz przekazywania tych zmiennych do i z funkcji. W przypadku instrukcji makro, rozwiązanie ma na celu uproszczenie procesu zarówno programowania, jak i sterowania robotem. Przykładem może być tu rozwiązanie oferowane przez fi rmę FANUC, gdzie istnieje możliwość zarejestrowania programu
składającego się z sekwencji instrukcji jako pojedynczej instrukcji i wywoływania jej zarówno w innym programie, jak i za pośrednictwem klawiszy panelu nauczania do których makro zostanie przypisane.
Programowanie robotów przemysłowych wymaga znajomości nie tylko składni języka programowania, ale również podstawowych zasad związanych ze sterowaniem robotem przemysłowym. W celu uniknięcia błędów przy tworzeniu nowego oprogramowania, programista powinien postępować według pewnych określonych zasad, które pozwolą mu na szybkie i racjonalne osiągnięcie zamierzonego celu. Na rysunku 1.14 przedstawiono schemat czynności, jakie powinien wykonać programista, aby szybko i poprawnie opracować nowy program robota. W pierwszej kolejności, zanim przystąpi się do programowania robota, należy
dokładnie zdefi niować problem i jeśli zadanie jest skomplikowane, należy je podzielić na mniejsze zagadnienia. Warto już na tym etapie skorzystać z dostępnych bibliotek i rozwiązań udostępnianych przez producenta i autorsko opracowanych we wcześniejszych projektach. Następnie należy opracować algorytmy, dzięki którym możliwe będzie rozwiązanie zadań cząstkowych. Należy jednak pamiętać, że taki podział prowadzi do podziału docelowego programu na części, a co za tym
idzie – do podziału procedur i czasów obsługi poszczególnych urządzeń. Połączenie algorytmów zadań cząstkowych w całość da odpowiedź, czy zadanie zostało rozwiązane poprawnie i czy jest możliwa jego realizacja. Na tym etapie warto wydzielić operacje, które będą się często powtarzały (otwarcie, zamknięcie chwytaka itp.) i zapisać je w zależności od złożoności albo w postaci makr, podprogramów lub odrębnych programów. Takie rozwiązanie ma tę zaletę, iż programując kolejny proces lub go modyfi kując programista będzie już miał gotowe i sprawdzone procedury, które są łatwe do wykorzystania. Dobrym przykładem może być stanowisko z systemem wymiany narzędzi. Jeśli programista dysponuje opracowanymi procedurami, funkcjami, podprogramami lub makrami, obsługującymi taki system i sterowanie pracą poszczególnych narzędzi, to przy modyfi kacji aplikacji może on skorzystać z gotowych elementów, nie narażając się na potencjalne błędy aplikacji.
Rys. 1.14. Strategia programowania
Jeśli algorytm zadania jest poprawny, można przystąpić do kodowania (napisania programu w wybranym języku programowania) poszczególnych elementów aplikacji, a następnie do kompilacji kodu źródłowego (o ile język programowania wymaga kompilacji kodu źródłowego programu). Kompilacja programu pozwoli na wykrycie wszystkich błędów składni, a przetestowanie go w trybie symulacji uwidoczni poprawność jego funkcjonowania oraz wskaże potencjalne błędy semantyczne, które będzie można usunąć. Jeśli testowanie w trybie offline przebiegło pomyślnie, program można przetestować z wykorzystaniem rzeczywistego robota. Należy tutaj zwrócić uwagę na fakt, że część producentów robotów w celu uzyskania tożsamości kodu napisanego offline i stanowiska z rzeczywistym robotem i osprzętem, wymaga procedury kalibracji, w celu minimalizacji niedokładności związanych z lokalizacją poszczególnych elementów stanowiska.
Podczas testowania opracowanego kodu programu na rzeczywistym robocie należy pamiętać o zachowaniu zasad bezpieczeństwa i przeprowadzeniu testów, poczynając od uruchomienia w trybie T1 (prędkości napędów poszczególnych osi zostaną zredukowane do wartości minimalnych). Po przeprowadzeniu testów krokowych, powinny zostać wykonane testy w pracy ciągłej, przy ograniczonej prędkości, a następnie z pełną zaprogramowaną prędkością. Po testach (kiedy wyeliminowane zostaną błędy w programie) powinien zostać przeprowadzony etap związany z walidacją i ewentualną optymalizacją procesu w celu uzyskania założonych parametrów procesu. Ostatnim elementem jest wytworzenie dokumentacji, w której znajdą się m.in. możliwości oraz ograniczenia utworzonego programu. Po realizacji wyżej omówionych kroków program robota jest gotowy i można go wykorzystać do sterowania robotem podczas wykonywania przez niego rzeczywistych zadań. Strategia programowania stanowi element opisujący proces tworzenia całości programu dla robota przemysłowego. Jeśli zejdziemy jednak do warstwy niższej, konieczna jest znajomość pewnych zasad, które związane są bezpośrednio z zagadnieniem sterowania robotami, czyli wspomnianą wcześniej pragmatyką. Stosowanie się do zasad ma na celu przede wszystkim eliminację błędów, mogących skutkować wystąpieniem potencjalnych kolizji podczas ruchu robota, jak również doprowadzenia do tego, aby uzyskać jak najwyższą efektywność zrobotyzowanego procesu. W tym celu warto pamiętać o następujących zasadach dotyczących programowania robotów
Każdy program powinien mieć zapisaną pozycję referencyjną. Jest to pozycja bezpieczna, znajdująca się z dala od przestrzeni ruchu narzędzia oraz urządzeń, z której robot rozpoczyna swoją pracę i do której wycofuje się po wykonaniu całego programu. Pozycja referencyjna charakteryzuje się również tym, że robot wchodząc do tej pozycji wystawia sygnał do urządzeń zewnętrznych informując, że znajduje się w ściśle określonym położeniu.
• Program robota powinien zawierać jak najmniej zapisanych pozycji i powinien wykorzystywać mechanizmy pozwalające na wyliczanie w sposób dynamiczny pozycji potrzebnych do realizacji zadania, np. pozycji kolejnych elementów w procesie paletyzacji.
• Czas cyklu ulega wydłużeniu, jeżeli robot podczas ruchu zmienia orientację narzędzia. Robot przemieszcza się znacznie szybciej, jeżeli orientacja narzędzia zmieniana jest wolno i stopniowo.
• Pozycja chwytania i odkładania przedmiotu powinna być osiągana z dużą dokładnością (ruch precyzyjny) i w interpolacji liniowej. Tego typu pozycjonowania należy używać również do wszystkich pozycji przetrzymywania przedmiotu.
• Poruszanie się dookoła elementu obrabianego należy realizować z pozycjonowaniem o mniejszej dokładności (ruch zgrubny), bez zatrzymywania się w zaprogramowanej pozycji.
• Operacje związane z obsługą narzędzi powinny być zapisane w postaci odrębnych podprogramów lub makr i powinny uwzględniać stałe czasowe związane z danym narzędziem (np. uwzględnienie czasu otwierania i zamykania chwytaka).
• Operacje obsługi narzędzi powinny zwracać sygnał informujący o stanie narzędzia.
• W przypadku programowania stanowiska z kilkoma manipulatorami należy unikać przecinania się trajektorii ruchu TCP robotów lub stosować narzędzia programowe eliminujące niebezpieczeństwo wystąpienia kolizji.
Dla przykładu rozwiązanie zadania polegającego na przenoszeniu detali z pozycji (P2) do pozycji (P5) może być zrealizowane przy zapisaniu od trzech do nawet siedmiu pozycji robota (rys. 1.15). Poprawne rozwiązanie wymaga jednak zdefi niowania jedynie trzech pozycji:
1. Pozycji referencyjnej (P1).
2. Pozycji, z której detal będzie pobierany (P2).
3. Pozycji, na którą detal będzie odkładany (P5).
Pozycje (P3) i (P4) podobnie jak (P6) i (P7) stanowią modyfi kację pozycji (P2) i (P5), przez odsunięcie chwytaka (uwzględnienie offsetu narzędzia). Rozwiązanie takie jest w pełni sparametryzowane, a naniesienie jakichkolwiek modyfi kacji (np. przesunięcie pozycji (P2) lub (P5)) powoduje automatyczne przeliczenie współrzędnych pozostałych punktów. Tak jak wspomniano już wcześniej, pragmatyzmu nabywa się z doświadczeniem, realizując kolejne zadania i mierząc się z kolejnymi wyzwaniami.
Rys. 1.15. Trajektoria dla zadania podnieś–przenieś–połóż
Programowanie robotów przemysłowych, Warszawa 2017, Autorzy: dr inż. Panasiuk Jarosław, ppłk dr inż. Wojciech Kaczmarek, Wydawca: Wydawnictwo Naukowe PWN