• Rezultati Niso Bili Najdeni

Risanje z robotsko roko na podlagi sledenja položaja rok uporabnika

N/A
N/A
Protected

Academic year: 2022

Share "Risanje z robotsko roko na podlagi sledenja položaja rok uporabnika"

Copied!
49
0
0

Celotno besedilo

(1)

UNIVERZA V LJUBLJANI Fakulteta za strojništvo

Risanje z robotsko roko na podlagi sledenja položaja rok uporabnika

Klara Nemanič

Ljubljana, september 2021

Zaključna naloga Univerzitetnega študijskega programa I. stopnje Strojništvo - Razvojno raziskovalni program

(2)
(3)

UNIVERZA V LJUBLJANI Fakulteta za strojništvo

Risanje z robotsko roko na podlagi sledenja položaja rok uporabnika

Zaključna naloga Univerzitetnega študijskega programa I. stopnje Strojništvo - Razvojno raziskovalni program

Klara Nemanič

Mentor: doc. dr. Rok Vrabič

Ljubljana, september 2021

(4)

VLOGA ZA PREVZEM TEME ZAKLJUCNE NALOGE

Univerzitetni studijski program I. stopnje STROJNISTVO -Razvojno raziskovalni program

Podatki o studentu:

VIA•- N .II

lme in priimek: C'\.Wl\l\t e.w.o..Mc,

Podatki o zakljucni nalogi:

Naslov zakljucne naloge (slovenski):

St. zakljucne naloge (izpolni Studentski referaf):

UN I/1543

Datum prejema vloge v SR:

18.8.2021

Vpisna st.

2.3fr

O

2.05"

