Conveyor tracking w AstorinoIDE – wirtualna aplikacja z przenośnikiem taśmowym
Kontakt w sprawie artykułu: Kamila Piechocka - 2026-09-15
Conveyor tracking jest funkcją pozwalającą robotowi wykonywać operacje na detalach znajdujących się na poruszającym się przenośniku. Pozycja elementu nie jest w takim przypadku traktowana jako stały punkt w przestrzeni. Robot wykorzystuje informację o przemieszczeniu taśmy i na jej podstawie na bieżąco aktualizuje położenie śledzonego detalu.
W tym artykule przygotujemy kompletną aplikację conveyor tracking wyłącznie z wykorzystaniem symulatora dostępnego w środowisku AstorinoIDE. Nie będzie potrzebny fizyczny przenośnik, enkoder ani czujnik.
Wirtualny robot będzie pobierał poruszające się po taśmie kostki, a następnie odkładał je do dwóch gniazd magazynu.
Z tego artykułu dowiesz się:
- jak utworzyć i skonfigurować wirtualny przenośnik w AstorinoIDE,
- czym różni się obiekt typu Work od Obstacle,
- jak uruchomić wirtualny enkoder,
- jak skonfigurować parametry conveyor tracking,
- jak utworzyć wirtualny czujnik wykorzystując funkcję Collision Detection,
- jak wykorzystać sygnały wewnętrzne do wykrywania detali,
- jak przygotować punkty pobierania i odkładania,
- jak działa zapis pozycji detalu względem enkodera,
- do czego służą instrukcje CVCOOPJT, CVRESET, CVPOS, CVWAIT, CVLAPPRO, CVLMOVE, CVDELAY i CVLDEPART,
- jak wykonać kompletny program pobierający dwa detale z poruszającego się przenośnika.
Założenia aplikacji
Celem aplikacji jest pobranie dwóch kostek transportowanych przez wirtualny przenośnik i umieszczenie ich w dwóch gniazdach magazynu.
Podczas całego procesu przenośnik pozostaje w ruchu. Robot nie oczekuje więc na zatrzymanie detalu, lecz wykonuje jego pobranie podczas jazdy taśmy.
Schemat działania aplikacji jest następujący:
1. Kostka porusza się razem z przenośnikiem.
2. Kostka dociera do wirtualnego czujnika.
3. Kontakt kostki z czujnikiem powoduje aktywowanie sygnału wewnętrznego.
4. Program odczytuje aktualną pozycję wirtualnego enkodera.
5. Pozycja enkodera zostaje przypisana do punktu pobierania kostki.
6. Kostka kontynuuje ruch na przenośniku.
7. Robot synchronizuje swój ruch z taśmą i pobiera poruszający się detal.
8. Detal zostaje przeniesiony do magazynu.
9. Procedura jest powtarzana dla drugiej kostki.

Przygotowanie wizualizacji
Do utworzenia stanowiska wykorzystujemy okno Visualization programu AstorinoIDE.
Wizualizacja pozwala na dodawanie modeli STL oraz podstawowych brył i przypisywanie im jednej z trzech klas:
- Obstacle – nieruchomy element stanowiska,
- Work – element, który może być przemieszczany przez robota,
- Tool – element związany z kiścią robota.
W przypadku naszej aplikacji kostki muszą być obiektami klasy Work, ponieważ tylko obiekty tego typu mogą być przemieszczane przez wirtualny przenośnik oraz pobierane przez robota.
Aby dodać transportowane kostki do wizualizacji należy skorzystać z zakładki Shape Generator:

Dla tej aplikacji stworzone zostały dwie kostki o następujących parametrach:

