Jak zasymulować stanowisko zrobotyzowane za pomocą K-ROSET oraz KIDE na robocie Kawasaki, a następnie przenieść aplikację na robota edukacyjnego Astorino
Kontakt w sprawie artykułu: Łukasz Giza - 2023-12-18

Z tego artykułu dowiesz się:
- jak zasymulować proste stanowisko z robotem Kawasaki Robotics przy pomocy K-ROSET oraz KIDE,
- jak napisać przykładowy program dla robota serii R,
- jak przenieść gotowy program do robota edukacyjnego Astorino.
Dzięki temu poradnikowi dowiesz się jak zasymulować proste stanowisko zrobotyzowane, programowane offline przy pomocy K-ROSET oraz KIDE dedykowanego dla robotów Kawasaki. Napiszemy i przeanalizujemy krok po kroku program pozwalający na przenoszenie kostek oraz obsługę sygnałów I/O w robocie serii R.
Następnie tak utworzony i przetestowany w bezpiecznych warunkach program zaimplementujemy do robota edukacyjnego ASTORINO i przetestujemy działanie w rzeczywistości.
Zaczynamy!
Przybliżony czas wykonywania aplikacji:
Symulacja: 45 min
Astorino: 30 min
1. Potrzebne urządzenia oraz oprogramowanie
Do wykonania aplikacji potrzebne będą następujące elementy:
- Robot Astorino wraz z oprogramowaniem;
- Wydrukowane kostki lub ich odpowiednik;
- K-ROSET (darmowa wersja lite) – symulator zrobotyzowanych stanowisk Kawasaki;
- KIDE (wersja darmowa) – program umożliwiający zaawansowaną pracę z robotami Kawasaki;
- Komputer PC z systemem operacyjnym Windows.
W celu pobrania K-ROSET oraz KIDE wejdź na stronę internetową ASTOR (https://www.astor.com.pl/ ), a następnie przejdź do: Oferta > Robotyzacja > Roboty Przemysłowe > Oprogramowanie narzędziowe.


Postępuj zgodnie z instrukcjami na stronie internetowej oraz podczas instalacji, w razie pytań skontaktuj się z wsparciem technicznym zgodnie z danymi kontaktowymi podanymi na stronie.
2. K-ROSET
2.1 Budowa stanowiska zrobotyzowanego
Po zainstalowaniu K-ROSET tworzymy nowy projekt: w zakładce Layout należy kliknąć prawym przyciskiem myszy na New Project, a następnie Project > New (rys. 3), wybrać nazwę oraz potwierdzić OK (rys. 4).


Został dodany pusty projekt. Teraz dodajemy robota, klikając na nazwę projektu (rys. 5) podświetloną na kolor niebieski prawym przyciskiem myszy, a następnie wybieramy Add -> Robot.


Pojawia się okno, w którym możemy wybrać ramię zrobotyzowane. Podzielone są one według zastosowania, serii kontrolera oraz serii robota.
Wybieramy robota serii R o udźwigu 5kg RC005L-A001, ale nic nie stoi na przeszkodzie, aby przeglądnąć pozostałe serie. Należy pamiętać, że roboty różnią się wymiarami, zakresem ruchów, liczbą osi i nie tylko!
Program działający na robocie serii R może wymagać poprawek w przypadku serii CP, ze względu na kinematykę.

Wybrany robot powinien wczytać się do symulatora. Używając prawego klawisza myszy w niebieskim prostokącie i trzymając go, możemy obracać widokiem symulatora. Na pasku na górze mamy szereg funkcji dostosowania widoku. Przydatną funkcją jest zmiana opcji zoom (symbol lupy) na Mouse position – pozwoli to na oddalanie się (przy pomocy środkowego przycisku myszy) od miejsca, w którym znajduje się kursor myszy, a nie od centrum symulacji.
2.2 Zapis projektu
Zapis projektu dokonuje poprzez naciśnięcie prawym przyciskiem myszy na nazwę projektu -> Project -> Save i wybieramy miejsce zapisu.

2.3 Poruszanie się robotem za pomocą Teach Pendanta
Poruszanie robotem możemy zrealizować przy pomocy Teach Pendanta bezpośrednio w symulatorze – tak jak ma to miejsce w rzeczywistości. W tym celu w dolnym pasku (dolna część ekranu) wybieramy Controller, w zakładce Quick Settings zaznaczamy opcję Animate Robot in Teach Mode, a następnie potwierdzamy przyciskiem Apply.

Następnie w zakładce R01 odpowiadającej pierwszemu dodanemu ramieniu naciskamy Show Pendant.

Pojawi się wirtualny Teach Pendant (TP, rys. 11). Należy przełączyć robota w tryb manualny (rys. 11 pkt. 1), włączyć napędy (rys. 11 pkt. 2) oraz upewnić się, że robot znajduje się w układzie JOINT (rys. 11 pkt. 3), a prędkość wynosi 5 (rys. 11 pkt. 4). Zmiany dokonuje się klikając na daną ikonkę. Następnie można poruszyć robotem przy pomocy klawiatury TP (rys. 11 pkt. 5). Robot będzie wykonywał zadane ruchy każdą z sześciu osi osobno.

Aby wyświetlić monitor osi oraz współrzędnych kartezjanskich układu bazowego robota na TP (rys. 11 pkt. 7), należy kliknąć lewym przyciskiem myszy na zielony obszar (rys. 11 pkt. 6), a następnie z rozwijanego menu wybrać Monitor1 -> Axis data monitor (rys. 12).

2.4 Dodawanie obiektów 3D (opcjonalne)
W symulatorze mamy możliwość dodawania obiektów 3D z podziałem na elementy mogące być przenoszone przez robota (work) oraz stacjonarne (obstacle).
Przenoszenie elementów przez robota jest dostępne w pełnej wersji K-ROSET, gdzie można dodać wiele obiektów – w wersji Lite jedynie jeden, w szczególnym przypadku dwa.
Aby dodać dwa obiekty, najpierw dodajemy chwytak. Aby wczytał on się poprawnie, musi mieć odpowiednio zdefiniowany układ współrzędnych (rys. 13). W przypadku tworzenia własnego modelu należy odpowiednio przesunąć początek układu współrzędnych. Możesz też wykorzystać przygotowane przez nas przykładowe modele – skontaktuj się z nami.

W celu dodania chwytaka należy nacisnąć prawym klawiszem myszy na ToolArrow w głównym drzewku projektu, a następnie wybrać Add -> Environment -> Obstacle… i podać ścieżkę pliku (rys. 14).
Model chwytaka zostanie wczytany bezpośrednio na koniec flanszy robota.

Aby dodać drugi obiekt, naciskamy prawym klawiszem myszy na nazwę projektu, następnie wybrać Add -> Environment -> Work… (rys. 15).

Model został wczytany w miejscu początku układu współrzędnych symulacji, czyli znajduje się „w” podstawie robota. W wersji K-ROSET Lite nie mamy możliwości przesuwania dwóch obiektów, dlatego przesuniemy robota.
Należy nacisnąć prawym klawiszem myszy na nazwę robota w symulacji, a następnie wybrać Position -> Change… i wpisać podane wartości X, Y, Z i potwierdzić przyciskiem Apply (rys. 16).

Poprawnie wczytane elementy wraz z robotem powinny prezentować się tak jak poniżej:

3. KIDE
3.1 Tworzenie projektu
W celu utworzenia nowego projektu w KIDE naciskamy kolejno File -> New, zaznaczamy opcję pustego pliku oraz potwierdzamy OK.

3.2 Zapis projektu
Zapis projektu należy wykonać poprzez zakładkę File w pasku głównym programu, a następnie wybranie opcji Save as oraz wskazanie ścieżki pliku.

Aby stworzyć program w projekcie, należy nacisnąć prawym klawiszem myszy na Program w głównym drzewku, a następnie wybrać Add -> Program…, wprowadzić nazwę i potwierdzić OK.

Tym sposobem utworzyliśmy nasz program, możemy teraz edytować autora oraz dopisać komentarz.

Funkcje, komendy oraz poszczególne funkcjonalności zostały szczegółowo opisane w dokumentacji AS_language, dostarczanej z robotem Astorino oraz dostępnej do pobrania na stronie https://www.astor.com.pl/wsparcie/dokumentacja-techniczna/kawasaki.html
Na początku naszego programu pisanego w AS language ustawimy parametry, z jakim poruszać się będzie nasz robot. Dopisek ALWAYS na końcu pozwala zastosować wybrane ustawienia dla całego programu, z kilkoma wyjątkami. Użycie średnika pozwala na pisanie komentarzy objaśniających linijki kodu – jest to przydatne przy późniejszych modyfikacjach aplikacji. W tym przypadku parametry bez jednostki odnoszą się do procentowych maksymalnych danych parametrów robota.

Przechodzimy do deklaracji zmiennych, które będziemy używać w programie.
rozstaw_alfa oraz rozstaw_beta odpowiadają odległościom kostek od siebie, w punkcie poboru zostaną one ustawione jedna obok drugiej, dlatego rozstaw jest równy szerokości kostki. W przypadku odłożenia (rozstaw_beta) należy wziąć poprawkę na szerokość, na jaką otwiera się chwytak – dlatego wartość tutaj jest równa 50 mm.
W przypadku odłożenia detalu zmniejszymy prędkość do 10% (zmienna predkosc_dojazdu), aby móc łagodnie dojechać do punktu docelowego.

Następnie tworzymy funkcję dojazdu do punktu złączowego #p0 z zastosowaniem interpolacji złączowej. Pozwoli nam to na uzyskanie zawsze tego samego punktu początkowego niezależnie od poprzedniej konfiguracji ramienia, a także pozwoli na ominięcie pozycji osobliwych ramienia. Punkt #p0 określimy w kolejnych krokach. Funkcja SPEED bez dopisku ALWAYS na końcu linijki pozwala zastosować prędkość jedynie do kolejnego ruchu. Dopisujemy także funkcję CALL, która otwiera szczęki chwytaka.

Kolejnym krokiem jest stworzenie pętli FOR, w której określimy punkty poboru oraz miejsca odłożenia kostek. Zadeklarowane wcześniej zmienne posłużą do parametryzacji funkcji – tak aby raz napisana pętla mogła być w prosty sposób zmodyfikowana.
Na początku użyjemy wbudowanego timera do zmierzenia czasu cyklu. W linijce nr 24, czyli w miejscu, w którym będziemy zaczynać pętlę, wyzerujemy go. Następnie w zadeklarowanej zgodnie z AS language pętli utworzymy punkty przy użyciu funkcji point.
Punkty te następnie będziemy przesuwać za pomocą funkcji SHIFT przy każdej iteracji pętli, uzależniając przesunięcie w danej osi od zadeklarowanej zmiennej oraz zmiennej użytej w pętli FOR.
Iteracja zaczyna się od wartości 0, dlatego dla pięciu kostek funkcja będzie kończyć się na wartości 4.
Funkcja LAPPRO pozwala na dojazd nad zadeklarowany punkt poboru, z danym przesunięciem w osi „-z” układu narzędzia.
Następnie w linijce 31 dojeżdżamy do docelowego punktu ze zmienioną prędkością oraz odwołujemy się do podprogramu chwytaka.
Następnie dzięki LDEPART odsuwamy się od miejsca poboru kostki (w osi „-z” układu narzędzia od bieżącej pozycji) w ruchu liniowym, tak aby bezpiecznie przetransportować detal bez nauczania dodatkowego punktu. Linijki 38 do 45 to powtórzenie ruchów dla punktów odłożenia.
Tak zdefiniowaną funkcję FOR kończymy wyrażeniem END.

Dodamy jeszcze jedną funkcję FOR, która znajduje się na końcu programu i będzie wykonywać trzykrotne zamknięcie chwytaka, potwierdzające wykonanie programu oraz wyświetlenie czasu cyklu w terminalu Astorino.
3.4 Tworzenie podprogramów
Aby stworzyć podprogram, należy nacisnąć prawym klawiszem myszy na Programs -> Add -> Program… i nazwać program zgodnie z wcześniejszym przykładem. W obu podprogramach zasymulujemy zamknięcie chwytaka poprzez dodanie opóźnienia równego jednej sekundzie, pozwalające na przesterowanie chwytaka oraz dodanie obsługi I/O.
Wykorzystamy funkcję signal, która pozwala wystawić stan wysoki na dane wyjście cyfrowe ( dodanie minusa przed numer wyjścia ustawia stan niski). Zasymulujemy działanie chwytaka z zaworem pięciodrogowym, dwupołożeniowym – takim, jaki jest wykorzystywany w Astorino na wyjściu 57.

Funkcja TWAIT odpowiada za odczekanie 1 sekundy – zasymulujemy w ten sposób przesterowanie chwytaka pneumatycznego.

3.5 Zapis punktów złączowych oraz kartezjańskich
Naciskając dwa razy lewym przyciskiem myszy na Translation points w głównym drzewku projektu mamy możliwość utworzenia punktów kartezjańskich.

Wybieramy opcję + (zielony znak plus) i tworzymy dwa punkty tak jak poniżej. Wypełniamy okienko Name właściwą nazwą punktu oraz kolumnę Value w tabelce po prawej – danymi wartościami. Wartości dostosowane są do wykorzystywanego w symulacji robota RS005 i są w jego zasięgu – w przypadku użycia innego modelu należy dostosować wartości lub użyć robota zalecanego w przykładzie.


Analogicznie przechodzimy do zakładki Precision points i tworzymy punkt złączowy. Punkty złączowe należy zapisywać poprzedzając ich nazwę znakiem „#”.

4. Wykonanie symulacji
4.1 Podłączenie KIDE do K-ROSET
Po odpowiednim napisaniu programu oraz skonfigurowaniu symulatora należy ustanowić połączenie między programami.
W celu podłączenia KIDE do K-ROSET należy nacisnąć symbol zaznaczony poniżej w programie KIDE:

Następnie należy wybrać numer połączenia, domyślnie jest to R01 (nazwę można też odczytać w symulatorze w zakładce Controller) i nacisnąć Connect.

Po ustanowieniu połączenia w KIDE w terminalu powinna migotać ikonka połączenia (rys. 34), a pasek menu (rys. 32) powinien uzyskać szereg funkcji.

4.2 Przesłanie programu z KIDE do K-ROSET
W tym celu wybieramy w KIDE w górnym pasku symbol robota z czerwoną strzałką w górę (Send AS file to Robot), następnie naciskamy All w kolumnie User data oraz OK. Dane zostaną wysłane do robota.

Teraz w zakładce Program należy nacisnąć prawym klawiszem myszy na program główny main i wybrać Execute program…. Robot musi mieć włączone napędy oraz być w trybie Repeat.

Instrukcja zostanie wysłana, a w symulatorze K-ROSET po chwili robot zacznie wykonywać ruch. W zakładce projektu, naciskając prawym klawiszem myszy na TrackLine oraz wybierając Show TrackLine i ustawiając jej parametry, mamy możliwość wyświetlenia ścieżki TCP robota (punktu środkowego narzędzia – domyślnie jest to środek flanszy ostatniej osi robota), jaką pokonał podczas ruchu w naszej aplikacji. Clear Data pozwala usunąć ścieżkę np. gdy wprowadziliśmy zmiany i chcemy zobaczyć jej nową wersję.

Poprawnie zrealizowany program powinien wyglądać jak powyżej. Ścieżka pozwala na prześledzenie ruchu TCP robota, a tym samym na zweryfikowanie poprawności programu. Symulacja przenoszenia elementów dostępna jest w pełnej wersji programu, dlatego kostka nie zmieniła swojego położenia.

W terminalu KIDE dostępna jest informacja o czasie cyklu timera 1, który był wykorzystywany. W tym przypadku wynosi on 15,048 s.
5. Wykonanie aplikacji z użyciem Astorino
Na początku należy włączyć robota Astorino i uruchomić aplikację Astorino. Następnie podłączamy się do robota przy użyciu np. przewodu USB, włączamy napędy i wykonujemy zerowanie.

W kolejnym kroku tworzymy odpowiednie programy oraz wklejamy do nich kod napisany w KIDE. Jako że Astorino ma inne rozmiary, niż wykorzystywany wcześniej robot serii R, musimy przeuczyć wykorzystywane 3 punkty (rys. 40, zakładka Punkty). Punkt złączowy #p0 (pozycja domowa) oraz punkty współrzędnych kartezjańskich – p0 (miejsce poboru kostek) i p1 (miejsce odłożenia kostek) należy dostosować do wykorzystywanego miejsca oraz możliwości robota. Dzięki parametryzacji pozostałych punktów poboru i odłożenia detali wyliczanych z funkcji point została zredukowana ich liczba, a tym samym czas wdrożenia aplikacji.

Następnym krokiem jest uruchomienie programu main i obserwowanie działania robota, w przypadku wszelkich zauważonych nieprawidłowości pracy należy niezwłocznie użyć przycisku E-Stop.
Poniżej zostały przedstawione zdjęcia z aplikacji podczas uczenia punktów i po wykonaniu programu z ułożonym napisem. Podczas układania kostek w punkcie poboru warto wykorzystać np. linijkę, aby ustawić detale w linii prostej.

W zakładce ustawienia systemowe wyświetlony zostanie czas cyklu Astorino, w tym przypadku równy 56,40 sekundy. Czas ten można porównać z czasem uzyskanym w symulacji oraz wyciągnąć wnioski.

6. Kod programu
6.1. main
.PROGRAM main ()
; *******************************************************************
;
; Program: Ukladanie_kostek
; Comment: Program glowny do ukladania kostek
; Author: Lukasz Giza Astor
;
;
; *******************************************************************
;
SPEED 50 ALWAYS
DECEL 80 ALWAYS
ACCEL 80 ALWAYS
rozstaw_alfa=25
rozstaw_beta=50
predkosc_dojazdu=10
CALL open_clamp
SPEED 80
jmove #p0
timer 1=0
FOR a=0 TO 4
point pobor_kostki_x = p0
point pobor_kostki_x = SHIFT(pobor_kostki_x BY 0,-rozstaw_alfa*a,0)
LAPPRO pobor_kostki_x,50
SPEED predkosc_dojazdu
LMOVE pobor_kostki_x
CALL close_clamp
SPEED predkosc_dojazdu
LDEPART 50
point odlozenie_kostki_x = p1
point odlozenie_kostki_x = SHIFT(odlozenie_kostki_x BY rozstaw_beta*a,0,0)
LAPPRO odlozenie_kostki_x,50
SPEED predkosc_dojazdu
LMOVE odlozenie_kostki_x
CALL open_clamp
SPEED predkosc_dojazdu
LDEPART 50
END
print "czas cyklu wynosi:"
print timer(1)
print "sekund"
SPEED 80
jmove #p0
FOR b=0 TO 3
CALL open_clamp
CALL close_clamp
END
.END
6.2 close_clamp
.PROGRAM close_clamp ()
; *******************************************************************
;
; Program: close_clamp
;
;
; *******************************************************************
;
signal 57
TWAIT 1
.END
6.3 open_clamp
.PROGRAM open_clamp () ;
; *******************************************************************
;
; Program: Open_clamp
; Comment:
; Author: User
;
;
; *******************************************************************
;
signal -57
TWAIT 1
.END
7. Błędy i rozwiązania:
Resetowanie błędów K-ROSET
W przypadku pojawienia się błędu należy go zresetować, naciskając reset na ekranie Teach Pendanta.

Błąd E1088

Robot osiągnął maksymalne wychylenie i nie może się poruszyć dalej.
Rozwiązaniem jest przesunięcie punktów do strefy roboczej i wycofanie robota w trybie ręcznym.
Błąd E6007

Robot znajduje się w pozycji osobliwej, odwrotne zadanie kinematyki ma nieskończenie wiele rozwiązań, ponieważ niektóre osie obrotowe są równoległe do siebie.
Rozwiązanie to przełączenie robota w tryb Teach i w układzie JOINT przesunięcie robota tak, aby osie nie były równoległe do siebie (np. w przypadku osi 4 i 6 to zgięcie osi 5) – oraz dostosowanie punktów w programie, aby omijać pozycję osobliwą.
Robot nie porusza się w trybie Teach (K-ROSET)
Upewnij się że robot w symulatorze K-ROSET jest w trybie Teach, a napędy są włączone.

Robot nie porusza się w trybie Repeat (K-ROSET)
Upewnij się że robot w symulatorze K-ROSET jest w trybie Repeat.

Teach Pendant nie mieści się na ekranie
W przypadku małych ekranów może wystąpić sytuacja, w której wirtualny Teach Pendant ma większy rozmiar, niż wyświetlacz. W tym przypadku należy nacisnąć prawym klawiszem myszy na dolny element TP (na ilustracji zaznaczony zielonym okręgiem – miejsce bez żadnych przycisków) oraz wybrać Positon -> Free. Teach Pendant podzieli się na dwa elementy możliwe do wyświetlenia obok siebie, dolny element (klawiaturę) możemy teraz przesunąć, naciskając i trzymając lewy przycisk myszy.

Use only ASCII characters
W przypadku tego błędu usuń z programu znaki polskie, takie jak: ł, ą, ę.
Błędy Astorino
W celu wyeliminowania typowych błędów, które mogą się pojawić w tej aplikacji, upewnij się, że firmware Astorino został zaktualizowany do najnowszej wersji.
Pozostałe błędy
W przypadku wystąpienia innych błędów należy skontaktować się z pomocą techniczną ASTOR:
- telefonicznie:12 424 00 88
- mailowo: support@astor.com.pl
- lub przez stronę internetową: https://www.astor.com.pl/wsparcie.html
8. Zobacz też:
Sprawdź też nasz darmowy kurs: Robot edukacyjny Astorino – kurs dla początkujących.