Riso.�j� � ro�o�\{o V-OfO

Y\0..

'fOc!lo..3"1 slµf,eli\j()., voLo�Pjo.. v:ok �O\'lt��,kA,

Naslov zakljucne naloge (angleski):

Dro.wittj w·,tk

o..

v-obotc a.rWL lo«�ecl o�

"tvo.tlLiV\�

k��ds

Mentor na FS:

d.oc. d.r. Ro\t. VnJ,i�

Somentor na FS: _______ _

Veljavnost naslova teme je 6 mesecev od oddaje Vloge za prevzem.

Podpis studenta:

ulf �·;'

v

Podpis mentorja:

--l .,.. Ci-'\ .,_ {\.�_V\A�---=----

(5)

Zahvala

Za mentorstvo in pomoč pri pisanju zaključne naloge bi se zahvalila mentorju doc. dr.

Roku Vrabiču. Za pomoč pri praktičnem delu se želim zahvaliti asist. dr. Gašperju Škulju ter Dominiku Rupertu.

Zahvaljujem se tudi dr. Žigu Lukšiču za vso podporo ter spodbudo in svoji družini, ki mi je omogočila študij ter mi skozi leta stala ob strani.

(6)
(7)

Izvleček

UDK 007.52:681.5:004.85(043.2) Tek. štev.: UN I/1543

Risanje z robotsko roko na podlagi sledenja položaja rok uporabnika

Klara Nemanič

Ključne besede: mehatronika zaznava rok robotika

upravljanje robotov python

opencv robotske roke sodelujoči roboti strojni vid strojno učenje

Sodelovalna robotika ponuja nove priložnosti za sodelovanje človeka z robotom, zaradi česar je v preteklih desetletjih močno pridobila na popularnosti. Uporaba robotov se iz industrijskih okolij seli v domove, šole, itd. Roboti so po zasnovi stroji, ki skrbijo za avtomatizacijo procesov ter s tem olajšujejo vsakdan, vendar kljub svoji zmogljivosti vedno vzbujajo strah pri uporabnikih. Do sedaj je bila uporaba robotov omejena na kroge programerjev in inženirjev, saj so krmilni sistemi pogosto kompleksni in ne intuitivni. V tej zaključni nalogi predstavimo pristop za delo z industrijskim sodelujočim robotom, ki ga lahko krmilimo na preprost in zanimiv način, s čimer želimo uporabo robotov približati potencialnim uporabnikom. V delu napišemo program, ki nam omogoča upravljanje preko zaznave položaja rok uporabnika iz slike, katero zajemamo s kamero. Za izvedbo uporabimo sodelujočega robota Fanuc CR-7iA/L, sama programska oprema pa bo zasnovana v programskem jeziku Python. Za prepoznavo rok uporabimo knjižnici MediaPipe in OpenCV. Že z minimalno zasnovo nam uspe krmiliti robota, kar izkoristimo za risanje preprostih risb.

(8)

viii

Abstract

UDC 007.52:681.5:004.85(043.2) No.: UN I/1543

Drawing with a robotic arm based on tracking hands

Klara Nemanič

Key words: mechatronics hand tracking robotics robot control python opencv robotic arms

collaborative robots computer vision machine learning

Collaborative robotics offers new ways for human-robot collaboration, for which it gained a large amount of popularity in recent decades. The use of robots is spilling from industrial environments to homes, schools, etc. Robots are designed to automate processes and offer help in many ways. Despite their indisputed capabilities, many people still distrust the use of robots. Until now the main users were programmers and engineers, mainly due to complex and non-intuitive controls. In this thesis we present a new approach to controlling robots in a natural and interesting way, hoping to popularize their use. We write a program for controlling an industrial robot via hand-tracking by using images captured with a camera. We test the approach by using a collaborative robot Fanuc CR-7iA/L and a basic built-in camera. To write the software we use the Python programming language, relying on MediaPipe and OpenCV libraries for hand recognition. Even a minimalistic approach offers sufficient control to create simple drawings with the robot.

(9)

Kazalo

Kazalo slik ... xi

Kazalo izsekov kode ... xii

Seznam uporabljenih simbolov ... xiii

Seznam uporabljenih okrajšav ... xiv

1 Uvod ... 1

1.1 Ozadje problema ... 1

1.2 Cilji ... 2

2 Teoretične osnove in pregled literature ... 3

2.1 Robotika in roboti ... 3

2.2 Industrijski roboti ... 4

2.2.1 Sodelovanje človeka in industrijskega robota ... 5

2.3 Delovno mesto s sodelujočim robotom ... 7

2.4 Vodenje robotov ... 8

2.4.1 Programiranje robotov ... 8

2.4.1.1 Uporabniški vmesniki ... 8

3 Risanje z robotsko roko ... 10

3.1 Python program za upravljanje z robotom ... 11

3.1.1 Zaznavanje rok ... 12

3.1.2 Komunikacija z robotom ter pošiljanje ukazov na robota ... 15

3.2 Testiranje ... 17

3.2.1 Sodelujoči robot Fanuc CR-7iA/L ... 18

3.2.2 Risanje na platno ... 19

4 Rezultati ... 22

5 Diskusija ... 24

6 Zaključki ... 25

(10)

x

Literatura ... 27

Priloga A ... 29

(11)

Kazalo slik

Slika 2.1: Umestitev sodelovanja človeka in robota. Prilagojeno po Novak in Vysocky [7] ... 5

Slika 2.2: Definicija delovnega prostora, prilagojeno po Bauerju et al. [6] ... 6

Slika 2.3: Tipi sodelovanja z industrijskimi roboti, prilagojeno po Bauerju et al. [6] ... 6

Slika 3.1: Shema delovanja našega programa ... 11

Slika 3.2: Prikaz različnih dveh različnih velikosti platna in ustrezno skaliranje koordinat ... 12

Slika 3.3: Pojavno okno za uporabnika ... 13

Slika 3.4: Pojavno okno za uporabnika - risanje s kazalcem ... 13

Slika 3.5: Pojavno okno za uporabnika - lebdenje nad platnom ... 13

Slika 3.6: Program zazna več kot eno roko in sporoči napako »Too many hands« ... 14

Slika 3.7: Program ne zazna nobene roke in sporoči napako »No hands detected« ... 15

Slika 3.8: Točke, ki jih model prepozna na roki [12] ... 15

Slika 3.9: Učni panel ... 16

Slika 3.10: Postavitev preizkuševališča ... 18

Slika 3.11: Sodelovalna robota Fanuc. Levo CR-7iA in desno CR-7iA/L [13] ... 19

Slika 3.12: Geometrijske specifikacije robota Fanuc CR-7iA/L, enote so v mm [14] ... 19

Slika 3.13: Skaliranje koordinat iz virtualnih na platno ... 20

Slika 3.14: Robotov in uporabniški koordinatni sistem ter koordinatni sistem kamere ... 21

Slika 4.1: Napaka pri detekciji roke ... 23

(12)

xii

Kazalo izsekov kode

Izsek kode 3.1: Nastavimo ustrezne vrednosti pri zaznavi rok ... 14 Izsek kode 3.2: Komunikacija računalnika z robotom ... 16

(13)

Seznam uporabljenih simbolov

Oznaka Enota Pomen

H_CAMERA px višina zajema slike kamere

H_CANVAS mm višina platna

W_CAMERA px širina zajema slike kamere W_CANVAS mm širina platna

Indeksi

camera kamera

canvas platno

(14)

xiv

Seznam uporabljenih okrajšav

Okrajšava Pomen

CNT faktor tekoče izvedbe gibov, podan v % hitrosti (angl. Continuous Termination)

ISO Mednarodna organizacija za standardizacijo (angl. International Organization for Standardization)

HTTP komunikacijski protokol med odjemalci in strežniki, metoda za prenos informacij na spletu (angl. HyperText Transfer Protocol)

KS koordinatni sistem

LAKOS Laboratorij za tehnično kibernetiko, obdelovalne sisteme in računalniško tehnologijo

SCARA kratica oz. akronim za zgradbo enostavnega industrijskega robota, ki posnema gibanje človeške roke (angl. Selective Compliance Assembly Robot Arm ali Selective Compliance Articulated Robot Arm)

UTP kabel z nezaščitenim zvitim parom žic (angl. Unshielded Twisted Pair cable)

Wi-Fi tehnologija brezžične komunikacije, prvotno kot kratica blagovne znamke (angl. Wireless Fidelity)

(15)

1 Uvod

1.1 Ozadje problema

Robotika in sodelovanje človek-robot je v zadnjih desetletjih postal pomemben del ne le tehnike, temveč se hitro širi tudi v druge kroge človeških življenj. Roboti se že vrsto let uporabljajo v medicini, razvijajo se za vojaške namene ter postajajo bolj dostopni za uporabo v domačem okolju. Industrija z leti napreduje, razvijajo in postavljajo se pametne tovarne, zato vedno več ljudi dnevno dela z roboti. Kljub vsemu napredku roboti še niso čisto nadomestili človeških delavcev. Roboti so že od svojih začetkov, ko so bili znani še kot avtomati, ustvarjeni za pomoč ljudem ter avtomatizacijo procesov. Z večjo dostopnostjo robotov javnosti in vse večjo uporabo v industrijskih okoljih, pa je nujno upoštevati tudi psihološki vidik uporabe robotov. Mnogo ljudi čuti nezaupanje do robotov ter na njih gleda kot na nekaj tujega in nerazumljivega.

Kako deluje sodelovalna robotika? Ta je zasnovana tako, da v istem delovnem prostoru sobivata človek in robot. Zaradi kompleksnih in ne intuitivnih krmilnih sistemov, je bila uporaba robotov dolgo časa omejena na kroge programerjev in inženirjev. Vendar se v zadnjem času osredotoča na sodelovanje človek-robot, saj to združuje najboljše z obeh svetov. S skupnim delom lahko dobimo sisteme, ki so bolj prilagodljivi, kot če pri delu uporabimo samo robote in bolj natančni ter ponovljivi, kot če uporabimo samo ljudi. V večini primerov med človekom in robotom ni varnostne ograje, zaradi česar je potrebno poskrbeti za druge varnostne mehanizme, ki so ključnega pomena z vidika varnosti človeka. Pri sodelovanju lahko človek in robot med seboj gibe usklajujeta ali pa delata zaporedno. Za usklajeno delo je potrebno imeti naprednejši sistem, saj se mora robot zavedati svoje okolice, da lahko preprečuje trke in se izogiba človeku. Za to se uporabi zaznavne sisteme za strojni vid, ki omogočajo prepoznavo objektov z uporabo kamere.

V naši zaključni nalogi bomo uporabili kamero in knjižnici za strojno učenje, s katerima želimo pokazati, kako lahko je upravljanje industrijskega robota zgolj s premikanjem rok pred kamero. Premikanje roke je za upravljanje veliko bolj intuitivno kot pritiskanje na tipke učnega panela in ne zahteva znanja programiranja. Iz zgodovine vemo, da je z enako željo po intuitivnosti in potrebo po enostavnosti uporabe nastala tudi računalniška miška.

Pred razvojem te je imel namreč uporabnik na voljo za uporabo računalnika zgolj tipkovnico in pisne ukaze. Lahko rekli, da obravnavamo drugačen pristop k programiranju robotov oz. samo uporabo sodelovalnih robotov, saj nas zanima sodelovanje s človekom na

(16)

Uvod

2 bolj naraven način. Želimo preizkusiti delovanje upravljanja z gibanjem pred kamero, da bi preverili ali je učinkovito in dovolj intuitivno.

1.2 Cilji

Osredotočili se bomo na izdelavo programa, s katerim povežemo premikanje človeka in robota. Upravljali bomo industrijsko sodelovalno robotsko roko, ki jo bomo krmilili s premikanjem rok. Sledenje rokam bomo izvedli z uporabo kamere in knjižnice za računalniški vid, ki nam že nudi orodja za prepoznavo rok na posameznih slikah.

Preverili bomo ali se naša rešitev lahko uporabi v praksi in tudi kako težko je na predviden način upravljati robota. Zanima nas natančnost, intuitivnost uporabe ter ponovljivost.

Nekaj zapletov pričakujemo pri natančnosti in hitrosti zaznave rok, pri prenosu ukazov na robota ter pri sami končni izvedbi izrisa. Izris želimo malo zgladiti, kar lahko predstavlja težavo, če želimo, da nam robot v resničnem času riše risbo.

Hiter pregled skozi delo:

- Pregledali bomo literaturo, potrebno za izdelavo zaključne naloge in nekaj teoretičnih osnov za lažje razumevanje.

- Napisali bomo program, s katerim bomo ob uporabi ustreznih knjižnic ter modelov prepoznali človeške roke. Nato bomo izluščili podatke o številu in poziciji rok, podatke o številu iztegnjenih prstov ter koordinate. Te podatke na koncu posredujemo robotu, ki izvede želeni premik.

- Delovanje naše implementacije bomo testirali s pomočjo sodelujočega robota Fanuc CR-7iA/L.

- Diagnosticirali bomo morebitne težave, ki se bodo pojavile pri izdelavi naloge. Te bomo zapisali, jih poskušali rešiti ali pa predlagali izboljšave v prihodnjih rešitvah.

- Zapisali bomo ključne ugotovitve ter podali predloge za nadaljnje delo.

(17)

2 Teoretične osnove in pregled literature

2.1 Robotika in roboti

Standardi po ISO (angl. International Organization for Standardization) [1] robotiko definirajo kot znanost in prakso oblikovanja, proizvodnje ter uporabe robotov. Na drugi strani je definicij za besedo robot več, vendar jih lahko združimo v naslednje skupne točke [2]:

- Roboti so sestavljeni iz mehanskih delov, ki pomagajo opravljati naloge, za katere so bili ustvarjeni.

- Roboti potrebujejo električne sestavne dele, ki nadzirajo in napajajo strojne dele. To so lahko baterije, ali napajanje iz električnega omrežja.

- Roboti vsebujejo vsaj osnoven računalniški program, ki jim pove kdaj in kako opravljati naloge.

Opravljajo lahko različne naloge, od človeku škodljivih in nevarnih, do takih, kjer morajo biti naloge izvedene z veliko natančnostjo in ponovljivostjo. Za delovanje zadostuje že osnoven računalniški program, ki robotu pove kaj, kdaj in kako delati. Na kratko je robot, kot ga obravnavamo vrsta avtomatiziranega stroja, ki lahko opravlja naloge z malo ali brez človeškega posredovanja ter s hitrostjo in natančnostjo.

Začetki robotike sicer niso bili podobni temu, kar danes poznamo pod pojmom robotika.

Pred popularizacijo električne energije, so bili namreč stroji gnani s paro, hidravliko ali ročno. Pred letom 1921 tudi beseda robot še ni obstajala, to, čemur bi danes rekli roboti pa so se do tega leta imenovali avtomati. Besedo “robot” je prvič uporabil češki pisec Karel Čapek v svojem delu R.U.R. (Rossumovi Univerzalni Roboti) in izhaja iz besede “robota”, ki v češčini pomeni prisilno delo. Z razmišljanjem o robotiki pa so se porajala tudi vprašanja kako roboti in avtomatizacija vplivata na človeka in ali so roboti sploh varni. Kot odgovor na to je leta 1942 pisatelj Isaac Asimov zapisal tri slavne zakone robotike [3] v svojem delu “Runaround”:

- Robot ne sme poškodovati človeka ali zaradi nedela dopustiti, da bi se človek poškodoval,

- Robot mora upoštevati navodila, ki jih dobi od človeka, razen če je to v konfliktu s prvim zakonom; in

- Robot mora varovati svoj obstoj vse dokler to ni v konfliktu s prvim ali drugim zakonom).

(18)

Teoretične osnove in pregled literature

4 Ob upoštevanju teh zakonov naj bi bilo omogočeno varno sobivanje ljudi in robotov.

Vendar so z razvojem robotike in umetne inteligence ti trije zakoni postali zastareli in obstajajo le še v teoriji. V delu “Principi robotike: nadziranje robotov v resničnem svetu”

(angl. Principles of robotics: regulating robots in the real world) [3] je skupina raziskovalcev z več področij leta 2017 dopolnila ter spremenila zakone, ki jih je zapisal Asimov. Robotika kot jo poznamo danes pa se je začela ob vložitvi patenta za robota leta 1954. To leto tako velja za prelomnico.

Generalno lahko robote delimo v pet skupin [2]. Te so:

- predhodno programirani roboti, ki delujejo v vnaprej znanem ter varovanem območju, kjer opravljajo enostavne, pogosto monotone naloge,

- avtonomni roboti delujejo brez operaterjev, običajno opremljeni s kopico senzorjev ter so sposobni sami odločati o naslednjem koraku

- daljinsko vodeni (angl. Teleoperated) roboti, ki jih upravljamo od drugod.

- robotski dodatki, kot so robotske okončine - humanoidni roboti.

Glede na potrebe pa lahko razdelimo namembnost robotov na:

- industrijske robote - vojaške robote - robote v medicini - robote pomagače.

2.2 Industrijski roboti

Industrijski robot je po definiciji Mednarodne organizacije za standardizacijo ISO (angl.

International Organization for Standardization) [1]: “avtomatsko krmiljen, reprogramabilen (oblikovan tako, da lahko gibe in delovanje spreminjamo brez potrebe po fizičnih spremembah), večnamenski (ga lahko s fizičnimi spremembami prilagodimo za različne aplikacije) manipulator, programabilen v vsaj treh oseh”, ki je lahko fiksen ali mobilen in se uporablja v namene industrijske avtomatizacije.

Roboti se v industrijskih okoljih uporabljajo predvsem zaradi varnosti delavcev, učinkovitosti delovanja robotov ter hitrosti robotov, s čimer se prihrani čas in denar. V industriji se uporablja več različnih vrst robotov, ti so lahko mobilni ali fiksni. Industrijske robote delimo predvsem glede na mehaniko fiksnih robotov [4]:

- SCARA roboti,

- kartezični roboti,

- artikulirani roboti,

- Delta roboti ali paralelni roboti,

- cilindrični roboti,

- mobilni roboti.

(19)

Teoretične osnove in pregled literature

2.2.1 Sodelovanje človeka in industrijskega robota

Mednarodna zveza za robotiko IFR (angl. International Federation of Robotics) [5] je leta 2019 definirala štiri različne načine sodelovanja ljudi z industrijskimi roboti. Te segajo od popolnoma ločenega prostora za človeka in robota, do sodelovanja in delovanja v istem prostoru ter brez pregrad. Z razvojem robotike vedno bolj težimo k sodelovanju človeka in robota v istem prostoru, saj se tako za delovanje obeh porabi najmanj prostora ter izkorišča pozitivne lastnosti obeh, kot je prikazano na sliki 2.1.

Slika 2.1: Umestitev sodelovanja človeka in robota. Prilagojeno po Novak in Vysocky [7]

Robot z lahkoto opravlja ponavljajoča ali nevarna dela, človek pa ga pri tem nadzira ter opravlja dela, ki jih je težko avtomatizirati in jih zato robot ne more opravljati. Razvoj sodelovalne robotike nakazuje, da bo v prihodnosti vse več aplikacij, kjer robot in človek delujeta skupaj. Za to pa je potrebno zagotavljanje varnosti človeka v bližini robota ter pridobivanje človekovega zaupanja v delo z robotom. Posledično lahko glede na delovni prostor, ki si ga delita in njuno sodelovanje, zapišemo pet različnih tipov sodelovanja. Bolj, ko gremo na sliki 2.3 desno, boljšo tehnologijo potrebujemo za zagotavljanje varnosti delavca ter učinkovitost. Izvedbo zadnjega, torej petega, nam omogoča razvoj umetne inteligence v kombinaciji s strojnim vidom.

Na sliki 2.2 sta prikazana delovna prostora robota in delavca, kot tudi delovni prostor robota. Ta slika služi kot legenda za sliko 2.3, kjer so prikazani različni tipi sodelovanja delavcev z industrijskimi roboti.

(20)

Teoretične osnove in pregled literature

6 Slika 2.2: Definicija delovnega prostora, prilagojeno po Bauerju et al. [6]

Slika 2.3: Tipi sodelovanja z industrijskimi roboti, prilagojeno po Bauerju et al. [6]

Omejitev delovnega prostora robota – robot v celici

Delovni prostor robota in človeka je ločen. Človek kot operater stoji za zaščitno kletko in stopi v delovni prostor robota samo kot vzdrževalec, ko stroj miruje. Za zaščito vzdrževalcev poskrbijo tudi varnostna stikala, ki prekinejo napajanje stroja, takoj, ko je zaščitna kletka odprta ali ko se v območju delovanja robota nahaja človek.

Soobstoj robota in človeka

Robot in človek delata v istem prostoru, med njima ni fizične pregrade, vendar si ne delita delovnega prostora. Naloge lahko opravljata hkrati.

Zaporedno sodelovanje

Robot in človek si delita delovni prostor, med njima ni fizične pregrade, vendar naloge opravljata izmenično.

Vzporedno sodelovanje ali kooperacija

Robot in človek delata v istem prostoru istočasno. Med njima ni fizične pregrade. Robot svojih gibov ne prilagaja glede na človeka.

(21)

Teoretične osnove in pregled literature

Interaktivno sodelovanje

Robot se prilagaja gibanju človeka in ima sposobnost spreminjanja trajektorij in hitrosti svojih gibov, da ga ne poškoduje. Človek in robot dopolnjujeta svoje gibe in v prostoru delata skupaj. Med njima ni fizične pregrade.

V tej nalogi se osredotočamo na delo s sodelujočim (angl. collaborative) robotom.

Sodelujoči ali sodelovalni roboti so namenjeni industrijski uporabi, kjer lahko človek in robot delujeta v istem okolju. Za namene sestave, montaže in drugih procesov v industriji so te roboti posebej opremljeni tudi z dodatnimi sistemi za prepoznavanje trka s človekom.

To je ključnega pomena za sodelovanje, ker robot ne potrebuje varnostne kletke, saj človeka ne bo poškodoval. Sodelujoči roboti so glede na zgodovino robotike novejša stvar, vendar kljub temu poznamo štiri večje skupine, glede na ISO 10218 dela 1 in 2. Varnostne sisteme, ključne za varno delo s sodelujočimi roboti Lasota et al. [8] v svojem delu delijo v štiri večje kategorije: varnost z nadzorom, planiranjem gibov, predvidevanjem in upoštevanjem psiholoških faktorjev.

2.3 Delovno mesto s sodelujočim robotom

Za namestitev sodelujočega robota potrebuje podjetje zagotoviti manjši prostor, saj se delovni prostor robota delno prekriva z delovnim prostorom človeka, kot je prikazano na sliki 2.3 v primerih zaporednega, vzporednega in interaktivnega sodelovanja. Pri takem načinu dela z roboti moramo pomisliti tudi na psihološke dejavnike, ki vplivajo na počutje in kvaliteto dela delavcev. Pri umeščanju človeka in robota v skupni delovni prostor je nujno upoštevati fizično in psihično varnost človeka. Fizična varnost ni nujno dovolj, saj stres in konstanten strah negativno vplivata na delo in počutje človeka.

Kako se ljudje počutimo v prisotnosti robotov in kaj vpliva na dobro počutje ljudi v takih situacijah, je primarno naloga psihologov, vendar moramo to upoštevati tudi inženirji pri snovanju robotov ter sistemov, v katerih sodelujejo ljudje in roboti. V članku Rakinić [9]

razloži psihološke poglede na delo z robotom in razloži dva psihološka kriterija, ki sta potrebna za učinkovito interakcijo: zaznana varnost robota in zaupanje v interakcijo z robotom. Na ta dva kriterija vplivata psihološki in situacijski dejavniki, kot tudi značilnosti robota. Ta dva dejavnika nam narekujeta, da bo interakcija vsakega posameznika z robotom drugačna. Da lahko uporabnikom zagotovimo kar se da dobro izkušnjo z robotom, moramo torej razumeti dejavnike. Težko spreminjamo psihološki dejavnik, situacijski dejavnik pa je odvisen od delovne naloge, torej najlažje vplivamo na značilnosti robota.

Izkaže se, da lahko s spreminjanjem fizičnih značilnosti robota spremenimo posameznikovo dojemanje robota. S predvidljivimi gibi, ki sledijo pričakovanim, bo človek zaznal višjo stopnjo varnosti in bo v okolici robota bolj sproščen, posledično pa tudi bolj učinkovit. Po drugi strani nepredvidljivi gibi lahko povzročijo strah in druga negativna čustva pri človeku. Večja kot je hitrost gibov, ki jih izvaja robot, bolj ogroženega se počuti človek v njegovi bližini, zato imajo sodelujoči roboti predpisano omejeno hitrost svojih gibov. Ta je sicer primarno namenjena varnosti delavcev, a pripomore tudi k počutju delavcev pri interakciji. Na zaznavo varnosti pa vpliva tudi zunanjost robota, velike robote dojemamo kot nevarne, zato prej zaupamo majhnim in lepo oblikovanim robotom.

(22)

Teoretične osnove in pregled literature

8 Z vidika fizične varnosti, moramo človekovo zaupanje v sodelujočega robota še podkrepiti z ukrepi za zagotavljanje varnosti delavcev. V primerjavi z navadnimi industrijskimi roboti, morajo biti sodelujoči dodatno opremljeni s kupico varnostnih mehanizmov in zaznaval. Kot sta zapisala Vysoky in Novak [7], je z višjo stopnjo sodelovanja med človekom in robotom potrebna tudi boljša tehnologija in kompleksnejši varnostni sistemi.

Ti se stopnjujejo, nujno pa mora robot zaznat prisotnost drugega objekta ali človeka in mora imeti sposobnost zaznavanja trkov z drugimi objekti ali človekom. Sistemov je več:

1. Robot opozori z zvočnim in svetlobnim signalom.

2. Robot se ustavi.

3. Bolj napredni sistemi lahko dopustijo tudi odrivanje robota in s tem popravljanje njegove pozicije.

4. Najnaprednejši pa so sistemi, ki z naprednimi zaznavalnimi sistemi in predvidevanjem preprečijo, da bi se trk sploh zgodil, ker že sami prilagodijo trajektorije svojega gibanja

2.4 Vodenje robotov

2.4.1 Programiranje robotov

Za programiranje robotov imamo na voljo več pristopov. Eden od preprostejših je t. i.

učenje z učnim panelom. Pri takem načinu programiranja, programer s tipkami na učnem panelu premika robota na željena mesta in shranjuje koordinate v pozicijske registre. Ta pristop se uporablja že vrsto let in ga za uporabo na svojih robotih omogoča vsak proizvajalec robotov. Drugi način je, da na računalniku napišemo program, s katerim poganjamo robota. V takem načinu programiranja je velikokrat potrebna korekcija koordinatnega sistema robota z učnim panelom. Vedno popularnejši način pa je uporaba strojnega učenja, predvsem za podajanje informacij o okolici. Tak robot je običajno opremljen s kamero in programom za prepoznavanje objektov in/ali človeka. Bolj interaktiven način so predstavili Akkaladevi et al. [10] v svojem delu, kjer so pojasnili, da lahko robota programiramo tudi tako, da stojimo pred kamero ali robotom, opremljenim s kamero, in mu pokažemo kaj in kako mora delati, robot nam sledi in se na tak način uči.

2.4.1.1 Uporabniški vmesniki

Uporabniški vmesnik je [15] prostor oz. točka na kateri se zgodi interakcija med človekom in robotom. Vmesnik omogoča uporabniku upravljanje robota in se lahko spreminja glede na namen robota. Roboti, ki opravljajo enostavne naloge, se navadno upravljajo preko gumbov. Operater sam robota ne premika po točkah s kontrolnim panelom, ampak pritiska na gumbe za izvajanje že nastavljenih ciklov. Tak način dela z robotom je predvsem prisoten v primerih, ko si človek in robot ne delita delovnega prostora ali, ko si ga delita izmenično. Drugi način dela z robotom je ročno postavljanje robota na pozicije, kjer delavec izkorišča pozitivne lastnosti robota, kot je npr. robotova moč. Lahko ga upravlja tudi preko tipk, ki mu omogočajo lažje premikanje. Te roboti v večini nimajo vnaprej nastavljenih ciklov delovanja. Robote lahko upravljamo tudi z mimiko, predvsem telesno in obrazno. Takšne robotske aplikacije sicer niso značilne za industrijsko okolje, a so

(23)

Teoretične osnove in pregled literature

vseeno vredne omembe. Tako kot upravljanje robotov z mimiko, je možno tudi upravljanje robotov z možgansko aktivnostjo. Te aplikacije so predvsem zanimive za uporabo pri robotskih udih ter drugi protetiki.

(24)

10

3 Risanje z robotsko roko

Gibanje robotske roke sodelujočega industrijskega robota Fanuc CR-7iA/L želimo upravljati s premikanjem naše roke pred kamero. Za prepoznavo rok napišemo program v programskem jeziku Python, z robotom komuniciramo preko HTTP protokola, s katerim mu posredujemo želene koordinate, robot pa izvršuje ukaze s programom, napisanim v programskem jeziku KAREL.

Za prepoznavo rok, poz rok ter zaznavo položaja rok uporabnika uporabimo knjižnico MediaPipe, za strojni vid pa knjižnico OpenCV. Uporabljena je kamera ločljivosti 720P HD, vendar zadošča že zajem 640x480 slikovnih pik. Dobljeno sliko obdelamo z našim programom:

- ji dodamo informacije za uporabnika, kot je podatek v katerem načinu risanja se nahajamo, mu izrišemo informativno virtualno platno, ter sliko vrnemo uporabniku na zaslon in

- izluščimo potrebne informacije za robota, ki jih preko protokola HTTP pošljemo robotu, da izvede gib na ustrezen položaj.

Slike lahko zajemamo s do hitrostjo 30 slik na sekundo, vendar moramo obdelati vsako sliko posebej. Komunikacija z robotom proces dodatno upočasni, saj poteka obojestransko:

- preko protokola HTTP damo robotu navodilo, na kateri položaj naj se premakne,

- robot preko protokola HTTP potrdi sprejem in računalniku sporoči svojo trenutno lokacijo v koordinatah x, y in z, zasuke svojih osi J1 – J6 ter informacije o trenutnem uporabniškem koordinatnem sistemu.

Iz posamične zajete slike pridobimo položaj kazalca glede na koordinatni sistem in velikost zajete slike. Dobljene koordinate prilagodimo velikosti platna in koordinatnemu sistemu robota ter jih pošljemo robotu. Robot bo izvajal gibe in se z manjšim časovnim zamikom premikal na pozicije, ki mu jih pošljemo. To nam omogoča, da rišemo risbo v realnem času in jo lahko prilagajamo med risanjem.

(25)

Risanje z robotsko roko

3.1 Python program za upravljanje z robotom

Python je na področju podatkovne analitike in strojnega učenja trenutno med najpopularnejšimi programskimi jeziki. Popularnost jezika pripomore k veliki količini virov, urejeni dokumentaciji ter velikemu naboru knjižnic, ki jih lahko uporabimo. Z uporabo zvezka Jupyter Notebook lahko v začetni fazi program zaganjamo postopoma, kar nam omogoča lažji razvoj kode. V našem programu uporabimo več knjižnic, med njimi sta med bolj pomembnimi MediaPipe (za prepoznavo rok) ter OpenCV (za uporabo kamere).

Naš program razdelimo na več manjših komponent, ki jih nato povežemo med seboj:

- Zaznavanje rok in izračun koordinat

- Prikaz povratne informacije za uporabnika

- Komunikacija z robotom ter pošiljanje ukazov robotu

Na sliki 3.1 je shematsko prikazano delovanje našega Python programa.

Slika 3.1: Shema delovanja našega programa

(26)

Risanje z robotsko roko

12

3.1.1 Zaznavanje rok

Za sledenje rokam zadoščajo že kamere prenosnikov, saj ni potrebe po visoki kvaliteti slik, kar nam olajša postavitev sistema. Za zaznavo rok uporabimo knjižnico MediaPipe, ki temelji na nevronskih mrežah. To uporabimo predvsem zato, ker je odprta, javno dostopna in vsebuje dovolj natančne in hitre modele za prepoznavo rok. Za upravljanje robota želimo več kot zgolj koordinate premika. Tako bo roka, stisnjena v pest, pomenila lebdenje oz. odmik od risalne površine, razprta roka oz. stegnjen kazalec pa bo pomenila risanje.

Pojavno okno za uporabnika

Ob zagonu programa se na zaslonu računalnika pojavi pojavno okno, namenjeno uporabniku. Pravilno delujoče pojavno okno je prikazano na slikah 3.3 do 3.5 (na kasnejših slikah 3.6 in 3.7 pa vidimo obveščanje o napakah). To vsebuje naslednje informacije, ki uporabniku pomagajo pri delu z robotom:

- informativni okvir zelene barve, ki označuje robove platna, po katerem lahko rišemo,

- mreža magenta barve, ki prikazuje povezave med sklepi (točkami obarvanimi vijolično); ta dva dela služita za večjo interakcijo uporabnika ter dodaten prikaz delovanja prepoznavanja rok

- koordinati se izpišeta pri kazalcu v beli barvi, kadar se kazalec nahaja znotraj platna ali v oranžni barvi, kadar se nahaja zunaj platna, kot je prikazano na sliki 3.2, koordinati sta v formatu (y, x), v realnem območju robota ter v enotah mm in delujeta kot dodatni element za preverjanje oz. informacija za uporabnika,

- besedilo (sredina zgoraj) za ustrezno delovanje, ki uporabnika opozarja na napake pri delovanju.

Slika 3.2: Prikaz različnih dveh različnih velikosti platna in ustrezno skaliranje koordinat

(27)

Risanje z robotsko roko

Slika 3.3: Pojavno okno za uporabnika

Slika 3.4: Pojavno okno za uporabnika - risanje s kazalcem

Slika 3.5: Pojavno okno za uporabnika - lebdenje nad platnom

(28)

Risanje z robotsko roko

14 Kako deluje knjižnica MediaPipe?

MediaPipe glede na uradno dokumentacijo [11] deluje na osnovi dveh modelov:

- Detekcija dlani, za lociranje dlani in ugotavljanje orientacije

- Detekcija roke, ki nadgradi detekcijo dlani ter zazna točke sklepov v dimenziji 2,5D Modela, ki ju knjižnica MediaPipe uporablja za prepoznavo rok in sledenje rok delujeta na podlagi nevronske mreže. MediaPipe omogoča tudi predvidevanje položaja rok, zato lahko izkoristimo večjo »površino« zajete slike za zaznavo, saj za zaznavo zadošča že 2/3 roke v vidnem polju kamere. Kot lahko vidimo v spodnjem izseku kode, lahko pri zaznavi rok s knjižnico spremenimo minimalno zaupanje pri zaznavi, minimalno zaupanje pri sledenju in številu rok, ki jih model zazna.

with mp_hands.Hands(min_detection_confidence=0.8, min_tracking_conf idence=0.5, max_num_hands=2) as hands:

Izsek kode 3.1: Nastavimo ustrezne vrednosti pri zaznavi rok

Pri snovanju programa moramo upoštevati, da se med delovanjem lahko pojavi več dvoumnih situacij, kot na primer kaj storiti, če na sliki ne zaznamo roke, ali pa če zaznamo več rok. Kaj če je ena dlan odprta druga pa zaprta. Odločili smo se, da na robota pošiljamo le ukaze v dobro določenih situacijah, kjer je na sliki natanko ena roka. Če slika zajame dve roki, se robot ustavi, dokler situacije ne razreši uporabnik. Na sliki 3.6 je prikazano sporočilo z napako, ki ga prejme uporabnik, kadar robot zazna več kot eno roko, na sliki 3.7 pa je prikazana situacija, ko ne zazna nobene roke. Kadar zazna le eno roko, se na zaslonu izpiše eno izmed sporočil »Drawing« (robot riše) ali »Hovering« (robot lebdi nad platnom), kar lahko vidimo na slikah 3.3 do 3.5.

Slika 3.6: Program zazna več kot eno roko in sporoči napako »Too many hands«

(29)

Risanje z robotsko roko

Slika 3.7: Program ne zazna nobene roke in sporoči napako »No hands detected«

Model za zaznavo rok prepozna posamezne oporne točke za določanje lege dlani. Številke točk so že določene v knjižnici MediaPipe in so prikazane na sliki 3.8. S pomočjo teh opornih točk lahko izračunamo ali je uporabnikova dlan odprta (oz. zadošča že, da je iztegnjen kazalec) in določimo koordinate konice kazalca, iz katerih preračunamo ukaz za premik robota.

Slika 3.8: Točke, ki jih model prepozna na roki [12]

Za zajem slike in delovanje knjižnice MediaPipe potrebujemo knjižnico za računalniški vid OpenCV (angl. Open Source Computer Vision Library). S kamero pridobimo sliko trenutnega stanja, s pomočjo prej opisanega algoritma izračunamo ukaze za robota, in zahtevamo naslednjo sliko za obdelavo ter tako ponavljamo postopek.

3.1.2 Komunikacija z robotom ter pošiljanje ukazov na robota

Sodelujoči robot Fanuc CR-7iA/L omogoča klasično programiranje na dva načina. Eden od načinov je programiranje z učnim panelom, ki je prikazan na sliki 3.9. S kombinacijo tipk na učnem panelu robota pošiljamo na točke v prostoru, ki jih shranjujemo v pozicijske

(30)

Risanje z robotsko roko

16 registre. Te skupaj z enostavnimi ukazi združimo v programe, ki jih robot med delovanjem bere in se pomika po točkah, kot smo mu ukazali.

Slika 3.9: Učni panel

Drugi način je, da na računalniku izdelamo program v programskemu jeziku KAREL. Ta jezik je specifičen za programiranje robotov proizvajalca Fanuc. Za našo uporabo je v programskem jeziku KAREL izdelan enostaven program, ki bere koordinate iz pozicijskih registrov in robota pomika po točkah. Pozicijske registre lahko spreminjamo s protokolom HTTP in v realnem času pošiljamo koordinate robotu. Pri posameznem zagonu programa za premikanje robota si pomagamo z učnim panelom, s katerim izvedemo manjše popravke položaja platna in velikosti flomastra. Ker to naredimo ročno, so v izseku kode 3.2 vse spremenljivke v spodnji vrstici enake 0. Ko končamo poskusno fazo in se prepričamo, da smo vnesli pravilne omejitve, izklopimo učni panel in preklopimo na avtomatski način delovanja robota. Na ta način nam ni potrebno držati varoval in tipk na učnem panelu.

HTTP povezavo z robotom vzpostavimo z naslednjo vrstico:

requests.get(

f'http://192.168.1.202/KAREL/robotcontroller?' f'M=3&S=80.0&O=70&C=50&G=0&'

f'dA={x:.1f}&dB={y:.1f}&dC={z:.1f}&dD=-180.0&dE=0.0&dF=0.0&' f'UF_X=0.0&UF_Y=0.0&UF_Z=0.0&UF_W=0.0&UF_P=0.0&UF_R=0.0')

Izsek kode 3.2: Komunikacija računalnika z robotom

(31)

Risanje z robotsko roko

Številka 192.168.1.202 IP določa naslov robota, ki ga želimo upravljati. KAREL je programski jezik in je vezni člen med računalnikom in robotom. Konstanta M je način (angl. mode) in je za naše potrebe nastavljena na M=3, kar nam omogoča spreminjanje načina branja spremenljivk dA, dB, dC, dD, dE in dF.

S konstanto S določimo linearno hitrost robota. S konstanto O (angl. override) določimo koliko odstopanja ima lahko robot v točkah, da ohrani optimalno hitrost. Če je vrednost O=0, pomeni, da se bo robot na vsaki točki ustavil in nato nadaljeval. Mi smo vrednost nastavili na 70. Vrednost C predstavlja CNT faktor, ki je faktor ohranjanja hitrosti.

Spremenljivka G predstavlja stanje odprtosti prijemala. V našem primeru je konstanta in znaša G=0, saj ne spreminjamo stanja prijemala.

Spremenljivke dA, dB, dC predstavljajo koordinate x, y in z posameznih točk, na katere se premika robot. Spremenljivke dD, dE in dF predstavljajo zasuke okoli koordinatnih osi x, y in z. V našem primeru so konstante in različen od 0 je samo zasuk okoli x= -180. Razlog za to je, da je naše oprijemalo postavljeno pravokotno na x os robota.

Pomembne so še številke zapisane v UF_X, UF_Y, UF_Z, UF_W, UF_P in UF_R. Te so namenjene prilagajanju uporabniškega koordinatnega sistema. S tem lahko popravimo spremembo koordinatnega sistema s slike na platno, kot tudi v primeru, da je naše platno, na katerega rišemo postavljeno pod kotom.

3.2 Testiranje

Testiranje celotnega sistema izvedemo na Fakulteti za strojništvo Univerze v Ljubljani, v laboratoriju LAKOS. Pred tem lahko zaradi narave naloge, posamezne teste zaznave rok ter zajema potrebnih podatkov preizkusimo še preden se povežemo z robotom.

Naše preizkuševališče z vsemi pomembnimi deli je prikazano na sliki 3.10. Poleg robota uporabimo še računalnik z vgrajeno kamero, na katerem zaženemo naš program in ga z UTP kablom povežemo na robota, učni panel ter pripomočke za risanje. UTP kablu bi se lahko v prihodnje izognili z uporabo komunikacije preko omrežja Wi-Fi. Na tak način bi povečali največjo možno razdaljo med računalnikom in robotom, saj smo trenutno omejeni na zgolj nekaj metrov. Za risanje uporabimo flomaster in podlago, ki je sestavljena iz mehke podloge in risalne površine. Največja razloga za to sta, da v primeru prevelikega pritiska na podlago, to lažje odstranimo in razbremenimo pritisk ter blaženje vibracij.

(32)

Risanje z robotsko roko

18 Slika 3.10: Postavitev preizkuševališča

3.2.1 Sodelujoči robot Fanuc CR-7iA/L

Testiranje izvedemo na sodelujočem robotu proizvajalca Fanuc na sliki 3.11. Za sodelujočega robota se odločimo ravno zaradi ideje, da približamo robotiko in upravljanje robotov potencialnim uporabnikom.

(33)

Risanje z robotsko roko

Slika 3.11: Sodelovalna robota Fanuc. Levo CR-7iA in desno CR-7iA/L [13]

Sodelujoči robot, ki ga uporabljamo, je fiksen in ima posledično omejen doseg oz. omejeno območje delovanja, kot je prikazano na sliki 3.12. To moramo upoštevati pri izbiri velikosti ter lokacije platna.

Slika 3.12: Geometrijske specifikacije robota Fanuc CR-7iA/L, enote so v mm [14]

3.2.2 Risanje na platno

K upravljanju sodelovalnega robota smo želeli dodati tudi umetniški pridih. Da lahko rišemo na platno, moramo prilagoditi koordinatni sistem in preračun koordinat. Slika, ki jo

(34)

Risanje z robotsko roko

20 s kamero zajemamo, je namreč resolucije 640x480 px, naše platno pa je omejeno predvsem z delovnim območjem robota, ki je prikazano na sliki 3.12. Da lahko upravljamo robota, smo v program dodali algoritem za skaliranje koordinat. Ta deluje po naslednjih korakih:

1. Programu podamo željeno velikost platna in željeno lokacijo platna. Pri tem moramo upoštevati geometrijske omejitve robota, saj robot ne uporablja sistemov za zaznavanje risalne površine, kot bi bil npr. uporaba lastne kamere in strojnega vida, s katerim bi zaznal položaj in velikost platna.

2. Program ugotovi orientacijo platna in glede na to na sliki ustvari informativni okvir. Ta služi uporabniku kot smernica, do kje sega platno, vendar ne omejuje do kje lahko uporabnik vodi robota. Razloga za to sta povezana s kasnejšimi nadgradnjami: pri risanju s čopičem želimo za pokritost od roba do roba s čopičem zamahniti mimo roba platna; pri risanju s čopičem želimo dodatno funkcionalnost, ki je povezana z zajemanjem barve ter ožemanjem čopiča.

3. Pri informativnem okvirju lahko spreminjamo koliko bo oddaljen od roba zajete slike, s čimer prilagodimo delovno območje. S to prilagoditvijo dosežemo, da uporabnik lažje doseže rob platna, tudi kadar se nahaja daleč proč od kamere. Prav tako odmik od roba kamere izboljša uporabo, saj je zaznava rok otežena, kadar se roka nahaja na robu vidnega polja kamere.

4. Program preračuna pozicijo na kameri v koordinate enotskega kvadrata [0, 1] x [0, 1], ki predstavlja virtualno platno. Za prikaz in premik robota te koordinate potem pretvorimo v koordinate v realnem prostoru v milimetrih.

5. Ustrezne koordinate pošiljamo robotu preko ukaza requests.get(). Pri tem pazimo na usmerjenost koordinatnega sistema in izhodišča koordinatnih sistemov in jih ustrezno prilagodimo.

Slika 3.13: Skaliranje koordinat iz virtualnih na platno

Na sliki 3.14 so predstavljeni trije koordinatni sistemi (KS), med katerimi moramo preračunati transformacije. Modro označen je globalni KS robota. Ta ima izhodišče v prvem sklepu in ima prikazano rotacijo. Naš uporabniški KS moramo postaviti na mesto, kjer je označen rdeči KS, saj bo to naše izhodišče pri risanju. Kje točno se izhodišče KS nahaja, nastavimo z ročnim premikom robota v izhodišče, za kar uporabimo učni panel.

(35)

Risanje z robotsko roko

Premik koordinatnega sistema lahko izvedemo na več načinov:

- ga shranimo v registre z učnim panelom kot uporabniški KS,

- izpišemo koordinate ter jih vnesemo v ukazu requests.get() ali

- izpišemo koordinate ter jih vnesemo na začetku našega programa.

Zeleno je označeno platno, na katerega rišemo, kot je prikazano tudi na sliki 3.13. Rumena črtkana črta označuje doseg robota, kadar ga upravljamo s programom. Dokler je to polje ustrezno nastavljeno in se v njem ne nahaja objektov, ki bi lahko robota ovirali pri delovanju, bo delovanje robota nemoteno in do trkov ne bo prišlo. Rumen okvir dobimo z izračunom in je na spodnji sliki samo informativne narave. Rumen KS označuje izhodišče in usmerjenost koordinat na slikah, ki jih zajemamo s kamero.

Slika 3.14: Robotov in uporabniški koordinatni sistem ter koordinatni sistem kamere

(36)

22

4 Rezultati

V nalogi smo združili prepoznavo rok in sodelovalnega robota, z namenom, da ustvarimo bolj intuitiven način upravljanja z robotom. Izdelali smo program, s katerim smo uspešno vodili robota na želena mesta. Izkaže se, da robot uspešno sledi gibanju roke, dokler je to dovolj počasno. Zaostajanje robota za premikanjem roke sicer nismo merili, a je razumljivo, da se pojavi. Razumeti moramo namreč, da smo omejeni z različnimi faktorji, ki zmanjšajo hitrost delovanja sistema, kot so:

- hitrost izvajanja naše kode,

- hitrost zajemanja slike,

- komunikacija z robotom,

- premik robotske roke na želeno mesto.

Uporaba kamere in knjižnice za zaznavo rok je pokazala nekaj pomanjkljivosti. Modeli, uporabljeni v knjižnici so najverjetneje učeni na jasnih fotografijah v dobrih pogojih. To predstavlja problem, ko za zajemanje slik nimamo optimalnih pogojev, ali pa se z roko premikamo prehitro, kot je prikazano na sliki 4.1. Pomanjkljivost, da model zaradi hitrega premikanja roke ne zazna, se izkaže za manj pomembno. V tem primeru robot čaka na zadnji znani lokaciji in model dovolj hitro prepozna roko v naslednji bolj razločni sliki. Pri samem testiranju na fakulteti z zaznavanjem nismo imeli težav, čeprav je model občasno kot roko zaznal druge objekte ali dele obraza.

(37)

Risanje z robotsko roko

Slika 4.1: Napaka pri detekciji roke

(38)

24

5 Diskusija

Pristop v grobem deluje, vendar ima na določenih mestih še nekaj pomanjkljivosti.

Zaznava rok je težavna v slabih snemalnih pogojih, kot je npr. slaba osvetljenost. Za delovanje smo uporabili kar navadno kamero, že predhodno nameščeno na prenosniku.

Vprašanje je, ali pozitivne lastnosti uporabe takšne kamere, torej njeno prenosljivost in enostavnost uporabe, odtehtajo slabosti, ki se pojavijo pri skaliranju in napake zaradi snemalnih pogojev. Za nekatere zabavne aplikacije, kjer natančnost ni tako pomembna, je uporaba manj kvalitetnih komponent zadostna, vendar pri uporabi v industrijske namene ali aplikacije, je natančnost ključnega pomena, potrebujemo natančnejše metode zajemanja položaja rok uporabnika.

Pristop ponuja več opcij za izboljšave:

- Izboljšanje ločljivosti kamere in izboljšanje ločljivosti zajemanja slike

- Dodano enotno ozadje za lažje ločevanje med rokami in ozadjem

- Nadgradnja osnovnega modela za zaznavo rok

- Predvidljivost premikanja rok, kot nadgradnja MediaPipe knjižnice. S takšno dopolnitvijo lahko izboljšamo linije, ki jih riše robot. Te postanejo bolj gladke.

- Interpolacija premika med posameznimi zajemi. Čeprav je model za zaznavo rok izredno hiter, se pri hitrih premikih pozna zamik med posameznima slikama (saj smo potrebovali nekaj trenutkov za obdelavo prejšnje slike). Da bi omilili to težavo, bi lahko med zaporednimi točkami uporabili kakšno od metod interpolacije s krivuljami, da bi dobili več točk za bolj gladek premik robota.