W polu Cube side size (A) określa się długość boku sześcianu. Dla tej aplikacji przyjęto wartość 25 mm. Następnie w sekcji Location należy podać początkowe współrzędne obiektu w przestrzeni roboczej. W polu Add shape as należy wybrać typ Work, ponieważ tylko obiekty tej klasy mogą być transportowane przez wirtualny przenośnik oraz chwytane przez robota. Następnie można wybrać kolor obiektu i zatwierdzić jego utworzenie przyciskiem Add.
Dla drugiej kostki należy zastosować takie same ustawienia, jak dla pierwszej. Jedyną zmianą jest wartość współrzędnej Y w sekcji Location, którą ustawiamy na -50 mm. Dzięki temu druga kostka zostaje umieszczona na taśmociągu w odpowiedniej odległości od pierwszej, co zapewnia prawidłowy odstęp między detalami podczas symulacji.
Po zakończeniu rozmieszczania elementów w symulacji warto skorzystać z okna Settings, dostępnego z poziomu paska narzędzi okna Visualization. W tej zakładce szczególnie przydatne są funkcje Record, Restore oraz opcje Import i Export, które ułatwiają wielokrotne uruchamianie tej samej symulacji bez konieczności ponownego ręcznego ustawiania wszystkich elementów.

Record/Restore
Przyciski umożliwiają zapisanie bieżącego rozmieszczenia elementów Work i Obstacle, a następnie przywrócenie go po wykonaniu symulacji.
Jest to szczególnie przydatne w naszym przykładzie, ponieważ po zakończeniu programu kostki znajdują się już w magazynie. Funkcja Restore pozwala szybko przywrócić je do położenia początkowego.
Import/Export
Pozwala zapisać przygotowaną scenę do pliku XML oraz ponownie ją zaimportować.
Dzięki temu nie trzeba przy każdym uruchomieniu AstorinoIDE ponownie rozmieszczać wszystkich elementów stanowiska. AstorinoIDE nie zapisuje samych modeli STL do XML — zapisuje jedynie ich odwołania, dlatego pliki STL trzeba przechowywać osobno, najlepiej w tym samym folderze.
Utworzenie wirtualnego przenośnika
Kolejnym krokiem jest dodanie wirtualnego przenośnika.
W oknie Visualization wybieramy przycisk konfiguracji Conveyor Settings.


- Number przypisuje wirtualny przenośnik do jednego z dwóch kanałów conveyor trackingu. Wybór
Conveyor 1powoduje, że przenośnik współpracuje z danymi pierwszego conveyora, odczytywanymi w programie m.in. za pomocąCVPOSi wybieranymi przezCVCOOPJT 8. - Internal signal conveyor ON/OFF wskazuje sygnał wewnętrzny odpowiedzialny za uruchamianie i zatrzymywanie taśmy. Dla wartości 2 przenośnik jest sterowany sygnałem 2002, czyli np. SIGNAL 2002 uruchamia taśmę, a SIGNAL -2002 ją zatrzymuje.
- Internal signal conveyor DIR służy do sterowania kierunkiem ruchu przenośnika za pomocą sygnału wewnętrznego. Jeżeli opcja pozostaje ustawiona na OFF, kierunek nie jest przełączany programowo przez ten sygnał.
- Size [mm] ustala wymiary wirtualnego przenośnika.
- Location służy do ustawienia położenia przenośnika w przestrzeni symulacji.
- Increment określa wartość pojedynczego kroku podczas zmiany położenia przenośników za pomocą suwaków.
Po ustawieniu odpowiednich wartości klikamy przycisk Apply w celu zatwierdzenia wprowadzonych zmian lub Remove w celu usunięcia wybranego przenośnika z wizualizacji.
Wirtualny conveyor może transportować wyłącznie obiekty klasy Work. Aby obiekt został przejęty przez conveyor, musi znaleźć się wewnątrz obszaru reprezentującego jego wirtualną bryłę:

Konfiguracja conveyor trackingu
Samo utworzenie poruszającego się modelu taśmy nie wystarcza jeszcze do wykonania conveyor trackingu.
Robot musi wiedzieć:
- z którym conveyorem współpracuje,
- jaka jest zależność pomiędzy sygnałem enkodera a przemieszczeniem taśmy,
- w którym kierunku względem układu BASE porusza się conveyor.
W tym celu należy przejść do Setup -> System Configuration -> Conveyor Tracking -> Conveyor 1:


Parametr Resolution [mm/bit] określa, ilu milimetrom rzeczywistego przemieszczenia taśmy odpowiada jeden impuls enkodera.
Parametr Conv Moving Direction określa kierunek ruchu conveyora względem układu współrzędnych BASE robota.
Po ustawieniu odpowiednich parametrów w tym miejscu przechodzimy do zakładki Virtual Encoder.
W rzeczywistym stanowisku pozycja taśmy jest określana na podstawie impulsów generowanych przez enkoder zamontowany przy przenośniku. Podczas pracy wyłącznie w symulatorze jego rolę może przejąć Virtual Encoder.

W tym oknie zaznaczamy Enable Virtual Encoder oraz wybieramy conveyor o numerze ustawionym wcześniej, w tym przypadku: CONV1.
W przedstawionej aplikacji nie ma potrzeby używania przycisku Start w zakładce Virtual Encoder. Ruch wirtualnego przenośnika oraz aktualizacja jego położenia rozpoczynają się po uruchomieniu conveyora w programie za pomocą SIGNAL 2002.
WAŻNE: w używanej konfiguracji po ponownym uruchomieniu AstorinoIDE należy sprawdzić, czy opcja Enable Virtual Encoder nadal jest aktywna.
Bez pracującego encodera funkcje wykorzystujące położenie conveyora nie będą miały poprawnej informacji o jego przemieszczeniu.
Symulacja czujnika obecności detalu
W rzeczywistym stanowisku do wykrywania kostki można wykorzystać czujnik optyczny lub indukcyjny podłączony do wejścia sterownika. W naszej aplikacji stanowisko jest jednak całkowicie wirtualne. Do zasymulowania czujnika wykorzystujemy funkcję Collision Detection.
Mechanizm ten wykrywa przenikanie się granic dwóch obiektów w wizualizacji i może w takim momencie ustawić wskazany sygnał wewnętrzny.
AstorinoIDE umożliwia definiowanie detekcji pomiędzy:
- Obstacle i Work,
- Obstacle i Tool.
Dzięki temu niewielki nieruchomy obiekt typu Obstacle może pełnić funkcję wirtualnego czujnika, natomiast przejeżdżająca kostka jest obiektem Work:

Aby skonfigurować czujnik przechodzimy do zakładki Collision Detection w oknie symulacji.

Następnie wskazujemy:
- jako Obstacle – obiekt reprezentujący czujnik,
- jako Work – transportowaną kostkę,
- jako Internal Signal – numer 8.
Po dodaniu pary do tabeli AstorinoIDE zacznie monitorować kontakt tych dwóch elementów.

- Obstacle object: wybrany obiekt otoczenia w symulacji, który będzie odgrywał rolę naszego czujnika. W tym przypadku jest to obiekt z Shape Generator typu Cylinder.
- Work/Tool object: wybieramy obiekt, który będzie wchodził w interakcje z czujnikiem.
- Internal Signal: wybieramy numer sygnału, który zostanie aktywowany po kontakcie obiektu z czujnikiem.
Sygnał wewnętrzny nr 8 jest w języku AS odczytywany jako: 2008. Dlatego w programie możemy zastosować: SWAIT 2008.
Robot zatrzyma wykonywanie kolejnych instrukcji aż do chwili, w której kostka znajdzie się w obszarze czujnika.
Należy pamiętać, że Collision Detection bazuje na przenikaniu się obszarów granicznych modeli i nie stanowi dokładnej symulacji fizycznego czujnika. Sama dokumentacja zwraca uwagę, że uproszczony sposób obliczania kolizji nie gwarantuje stuprocentowo dokładnego odwzorowania kontaktu.
Poprawność działania czujnika można zweryfikować w Tools -> I/O Monitor. I/O Monitor wyświetla:
- wejścia fizyczne,
- wyjścia,
- sygnały wewnętrzne,
- sygnały dostępne na ramieniu robota.
Stan wysoki sygnału jest sygnalizowany podświetleniem odpowiedniego pola.
Po wjechaniu kostki w obszar wirtualnego czujnika powinien zostać aktywowany Internal Signal 8.



Wyznaczenie punktu PICK
W conveyor trackingu punkt pobierania ma nieco inne znaczenie niż podczas klasycznego Pick & Place.
Najpierw ustawiamy kostkę dokładnie w pozycji, w której aktywuje ona wirtualny czujnik. Następnie ustawiamy TCP robota w prawidłowej pozycji chwytania i zapisujemy tę pozycję robota jako nasz punkt pobrania.

Wyznaczenie punktu odkładania
Drugim wymaganym punktem jest punkt odłożenia, który w tym przypadku znajduje się w środku pierwszego gniazda magazynu.
Magazyn ma dwa gniazda, których środki są oddalone o około 80 mm. Nie ma więc potrzeby ręcznego uczenia drugiego punktu.
Drugą pozycję można wyznaczyć programowo:
POINT AKT_PLACE = SHIFT(PLACE BY -80,0,0)W zależności od orientacji magazynu względem układu BASE przesunięcie może zostać wykonane w innej osi lub ze znakiem ujemnym.

Program sterujący
Po przygotowaniu wizualizacji, conveyora, encodera, czujnika oraz punktów można przejść do programu robota.
.PROGRAM CONVEYOR
POINT PICK = P45
POINT PLACE = P46
LICZNIK = 0
; AKTYWACJA CHWYTAKA
SIGNAL 58
SIGNAL -8
; CONVEYOR 1
CVCOOPJT 8
CVRESET 8
HOME
; URUCHOMIENIE TAŚMY
SIGNAL 2002
SPEED 500 MM/S ALWAYS
WHILE LICZNIK < 2 DO
; =====================================
; CZEKANIE NA KOSTKĘ
; =====================================
SWAIT 2008
; ZAPAMIĘTANIE POZYCJI CONVEYORA
ENC = CVPOS
; POWIĄZANIE PICK Z POZYCJĄ TAŚMY
POINT/8 PICK = ENC
; CZEKAMY AŻ KOSTKA ODJEDZIE TROCHĘ
; OD CZUJNIKA
CVWAIT 30
; =====================================
; POBRANIE KOSTKI W RUCHU
; =====================================
SPEED 300 MM/S ALWAYS
CVLAPPRO PICK,20
SPEED 100 MM/S ALWAYS
CVLMOVE PICK
CVDELAY 0.05
; ZAMKNIĘCIE CHWYTAKA
SIGNAL 8
CVDELAY 0.15
SPEED 500 MM/S ALWAYS
CVLDEPART 40
; =====================================
; WYBÓR GNIAZDA MAGAZYNU
; =====================================
IF LICZNIK == 0 THEN
; LEWE GNIAZDO
POINT AKT_PLACE = PLACE
END
IF LICZNIK == 1 THEN
; PRAWE GNIAZDO
; ŚRODKI ODDALONE O 80 MM
POINT AKT_PLACE = SHIFT(PLACE BY -80,0,0)
END
; =====================================
; ODKŁADANIE
; =====================================
SPEED 500 MM/S ALWAYS
JAPPRO AKT_PLACE,40
SPEED 100 MM/S ALWAYS
LMOVE AKT_PLACE
TWAIT 0.1
; OTWARCIE CHWYTAKA
SIGNAL -8
TWAIT 0.1
SPEED 500 MM/S ALWAYS
LDEPART 40
LICZNIK = LICZNIK + 1
; RESET ENCODERA, GDY WARTOŚĆ JEST DUŻA
IF CVPOS > 5000 THEN
CVRESET 8
END
END
; =====================================
; KONIEC PO 2 KOSTKACH
; =====================================
SIGNAL -2002
SIGNAL -8
SPEED 500 MM/S ALWAYS
HOME
.END
Wyjaśnienie działania programu
Najważniejszy fragment programu znajduje się bezpośrednio po wykryciu kostki:
SWAIT 2008
ENC = CVPOS
POINT/8 PICK = ENCInstrukcja SWAIT 2008 oczekuje na aktywowanie wirtualnego czujnika. Następnie:
ENC = CVPOSodczytuje aktualną pozycję Conveyor 1. CVPOS zwraca bieżące położenie pierwszego conveyora.
Odczytana wartość jest następnie przypisywana do punktu:
POINT/8 PICK = ENCOd tej chwili punkt PICK nie oznacza wyłącznie stałej pozycji zapisanej jako P45.
Robot posiada również informację w jakim położeniu znajdował się conveyor, kiedy detal znajdował się w P45. Jeżeli później conveyor przemieści się o 50, 80 czy 100 mm, układ może określić odpowiednio przesuniętą pozycję detalu.
Wyjaśnienie instrukcji związanych z conveyorem
CVCOOPJT
Aktywuje współpracę robota z wybranym przenośnikiem.
Dostępne są dwie wartości:
- 8 – Conveyor 1,
- 9 – Conveyor 2.
W naszej aplikacji wykorzystujemy Conveyor 1, dlatego stosujemy:
CVCOOPJT 8CVRESET
Zeruje aktualną wartość pozycji pierwszego conveyora. Na początku programu pozwala rozpocząć pracę ze znaną wartością pozycji.
W programie zastosowano również zabezpieczenie:
IF CVPOS > 5000 THEN
CVRESET 8
ENDKtóre zapobiega niepotrzebnemu narastaniu wartości pozycji encodera podczas dłuższej pracy.
Dla pierwszego conveyora parametrem CVRESET jest 8, natomiast dla drugiego 9.
CVWAIT
Po wykryciu kostki program wykonuje:
CVWAIT 20Dzięki temu robot nie rozpoczyna pobierania natychmiast przy samym czujniku. Program czeka, aż conveyor osiągnie wskazane przesunięcie (20 mm), a kostka odjedzie dalej w strefę roboczą robota.
Zastosowanie tej funkcji dodatkowo bardzo dobrze obrazuje działanie conveyor trackingu – kostka zostaje wykryta w jednym miejscu, ale jest pobierana już w innym.
CVLAPPRO
CVLAPPRO PICK, 20jest odpowiednikiem liniowego podejścia do punktu, ale wykonywanego z synchronizacją względem conveyora. Robot nie zbliża się więc do nieruchomego punktu PICK. Punkt docelowy jest na bieżąco przesuwany zgodnie z ruchem taśmy.
CVLMOVE
Najważniejszą instrukcją ruchową jest:
CVLMOVE PICKPowoduje ona liniowy ruch TCP do punktu PICK z jednoczesną synchronizacją z conveyorem. Jeżeli kostka w czasie ruchu robota nadal jedzie na taśmie, położenie docelowe jest odpowiednio aktualizowane. W efekcie robot może dojechać do poruszającego się detalu, zamiast do jego starej pozycji.
CVDELAY
Po dojechaniu do kostki wykonywane jest:
CVDELAY 0.05oraz później:
CVDELAY 0.05CVDELAY nie jest zwykłym TWAIT. Podczas TWAIT robot pozostawałby nieruchomy względem układu BASE. Podczas CVDELAY robot pozostaje natomiast nieruchomy z punktu widzenia poruszającego się conveyora. Oznacza to, że fizycznie TCP nadal porusza się razem z taśmą, utrzymując pozycję względem chwytanej kostki. Jest to szczególnie ważne podczas zamykania chwytaka.
CVLDEPART
Po zamknięciu chwytaka wykonywane jest:
CVLDEPART 40Robot oddala się liniowo od miejsca pobrania o 40 mm, zachowując synchronizację z conveyorem. Dopiero po bezpiecznym odejściu od taśmy program przechodzi do zwykłych instrukcji ruchowych prowadzących do magazynu. CVLDEPART jest więc odpowiednikiem LDEPART, ale pracującym w układzie związanym z poruszającym się przenośnikiem.
Uruchomienie aplikacji
Przed uruchomieniem programu należy sprawdzić kolejno:
1) czy wszystkie modele zostały poprawnie zaimportowane,
2) czy kostki mają klasę Work,
3) czy conveyor jest ustawiony jako Conveyor 1,
4) czy jego sygnałem ON/OFF jest Internal Signal 2,
5) czy ustawiono prawidłowy kierunek i rozdzielczość conveyor trackingu,
6) czy zaznaczono Enable Virtual Encoder,
7) czy Collision Detection aktywuje Internal Signal 8,
8) czy zapisano punkt PICK w miejscu detekcji kostki,
9) czy punkt PLACE znajduje się w środku pierwszego gniazda magazynu,
10) czy sygnał 58 odpowiedzialny za działanie chwytaka jest aktywowany przez program.
Po wykonaniu tych czynności można uruchomić program.
Autorka artykułu:
Julia Szewczyk
Praktykantka ASTOR