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
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
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
O2.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�---=----
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.
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.
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.
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
x
Literatura ... 27
Priloga A ... 29
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
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
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
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)
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
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.
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).
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.
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.
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.
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.
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
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.
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.
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
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
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
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«
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
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
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.
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.
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
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.
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
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.
Risanje z robotsko roko
Slika 4.1: Napaka pri detekciji roke
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.
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.
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.
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.
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
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
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
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)
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
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(
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()