- Uporaba več ukazov. Trenutno z iztegom prsta krmilimo, ali robot riše ali lebdi nad platnom. Lahko bi dodali še druge parametre kot je pritisk, nagib, itd. To bi verjetno najlažje dosegli z uporabo obeh rok, namesto zgolj ene.

(39)

6 Zaključki

V zaključni nalogi smo želeli izdelati intuitiven način za vodenje industrijskega robota, ki ne zahteva drage opreme. To nam je uspelo z uporabo knjižnic za prepoznavo rok in strojni vid. Za zajemanje slike smo uporabili kamero, ki je bila že vgrajena na uporabljenem prenosniku. Za preizkus sistema smo se podali v umetniške vode in z robotom risali. V naslednjih točkah je predstavljeno naše delo in ključne ugotovitve:

1) Zasnovali smo program, kjer lahko uporabnik brez znanja programiranja robotov upravlja sodelujočega robota, kjer za uporabo zadostujejo že preprosti gibi z roko.

Program je enostaven za uporabo, vendar od uporabnika potrebuje vhodne podatke (velikost in umeščenost platna v prostoru).

2) Pokazali smo, da je možno upravljanje sodelujočega robota samo s sledenjem položaja rok uporabnika. To omogočimo z uporabo knjižnic OpenCV za strojni vid ter MediaPipe, ki omogoča prepoznavanje rok ter pridobivanje koordinat iz zajetih slik.

3) Ugotovili smo, da uporaba zgolj kamere ter knjižnice za sledenje rok sama po sebi ni zelo natančna niti dovolj ponovljiva za industrijske aplikacije. S težavo namreč dosežemo, da s prstom sledimo isti trajektoriji dvakrat. Razlogi za slabšo ponovljivost so predvsem zajem slike (za hitrost se odpovemo uporabi visoke resolucije), prepoznava rok na posamezni sliki in tresenje rok pri risanju v zraku.

4) Ugotovili smo, da ima uporaba knjižnice MediaPipe določene pomanjkljivosti. Ena od večjih je težava s prepoznavo rok, če se te gibljejo prehitro. Knjižnica z zamikom prepozna tudi roko, ki pride v vidno polje kamere. Omeniti je potrebno tudi pomanjkljivo dokumentacijo knjižnice, kar ovira pisanje in analizo programov.

Vodenje robota na podlagi zaznave rok je sicer zabaven in zanimiv pristop k vodenju robotov, vendar se za industrijske aplikacije najverjetneje ne bo uporabljal. Na trgu so namreč prisotni hitreje odzivni ter bolj natančni sistem. Naša rešitev je bolj primerna za uporabo v zabavni industriji ter za robote pomagače, saj je za take aplikacije dovolj natančna ter odzivna. Tukaj namreč ni ključnega pomena, kako natančno lahko proces izvedemo, temveč splošna uporabnost in zanimivost produkta.

(40)

Risanje z robotsko roko

26 Predlogi za nadaljnje delo

Uporaba 3D kamere bi omogočila lažjo zaznavo oddaljenosti rok. Na tak način bi uporaba robota postala še bolj intuitivna, saj bi lahko uporabnik pritisk upravljal preko približevanja kameri. Namesto 3D kamere bi lahko uporabili tudi drugo napravo, s katero je mogoča zaznava gibanja. Vsekakor pa te dve rešitvi nista več enako cenovno ugodni, kot navadna kamera. Smiselno bi bilo tudi primerjati vse tri naprave in ugotoviti, ali uporabniška izkušnja odtehta uporabo dražjih komponent. Kot dodatek za našo rešitev je smiselno nadgraditi program, da omogoča zamenjavo risalnega medija, in celoten program zapakirati v aplikacijo z uporabniškim vmesnikom. V tem primeru bi za uporabo čopiča dodali avtomatsko namakanje in ožemanje čopiča, da ne bi s tem preveč obremenjevali uporabnika.

(41)

Literatura

[1] ISO 8373:2012(en). Roboti in robotske naprave – Slovar. Dostopno na:

https://www.iso.org/obp/ui/#iso:std:iso:8373:ed-2:v1:en, ogled: 24. 8. 2021.

[2] Built in Beta: Robotics Technology. Dostopno na: https://builtin.com/robotics, ogled:

24. 8. 2021.

[3] M. Boden, J. Bryson, D. Caldwell, K. Dautenhahn, L. Edwards, S. Kember, P.

Newman, V. Parry, G. Pegman, T. Rodden, T. Sorrell, M. Wallis, B. Whitby, A.

Winfield: Principles of robotics: regulating robots in the real world, Connection Science 29:2 (2017), str. 124–129.

[4] Mednarodna zveza za robotiko IFR (angl. International Federation of Robotics):

Industrial robots. Dostopno na: https://ifr.org/industrial-robots, ogled: 23. 8. 2021.

[5] Mednarodna zveza za robotiko IFR (angl. International Federation of Robotics):

Demystifying Collaborative Industrial Robots. International Federation of Robotics, Frankfurt, Germany, 2019, Dostopno na:

https://www.ppma.co.uk/uploads/assets/5e46c1b9-cd23-423e-

a59650c216e54a0f/ifrdemystifyingcollaborativerobotsupdate2019.pdf, ogled: 23. 8.

2021.

[6] W. Bauer, M. Bender, M. Braun, P. Rally, O. Scholtz: Lightweight robots in manual assembly – Best to start simply!, Fraunhofer Institute for Industrial Engineering Iao, Fraunhofer IAO, 2016.

[7] P. Novak, A. Vysocky: Human – Robot collaboration in industry, MM Science Jouurnal (2016). Dostopno na:

https://www.researchgate.net/publication/303853919_Human_- _Robot_collaboration_in_industry, ogled: 21. 8. 2021

[8] P. A. Lasota, T. Fong, J. A. Shah: A survey of Methods for Safe Human-Robot Interaction, Foundations and Trends in Robotics Vol. 5, No. 4 (2014) 261–349.

Dostopno na: http://interactive.mit.edu/sites/default/files/documents/2300000052- Lasota-Vol5-ROB-052.pdf, ogled: 23. 8. 2021.

[9] K. Rakinić: Psihologija in robotika: načrtovanje interakcij s sodelujočim robotom.

Dostopno na: https://www.alternator.science/sl/daljse/psihologija-in-robotika- nacrtovanje-interakcij-s-sodelujocim-robotom/, ogled: 23. 8. 2021.

(42)

Literatura

28 [10] S. C. Akkaladevi, M. Plasch, N. C. Chitturi, M. Hofmann, A. Pichler: Programming

by Interactive Demonstration for a Human Robot Collaborative Assembly.

ScienceDirect: 30th International Conference on Flexible Automation and Intelligent Manufacturing (FAIM2020). Atene, Grčija, 2020.

[11] V. Bazarevsky, C-L. Chang, M. Grundmann, G. Sung, A. Tkachenka, A. Vakunov, F. Zhang: MediaPipe Hands: On-device Real-time Hand Tracking. Google

Research, Kalifornija, ZDA, 2020.

[12] Google MediaPipe - MediaPipe Hands. Dostopno na:

https://google.github.io/mediapipe/solutions/hands, ogled: 23. 8. 2021.

[13] Fanuc America Corporation – Fanuc CR-7iA/L Collaborative Robot. Opis produkta.

Dostopno na: https://www.fanucamerica.com/products/robots/series/collaborative- robot/cr-7ia-l-cobot, ogled: 23. 8. 2021.

[14] Fanuc America Corporation: Fanuc CR-7iA/L podatkovni list. Dostopno na:

https://www.fanucamerica.com/docs/default-source/fanuc-robot-datasheets- new/datasheet-cr7ia-l-english.pdf?sfvrsn=129dca39_2, ogled: 26. 8. 2021.

[15] RobotWorks. Humans and Robots Working Together through User Interfaces.

Dostopno na: https://www.robots.com/articles/humans-and-robots-working-together- through-user-interfaces, ogled: 26. 8. 2021

(43)

Priloga A

# 1. Namestitev in uvoz paketov

# !pip install mediapipe opencv-python import requests

import time import cv2

import mediapipe as mp import numpy as np

from matplotlib import pyplot as plt

# 2. Definiranje globalnih spremenljivk

mp_drawing = mp.solutions.drawing_utils mp_hands = mp.solutions.hands

# 3. Vnos globalnih konstant

W_CANVAS, H_CANVAS = 250, 100 # velikost platna v mm W_CAMERA, H_CAMERA = 640, 480 # velikost slike kamere v px

BORDER_DISTANCE = 0.1 # koliko je virtualno platno oddaljeno od roba kamere (delez kamer e)

OFFSET_CANVAS_X = 535 # premik izhodisca ks platna v x smeri OFFSET_CANVAS_Y = -125

OFFSET_CANVAS_Z = -115

# 4. Zaznaj ali je kazalec stegnjen in prikazi stanje

def detect_hands(image, hands):

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # BGR 2 RGB image.flags.writeable = False # pomaga pri optimizaciji results = hands.process(image) # zaznavanje rok

(44)

Priloga A

30

return results

def finger_is_up(results):

for hand in results.multi_hand_landmarks:

a = 0.05 # tolerance for detection y_tip = hand.landmark[8].y

y_mcp = hand.landmark[5].y - a # ker se ks zacne levo zgoraj!

finger_is_up = y_tip < y_mcp return finger_is_up

def status_message_and_color(results):

# vsi nizi so dolzine 17 za lepsi izris

if results.multi_hand_landmarks is None: # preverimo, ali okno vsebuje roke return "No hands detected", (120, 120, 220)

num_hands = len(results.multi_hand_landmarks)

if num_hands == 1:

if finger_is_up(results):

return " Drawing ", (210, 220, 180) else:

return " Hovering ", (160, 140, 100) else:

return " Too many hands ", (120, 120, 220)

def display_status(image, results):

message, color = status_message_and_color(results) cv2.putText(image, message, [W_CAMERA // 2 -

100, 50], cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2, cv2.LINE_AA)

# 5. Rescale Camera to Canvas

# 5.1. Calculate coordinates

def calculate_virtual_canvas(border_distance_ratio=0.1):

# izracunamo na podlagi na zacetku podanih velikosti platna w_ratio = (1 - border_distance_ratio) * W_CAMERA / W_CANVAS

(45)

Priloga A

h_ratio = (1 - border_distance_ratio) * H_CAMERA / H_CANVAS ratio = min(w_ratio, h_ratio)

width = int(W_CANVAS * ratio) height = int(H_CANVAS * ratio)

center_x, center_y = W_CAMERA / 2, H_CAMERA / 2

top_left = center_x - width / 2, center_y - height / 2 bot_right = center_x + width / 2, center_y + height / 2 return top_left, bot_right

def rescale_to_virtual_canvas(camera_x, camera_y):

# nastavimo ks

(top_x, top_y), (bot_x, bot_y) = calculate_virtual_canvas()

position_x = (camera_x - top_x) / (bot_x - top_x) position_y = (camera_y - top_y) / (bot_y - top_y) return position_x, position_y

def finger_coords_on_real_canvas(results):

for hand in results.multi_hand_landmarks: # Upostevamo, da bo tukaj samo ena roka position_x, position_y = hand.landmark[8].x, hand.landmark[8].y # Koordinate kon ice prsta

camera_x, camera_y = position_x * W_CAMERA, position_y * H_CAMERA canvas_x, canvas_y = rescale_to_virtual_canvas(camera_x, camera_y) canvas_x, canvas_y = (

canvas_y * H_CANVAS + OFFSET_CANVAS_X, # Upostevan prehod na ks platna canvas_x * W_CANVAS + OFFSET_CANVAS_Y,

) # Upostevan zamik ks irl

canvas_z = OFFSET_CANVAS_Z if finger_is_up(results) else OFFSET_CANVAS_Z + 10 return canvas_x, canvas_y, canvas_z

# 5.2. Display Virtual Canvas Info

def draw_virtual_canvas(image):

(top_x, top_y), (bot_x, bot_y) = calculate_virtual_canvas()

top_left, bot_right = (int(top_x), int(top_y)), (int(bot_x), int(bot_y)) # Za risanj e potrebujemo tipa int

cv2.rectangle(image, top_left, bot_right, (0, 255, 0), 1)

(46)

Priloga A

32

def display_virtual_coords(image, results):

for hand in results.multi_hand_landmarks:

position_x, position_y = hand.landmark[8].x, hand.landmark[8].y # Koordinate kon ice prsta

camera_x, camera_y = position_x * W_CAMERA, position_y * H_CAMERA canvas_x, canvas_y = rescale_to_virtual_canvas(camera_x, camera_y)

is_inside = (

0 < canvas_x < 1 and 0 < canvas_y < 1 # Pogoj kdaj je roka v obmocju platna in kdaj ne

)

color = (255, 255, 255) if is_inside else (155, 150, 245) # Dolocimo barve za zno traj in zunaj platna

canvas_x = canvas_x * W_CANVAS + OFFSET_CANVAS_Y canvas_y = canvas_y * H_CANVAS + OFFSET_CANVAS_X # izracunamo koordinate za posiljanje robotu

cv2.putText(

image, f"{canvas_x:.2f}, {canvas_y:.2f}", (int(camera_x), int(camera_y)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2, cv2.LINE_AA

)

def draw_hand_mesh(image, results):

# ta funkcija samo izrise informativno mrezo rok

for hand in results.multi_hand_landmarks:

mp_drawing.draw_landmarks(

image, hand,

mp_hands.HAND_CONNECTIONS,

mp_drawing.DrawingSpec(color=(121, 22, 76), thickness=2, circle_radius=4), mp_drawing.DrawingSpec(color=(250, 44, 250), thickness=2, circle_radius=2), )

# 6. Zdruzevanje v vecje funkcije def capture_movement():

camera = cv2.VideoCapture(0) # 0 je st. kamere, ki jo uporabljamo

(47)

Priloga A

with mp_hands.Hands(min_detection_confidence=0.8, min_tracking_confidence=0.5, max_nu m_hands=2) as hands:

while camera.isOpened():

_, image = camera.read()

# Flip on horizontal image = cv2.flip(image, 1)

# Detect hands

results = detect_hands(image, hands)

# Add bounding box - do kje sega platno na katero slika robot draw_virtual_canvas(image)

display_status(image, results)

# Rendering results

if results.multi_hand_landmarks:

draw_hand_mesh(image, results)

# Display coords of index finger tip display_virtual_coords(image, results)

# Mark movement if only one hand is present if len(results.multi_hand_landmarks) == 1:

# ta funk. se izvede samo kadar zazna 1 roko movement = finger_coords_on_real_canvas(results)

try:

draw_with_robot(movement) except:

pass

# Show image

cv2.imshow("Hand Tracking", image)

if cv2.waitKey(10) & 0xFF == ord("q"):

break

camera.release()

cv2.destroyAllWindows()

def draw_with_robot(movement):

# posiljanje na robota x, y, z = movement requests.get(

(48)

Priloga A

34

f'http://192.168.1.202/KAREL/robotcontroller?' f'M=3&S=80.0&O=70&C=50&G=0&'

f'dA={x:.1f}&dB={y:.1f}&dC={z:.1f}&dD=-180.0&dE=0.0&dF=0.0&' f'UF_X=0.0&UF_Y=0.0&UF_Z=0.0&UF_W=0.0&UF_P=0.0&UF_R=0.0' )

# M - mode, S - hitrost linearna, O - override v % hitrosti, #C - CMT faktor, faktor ohranjanja hitrosti, G - gripper stanje

# 7. Pozenemo program capture_movement()

(49)

Reference

POVEZANI DOKUMENTI

Z diskriminantno analizo smo pokazali, da je na osnovi tipoloških oblik cirkona možno relativno (povprečno 82 %) zanesljivo ločiti in korelirati posamezne litostrati- grafske

Gnuplot je nadvse primeren za risanje funkcij, saj lahko na enostaven naˇcin vnesemo razliˇcne funkcije, spreminjamo parametre funkcij in pa- rametre slike.. Kot smo videli

Kakšna je točnost prepoznave gibov prstov roke z uporabo metode podpornih vektorjev in petkanalnega Arduino EMG-ja ter ali lahko vodimo robotsko roko na podlagi prej omenje-

Z vprašanji o podobnostih in razlikah med rastlinami in živalmi, o lastnostih živih bitij ter o potrebah živih bitij za življenje se slovenski otro- ci srečujejo že v

Lahko leži na hrbtu, obrne glavo, prinese roko in nogo preko telesa in piha v vodo; potrebuje pomoč. Iz položaja leže na hrbtu se lahko obrne na trebuh z uporabo

Pri pouku je zato bolje reči, da imajo snovi različno prevodnost, kot pa da jih delimo na prevodnike in izolatorje, ali da imajo snovi različ- no gostoto, kot pa da jih delimo na

V primeru, da se program za vhodne podatke, ki izpolnjujejo začetni pogoj φ, ustavi, izhodni podatki izpolnjujejo zaključni pogoj

Formirala se je Islamska skupnost Bosne in Hercegovine, in sicer tako, da se je Starešinstvo Islamske skup- nosti za Bosno in Hercegovino, Hrvaško in Slovenijo preimenovalo..