Automatyka w praktyce

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.

Gotowe stanowisko w oknie Visualization: robot Astorino, przenośnik, czujnik, kostki oraz magazyn

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.

Zakładka Conveyor Settings w oknie wizualizacji
Konfiguracja wirtualnego przenośnika
  • Number przypisuje wirtualny przenośnik do jednego z dwóch kanałów conveyor trackingu. Wybór Conveyor 1 powoduje, że przenośnik współpracuje z danymi pierwszego conveyora, odczytywanymi w programie m.in. za pomocą CVPOS i wybieranymi przez CVCOOPJT 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.

Kostka przed czujnikiem, sygnał 8 nieaktywny.
Kostka w obszarze czujnika
Kostka w obszarze czujnika, sygnał 8 aktywny.

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 = ENC

Instrukcja SWAIT 2008 oczekuje na aktywowanie wirtualnego czujnika. Następnie:

ENC = CVPOS

odczytuje aktualną pozycję Conveyor 1. CVPOS zwraca bieżące położenie pierwszego conveyora.

Odczytana wartość jest następnie przypisywana do punktu:

POINT/8 PICK = ENC

Od 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 8

CVRESET

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

END

Któ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 20

Dzię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, 20

jest 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 PICK

Powoduje 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.05

oraz później:

CVDELAY 0.05

CVDELAY 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 40

Robot 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

Newsletter Poradnika Automatyka

Czytaj trendy i inspiracje, podstawy automatyki, automatykę w praktyce

Please wait...

Dziękujemy za zapis do newslettera!

Czy ten artykuł był dla Ciebie przydatny?

Średnia ocena artykułu: 0 / 5. Ilość ocen: 0

Ten artykuł nie był jeszcze oceniony.

Zadaj pytanie

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *