Strona główna ASTOR
Automatyka w praktyce

Wykrywanie obiektu „w locie” na robotach Kawasaki Robotics – porównanie funkcji HSENSE oraz XMOVE

Kontakt w sprawie artykułu: Piotr Kaczorowski - 2025-07-07

Z tego artykułu dowiesz się:

  • jak wykonać precyzyjne pozycjonowanie w aplikacjach handlingu,
  • do czego służą i jak działają funkcje HSENSE i XMOVE,
  • w jaki sposób wykorzystać te funkcje do precyzyjnego pozycjonowania.

W pewnym uproszczeniu można powiedzieć, że robot pracujący w aplikacji z pola szeroko rozumianego handlingu ma za zadanie przenieść przedmiot z punktu A do punktu B. Gdy wszystkie elementy znajdują się idealnie na miejscu, zadanie jest proste w realizacji i szybkie do zaprogramowania.  Jak jednak wiadomo, niezmiernie rzadko się zdarza, że wszystkie elementy znajdują się idealnie na miejscu. Do sprawnego działania elementy należy pozycjonować lub znajdować.  Jak zatem poradzić sobie w przypadku, gdy wymiary i pozycja przedmiotu mogą się różnić od zadanych?    

W takim wypadku potrzebujemy wyposażyć robota w zmysł widzenia lub dotyku, aby znaleźć i zmierzyć poszukiwany przedmiot. Można to zrobić a pomocą systemów wizyjnych 2D i 3D, które jednak mogą okazać się zbyt drogie, aby aplikacja osiągnęła akceptowalne ROI, szczególnie biorąc pod uwagę fakt, że nie wykorzystamy nawet ułamka ich potencjału.

Do detekcji obiektu wystarczą nam podstawowe czujniki różnych typów np. optyczne, pojemnościowe, indukcyjne czy inne – o właściwym dla poszukiwanego materiału typie detekcji. Jednak dają nam one informację wyłącznie o obecności przedmiotu. Jak zatem dokonać pomiarów i zorientować przedmiot w przestrzeni?

Wykorzystując informację o detekcji przedmiotu, pozycję robota, matematykę i odrobinę inżynierskiego sprytu jesteśmy w stanie znaleźć i rozpoznać wiele cech geometrycznych przedmiotu oraz jego pozycję względem robota.

Załadunek obrabiarki z wykorzystaniem funkcji HSENSE do wykrywania pozycji detali. Źródło: ASTOR

Definicja problemu inżynierskiego

Niech w dalszej części towarzyszy nam następujący problem inżynierski:

Na stacji pobrania znajdują się stalowe krążki o znanej średnicy i znanej grubości. W gniazdo poboru odkładane są ręcznie . Stos detali zawsze liczy 3 sztuki i po wykorzystaniu wszystkich jest ponownie uzupełniany przez operatora. Detale pobierane są chwytakiem szczękowym. Robot wyposażony jest w czujnik optyczny. Plamka czujnika ma 2 mm średnicy. Nasz chwytak ma 7 mm luzu pomiędzy szczękami a przedmiotem przy w pełni otwartych szczękach. Błąd pozycji większy niż 7 mm będzie skutkował kolizją robota. W jaki sposób znaleźć środki okręgów poszczególnych krążków, które będą pozycjami pobrania?

Obliczenia         

Aby wyznaczyć środek okręgu, potrzebujemy przynajmniej 3 punktów na okręgu.

Równanie dla okręgu na płaszczyźnie

Dla okręgu znajdującego się na płaszczyźnie obliczenia wyglądają następująco:

1. Równania dla płaszczyzny:

2. Do wzoru podstawiamy współrzędne 3 punktów:

3. Na podstawie tych wzorów  układamy układ równań:

Następnie wykorzystując wzory skróconego mnożenia przekształcamy układy równań, aby z nich uzyskać wartości xs oraz ys , które oznaczają środek naszego poszukiwanego okręgu:

Następnie używając metody podstawienia:

wyznaczamy współrzędne xs oraz ys :

Znając współrzędne punktów na okręgu i podstawiając je do powyższych wzorów uzyskamy współrzędne środka okręgu.

Równania dla przestrzeni trójwymiarowej

Powyższe wyprowadzenie jest pewnym uproszczeniem, ponieważ robot pracuje w przestrzeni trójwymiarowej. Aby niepotrzebnie nie odchodzić od głównej treści artykułu, wyprowadzenie równań dla przestrzeni trójwymiarowej zostało przedstawione w dodatku na końcu artykułu.

Zapis obliczeń w programie robota

Obliczenia dla punktów na płaszczyźnie są już dość skomplikowane i  czasochłonne do wprowadzenia w postaci funkcji matematycznych w programie robota. Na szczęście nie musimy wprowadzać ich sami, ponieważ istnieje gotowa funkcja do wyznaczenia środka okręgu:  CCENTER.

CCENTER( pose1,pose2,pose3,pose4)

Punkty 1-3 mają znajdować się na okręgu a czwarty punkt służy do przepisania pożądanej orientacji.

Załadunek obrabiarki z wykorzystaniem funkcji HSENSE do wykrywania pozycji detali. Źródło: ASTOR

Oprogramowanie problemu inżynierskiego

Część matematyczną mamy za sobą. Jak teraz znaleźć 3 punkty na krawędzi naszego przedmiotu?

Zazwyczaj programiści wykorzystują do tego funkcję XMOVE, która zezwala na ruch robota aż do pojawienia się określonego sygnału wejściowego.  Następnie następuje zatrzymanie robota i po zatrzymaniu programista zapisuje aktualną pozycję TCP jako punkt detekcji. Minusem tego rozwiązania jest potrzeba stabilnego sygnału z czujnika przez min. 50 ms, aby został uznany za detekcję, a także droga hamowania robota. Jeśli robot z ciężkim chwytakiem będzie hamował z wysokiej prędkości, to delikatnie rozminie się z pozycją wykrycia.

Przy zastosowanie programu przedstawionego poniżej, pozycja wykrycia będzie uzależniona od czasu działania i histerezy czujnika oraz prędkości TCP robota.  Im wyższa będzie prędkość robota, tym dalej od wykrytej krawędzi będzie znajdował się punkt detect1.

XMOVE pt1 TILL 1001
BREAK
HERE detect1
…

Funkcją, która w momencie detekcji przez czujnik zapisze nam pozycję robota do pamięci, jest funkcja HSENSE. Monitoruje ona stan sygnału czujnika i w przypadku zmiany jego poziomu zapisuje aktualną wartość złączową do bufora.  Do jej pracy nie jest wymagane przerwanie ruchu robota, a wymagany czas trwania sygnału nie jest tak wysoki, jak w przypadku XMOVE. Zwykle wystarcza 2 ms, ponieważ jest to czas odświeżania wejść w przypadku większości kontrolerów Kawasaki.

Jak zatem wykorzystać opisane funkcje w praktyce?

Przykład kodu z wykorzystaniem funkcji XMOVE

TOOL sensor_tool ; ustawienie TCP czujnika
  ;-----------------------------------------------------------
  ;           Dojazd do pozycji poszukiwania
  ;-----------------------------------------------------------
  HOME
  LMOVE start
  ;-----------------------------------------------------------
  ;           Przejazd przez oczekiwane pozycje stosu
  ;-----------------------------------------------------------
  ACCURACY 1 FINE
  SPEED pr_ruchu mm/s
  XMOVE p1 TILL 1001
  BREAK
  HERE found1
  SPEED pr_ruchu mm/s
  LMOVE p1
  SPEED pr_ruchu mm/s
  XMOVE p2 TILL 1001
  BREAK
  HERE found2
  SPEED pr_ruchu mm/s
  LMOVE p2
  SPEED pr_ruchu mm/s
  XMOVE p3 TILL 1001
  BREAK
  HERE found3
  SPEED pr_ruchu mm/s
  LMOVE p3
  MVWAIT 1
  LDEPART 100
  ;-----------------------------------------------------------
  ;           Obliczenie pozycji srodka okregu
  ;--------------------------------------------------------------------
  POINT cylinder_x = CCENTER (found1, found2, found3, start)

Przykład kodu z wykorzystaniem funkcji HSENSE

TOOL sensor_tool ; ustawienie TCP czujnika
  ;-----------------------------------------------------------
  ;           Dojazd do pozycji poszukiwania
  ;-----------------------------------------------------------
  SPEED 500 mm/s
  LmOVE start
  ;-----------------------------------------------------------
  ;           Aktywacja parametrow funkcji HSENSE
  ;-----------------------------------------------------------
  HSENSESET 1= 1001,20
  ;--------------------------------------------------------------------
  ;           Przejazd przez oczekiwane pozycje stosu
  ;-----------------------------------------------------------
  ACCURACY 1 FINE
  SPEED pr_ruchu mm/s ALWAYS
  LMOVE p1
  LMOVE p2
  LMOVE p3
  MVWAIT 1
  ;
  .num =0
  loop:
  HSENSE1 .result_var,sig_status[.num+1],#hsense_pos[.num+1],.err_var,.mem
  IF .err_var<>0 THEN
    .err = 3
    RETURN
  END
  ;
  IF .result_var == TRUE and sig_status[.num+1]== TRUE THEN
    POINT detect[.num+1] = #hsense_pos[.num+1]
    .num = .num+1
  END
  IF .mem GOTO loop
  ;
  HSENSESET 1 =0
  SPEED 500 mm/s
  LDEPART 100
  ;-----------------------------------------------------------
  ;           Obliczenie pozycji srodka okregu
  ;-----------------------------------------------------------
  POINT cylinder =CCENTER(detect[1],detect[2],detect[3],start)

Porównanie wyników

Kluczowymi parametrami do porównania obu rozwiązań są: czas działania programu oraz dokładność detekcji. W większości aplikacji zrobotyzowanych zależy nam na dwóch parametrach, precyzji i wydajności. Gdy mamy do dyspozycji sprzęt najwyżej jakości, taki jak roboty Kawasaki Robotics, warto wykorzystać pełnię jego potencjału dzięki sprytowi programisty i optymalnemu kodowi programu.

Przyjęto prędkości próbkowania dla ruchów poszukiwania jak w tabeli poniżej. Pozostałe ruchy wykonywane są z prędkością 500 mm/s.

Porównanie uzyskanych dokładności w stosunku do pozycji w K-Roset:

Środek detalu w K-Roset został ustawiony na pozycji X 300, Y 600 względem układu bazowego robota .

Wykorzystując proste równanie na odległość punktu od środka okręgu jesteśmy w stanie sprawdzić, czy robot może bezkolizyjnie pobrać detal.

Na zielono zaznaczono wyniki prób, które spełniły nasze założenia bezkolizyjnej pracy.

Podsumowanie

Jak pokazały przedstawione testy, funkcja HSENSE dobrze sprawuje się w wykorzystaniu do pomiarów bezstykowych. Bufor 20 pozycji detekcji, możliwość reagowania na zbocza narastające i opadające, a także możliwość równoległego monitorowania dwóch sygnałów dają szerokie pole możliwości. W przypadku wykrywania obiektów, gdy nie istnieje ryzyko kolizji, znacząco może poprawić czas wyszukiwania, a zatem również czas cyklu całej aplikacji.

Funkcja XMOVE dobrze radzi sobie przy detekcji obiektów z niskimi prędkościami. Można ją wykorzystać do dokonywania pomiarów, jednak jest ona dedykowana do detekcji obiektów na ścieżce ruchu, tak aby w kolejnym kroku pobrać znaleziony przedmiot.

Jak pokazały wyniki testów, każda z funkcji może być użyta do detekcji obiektów. Jednak aby wykorzystać ich pełny potencjał, należy stosować je tam, gdzie pokażą swoją przewagę.

Detekcja detalu z wykorzystaniem HSENSE. Płynna trajektoria przejazdu. Źródło: ASTOR

Funkcja HSENSE sprawdza się przy pomiarach bezstykowych, gdzie szybko możemy wyznaczyć punkty na krawędziach obiektu. Nie sprawdzi się natomiast w wypadku, gdy detekcja obiektu odbywa się na ścieżce kolizyjnej.

XMOVE pokaże swoją przewagę w detekcji i pobieraniu detalu znajdującego się na ścieżce kolizyjnej. Stosując dwa czujniki i kaskadę funkcji XMOVE możemy zbliżać się do np. stosu przekładek z wysoką prędkością. Po detekcji z bezpiecznej odległości przez pierwszy czujnik zwalniamy prędkość TCP robota i z niską prędkością poszukujemy dokładnej wysokości przekładki na stosie. Po jej detekcji zatrzymujemy robota i pobieramy przekładkę, a to wszystko na jednej ścieżce ruchu.

Detekcja detalu  z wykorzystaniem XMOVE. Widoczne zatrzymanie ruchu w chwili detekcji detalu. Źródło: ASTOR

Stosując właściwą kombinację obu tych funkcji możemy uwolnić pełny potencjał wydajności i precyzji naszej aplikacji zrobotyzowanej.

Dodatek

Wyprowadzenie wzorów dla okręgu w przestrzeni trójwymiarowej.

Załóżmy punkty:

które znajdują się na okręgu, środek okręgu w punkcie S ma następujące współrzędne

1. Wyznaczamy wektory między punktami A,B,C:

2. Wyznaczamy równanie płaszczyzny:

3. Wiedząc, że punkty na okręgu są równo oddalone o promień okręgu od środka okręgu:

upraszczając wzór otrzymujemy:

Podobnie dla punktów A i C możemy ułożyć równanie:

Trzecie równanie będzie wynikało z faktu, że punkt O leży na płaszczyźnie wyznaczonej przez punkty A,B,C:

4. Układamy i rozwiązujemy układ trzech równań liniowych, wykorzystując metodę podstawienia dla uproszczenia zapisu.

Dla pierwszego równania  przyjęto:

Analogicznie dla drugiego równania:

Oraz dla równania numer trzy:

Uzyskując tym samym następujący układ równań:

5. Korzystając z wzorów Cramera zapisujemy układ równań w postaci macierzowej i obliczamy wyznaczniki macierzy:

Macierz główna A ma następującą formę:

Na koniec obliczamy wyznaczniki macierzy:

6. Po przekształceniach otrzymujemy współrzędne środka okręgu:

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: 4.5 / 5. Ilość ocen: 2

Ten artykuł nie był jeszcze oceniony.

Zadaj pytanie

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *