-
Notifications
You must be signed in to change notification settings - Fork 0
/
rektorova.tex
executable file
·1878 lines (1587 loc) · 139 KB
/
rektorova.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\documentclass[times, utf8, diplomski, numeric]{fer}
\usepackage{booktabs}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgf-umlsd}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{bm}
\usepackage{algorithmic}
\usepackage{algorithm}
\usepackage{subcaption}
\usepackage[font = footnotesize]{caption}
\usepackage{fancyhdr}
\usepackage[framed,numbered,autolinebreaks,useliterate]{mcode}
\usetikzlibrary{shapes,arrows}
\graphicspath{ {images/} }
\usepackage{hyperref}
\hypersetup{
colorlinks=true,
linkcolor=blue,
filecolor=magenta,
urlcolor=blue,
}
\begin{document}
\renewcommand{\labelitemi}{$\bullet$}
\tikzstyle{block} = [draw, fill=white!20, rectangle,
minimum height=2em, minimum width=4em]
\tikzstyle{block2} = [draw, fill=white!20, rectangle,
minimum height=0.1em, minimum width=0.1em]
\tikzstyle{block_small} = [draw, fill=white!20, rectangle,
minimum height=2em, minimum width=2em]
\tikzstyle{sum} = [draw, fill=white!20, circle, node distance=2cm]
\tikzstyle{input} = [coordinate]
\tikzstyle{output} = [coordinate]
\tikzstyle{pinstyle} = [pin edge={to-,thin,black}]
% TODO: Navedite broj rada.
%\thesisnumber{3962}
% TODO: Navedite naslov rada.
\title{Intuitivni sustav teleoperacije robotskoga manipulatora korištenjem RGB-Dubinske kamere}
\engtitle{Intuitive method of robotic manipulator teleoperation using an RGB-D camera}
% TODO: Navedite vaše ime i prezime.
\author{Filip Marić \\ Ivan Jurin}
\maketitle
% Dodavanje zahvale ili prazne stranice. Ako ne želite dodati zahvalu, naredbu ostavite radi prazne stranice.
\zahvala{Ovaj rad izrađen je na Fakultetu elektrotehnike i računarstva
Sveučilišta u Zagrebu pod vodstvom prof. dr. sc. Ivana Petrovića i prof.
dr. sc. Zorana Kalafatića i predan je na natječaj za dodjelu Rektorove
nagrade u akademskoj godini 2015./2016.}
\tableofcontents
\chapter{Uvod}
Klasična upravljačka sučelja za robotske manipulatore kao što su tipkovnice ili daljinski upravljači u uporabi su od samih početaka razvoja robotike.
Kao pozitivna zajednička karakteristika ovih sučelja mogla bi se navesti njihova jednostavnost izvedbe: stisak odgovarajuće kombinacije tipki ili guranje kontrolne palice uzrokuje neku radnju manipulatora.
Dok su se ovakva sučelja pokazala efektivnim i cijenovno povoljnim rješenjem za ustaljene uloge robotskih manipulatora, njihov učinak u novijim primjenama ostavlja prostor za drugačije pristupe.
Zahvaljujući masovnoj proizvodnji tehnologija koje su početkom razvoja robotike bile u povojima, danas je prostor za razvoj inovativnih pristupa upravljačkim sučeljima veći nego ikad.
Robotski manipulatori vrlo su često anatomski slični ljudskoj ruci, što nas je dovelo do zaključka kako bi upravljanje manipulatora ljudskom rukom rezultiralo visokom razinom intuitivnosti, čiji manjak smatramo glavnim nedostatkom klasičnih sučelja.
Zamišljeno upravljačko sučelje razlikuje se od klasičnih po još jednoj osnovnoj karakteristici: ne zahtijeva kontakt između opreme i korisnika.
Ovakav sustav ostvaren je snimanjem pokreta ruke korisnika pomoću RGB-Dubinske kamere, koja uz sve funkcije standardne kamere vraća informaciju o udaljenosti objekata u kadru.
Dobivene informacije obrađuju se razvijenim algoritmom detekcije dlana ruke te se šalju preko mreže na upravljačko računalo robotskog manipulatora.
Upravljačko računalo pomoću razvijenog kinematičkog algoritma trenutnom stanju ruke korisnika pridružuje stanje izvršnog člana manipulatora.
%doradi zadnji paragraf, bolje primjene, fokusirati se više na potrebu za ljudskim aspektom i postupnim ulaskom robota u svakodnevni život
Ovakvim upravljanjem dobivene su prirodnije kretanje robotskih manipulatora, što postupnim ulaskom robota u svakodnevni život postaje tražena karakteristika.
Moguće primjene nalazimo u raznim područjima koja zahtijevaju intuitivnije sučelje između robota i čovjeka, kao i u područjima gdje konvencionalni načini upravljanja nisu dovoljno učinkoviti.
Jedna moguća primjena ovakvog rješenja u industriji zabave je pomicanje kamere na kraju više osnog manipulatora, gdje ovakvo upravljanje omogućuje snimatelju intuitivniju kontrolu kadra.
Svemirske agencije i robotički laboratoriji diljem svijeta već su duže vrijeme fokusirani na ovakav pristup problemu upravljanja robota u orbitalnim postajama \cite{yoshida2009achievements} \cite{larson1999human}, gdje ovakva sučelja imaju dodatnu prednost zbog bestežinskog stanja korisnika.
Ljudima s poteškoćama u kretanju robotska ruka upravljana ovakvom metodom može olakšati dohvaćanje objekata u okolini, pritom dajući obavljanju zadataka ljudsku dimenziju koja je pri uporabi ovakvih pomagala bitna.
U poglavlju "Opći i specifični ciljevi rada" (\ref{ciljevi}) definirani su zadaci, zahtjevi i okvirna struktura upravljačkog sučelja.
Poglavlja "Sklopovska podrška" (\ref{sklopo}) i "Programska podrška" (\ref{prog}) opisuju sklopovlje i programske alate s više ili manje detalja, ovisno o važnosti i frekvenciji pojavljivanja pojedine komponente u sustavu.
Posebna pažnja pridana je opisu ROS operacijskog sustava i pratećih paketa, koji čine centralnu komponentu sustava.
Teoretska pozadina problema kretanja robotskog manipulatora i prijedlog rješenja obrađen je u poglavlju "Kinematika manipulatora" (\ref{kinemanip}).
Predloženo rješenje u ovom poglavlju također je programski provjereno na razini matematičke ispravnosti u programskom paketu Matlab.
Problem detekcije stanja ljudske ruke obrađen je u poglavlju Detekcijski algoritam (\ref{Detekcijski algoritam}), gdje su dvije izložene metode uspoređene na bazi mogućnosti i performansi.
Nakon što su komponente koje sačinjavaju sustav pojedinačno objašnjene, njihova povezanost i detalji programske izvedbe izlaženi su u poglavlju "Upravljački algoritam" (\ref{Upravljački algoritam}).
U istom poglavlju izloženi su i rezultati ispitivanja sustava na simulaciji robotske ruke, razvijenoj radi boljeg uvida u moguće nedostatke programske izvedbe sustava.
Konačno, rezultati dobiveni korištenjem upravljačkog sučelja na stvarnom manipulatoru, kao i ocjena intuitivnosti samog sustava izlažu se u poglavlju "Rezultati".
\chapter{Opći i specifični ciljevi rada}\label{ciljevi}
Opći cilj našeg rada je razvoj upravljačkog sučelja koje kao ulaznu informaciju koristi se isključivo gestikulacije i pomake ruke korisnika.
Zamišljeno sučelje mora biti jednostavno za svladavanje novom korisniku, intuitivno, te pružiti odgovarajuću razinu preciznosti i pri tome zadržati relativno nisku cijenu.
Iz ovih smjernica proizlaze specifični ciljevi rada:
\begin{itemize}
\item cijeli sustav mora biti izveden koristeći besplatne, open-source\footnote{\textbf{open-source} - čiji je izvorni kod i/ili nacrti (dizajn) dostupan javnosti na uvid, korištenje, izmjene i daljnje raspačavanje} tehnologije.
Ovime je osigurana ažurnost sustava kroz vrijeme, kao i jednostavniji popravci i modifikacije.
\item radi nedostatka open-source rješenja za detekciju ruke korištenom RGB-Dubinskom kamerom, potrebno je razviti detekcijski algoritam koji uzima u obzir ograničenja korištene sklopovske podrške i potrebe sustava.
\item udaljeno upravljanje zahtjeva korištenje robotskog operacijskog sustava ROS, u kojem je izveden cjelokupni upravljački algoritam.
\item sustav mora biti primjenjiv na često korištenim robotskim manipulatorima. Ovo ukazuje na potrebu za programskim rješavanjem problema kinematike robotskog manipulatora uz dostupnu opisnu datoteku. Kompatibilnost sa najčešćim izvedbama ROS-API\footnote{\textbf{API} (\textit{engl. application programming interface}) - set programskih "blokova" razvijen sa svrhom olakšavanja komunikacije i upravljanja programskim ili sklopovskim sustavom} sučelja mora biti osigurana korištenjem stadnardiziranih protokola.
\item sustav mora imati zadovoljavajuće dinamičko ponašanje, što zahtijeva testiranje kinematike i upravljačke petlje na simulaciji razvijenoj za potrebe rada.
\end{itemize}
Za ostvarivanje ovih ciljeva potrebno je savladati metodologiju korištenja nekolicine programskih paketa i biblioteka, kao i riješiti problem međusobne kompatibilnosti brojnih komponenti sustava.
Komponente je potom potrebno uklopiti u strukturu upravljačke petlje više razine, pri tome vodeći računa o radnim frekvencijama korištenih sklopova.
%\section{Osnovni koncepti}
%%detaljan opis kako funkcioniraju "oba" načina upravljanja, eventualno ubaciti cardboard slike, slike upravljanja, slike detekcija gui, slike cijelokupnog sustava
%U ovom poglavlju opisujemo zamišljeno upravljačko sučelje.
%Prvi odlomak opisuje dva načina kojima upravljački algoritam bilježi kretnje ruke korisnika.
%Drugi odlomak sadrži grubi pregled arhitekture cjelokupnog sustava i svrhe pojedinih komponenata, koje detaljnije obrađujemo u poglavlju \ref{Upravljački algoritam}.
\section{Interpretacija pokreta}\label{2_1}
Samom prenošenju kretnji ljudske ruke na robota pristupa se na dva načina: prvi ostvaruje praćenje ljudske ruke u stvarnom vremenu, dok se drugi bazira na načelu sličnom upravljanju kontrolnom palicom (\textit{engl. joystick}).
Praćenje ljudske ruke ostvaruje se "poistovjećivanjem" dlana korisnika s alatom na vrhu manipulatora.
Pri početku upravljanja ljudska se ruka nalazi na sredini kadra i odgovarajućoj udaljenosti, ova početna pozicija poistovjećuje se s trenutnom pozicijom alata manipulatora.
Pomicanjem dlana korisnik pomiče željenu poziciju alata manipulatora.
Upravljačka petlja "primjećuje" ovu razliku te regulacijom brzine zglobova ili izvršnog člana nastoji smanjiti pogrešku između trenutne i željene pozicije manipulatora.
Iste tvrdnje vrijede za postavljanje orijentacije izvršnog člana.
Izvedba \textit{joystick} načina rada oko početne pozicije korisnikove ruke formira sferu promjera ovisnog o veličini dlana.
Zadržavanjem dlana korisnika unutar sfere, upravljački algoritam zadržava izvršni član u trenutnoj poziciji.
Pomicanjem dlana korisnika izvan sfere, upravljački algoritam pomiče vrh manipulatora u smjeru vektora razlike pozicija dlana od središta kugle.
%\begin{figure}
%\centering
%\includegraphics[scale=0.3]{koncept21}
%\includegraphics[scale=0.3]{koncept22}
%\caption{Prikaz \textit{joystick} načina upravljanja.}
%\end{figure}
Dva navedena pristupa svojom funkcionalnošću podređeni su ograničenjima detekcije i izvođenju u stvarnom vremenu.
Velika prednost razvijene detekcije leži u činjenici da se prati samo ljudska šaka te konkretno prenošenje kretnji na zglobove obavlja kinematički algoritam.
Prenosi se samo konačni "cilj" kretanja, dok se način postizanja prilagođava građi manipulatora.
Zajednička funkcija obaju navedenih pristupa vezana je uz otvaranje i zatvaranje izvršnog člana.
Otvaranje šake korisnika upravljački algoritam interpretira kao naredbu otvaranja izvršnog člana, dok se zatvorena šaka interpretira kao naredba zatvaranja.
Ova funkcija naravno ovisi o tipu alata na kraju manipulatora, no mapiranje otvaranja i zatvaranja šake na neku drugu funkciju ne predstavlja problem radi separabilnosti dijela upravljačke petlje vezane uz izvršni član.
Radi sažetosti izlaganja ovom radu većinom se obrađuje prvi i složeniji način upravljanja jer sustavi razvijeni za njega mogu ostvariti \textit{joystick} način rada uz minimalne modifikacije.
\section{Struktura sustava upravljanja}
Sustav upravljanja na najvišoj se razini sastoji od 4 komponente:
\begin{itemize}
\item \textbf{detektor} Na RGB-Dubinskoj slici pronalazi dlan korisnika, njegove prostorne koordinate, orijentaciju i otvorenost.
\item \textbf{regulator} Interpretira razliku trenutnih stanja dlana i izvršnog člana manipulatora.
Rezultat se pretvara u potreban zakret (brzinu zakreta) zglobova manipulatora, nakon čega se šalje u API sučelje.
\item \textbf{API sučelje} Prima upravljačku naredbu i nakon obrade je prosljeđuje na nižu razinu gdje se pretvara u API naredbu.
U istom ciklusu API sučelje učitava trenutna stanja zglobova manipulatora i čini ih dostupnim regulatoru.
\item \textbf{manipulator} Prima i izvodi API naredbu kretanjem zglobova.
Ugrađeno sklopovlje bilježi senzorska mjerenja sa zglobova te ih priprema za čitanje od strane API sučelja.
\end{itemize}
Kako bi se kvalitetno ostvarili koncepti upravljanja navedeni u odlomku \ref{2_1}, vrlo je bitna povratna veza prikazana na slici \ref{izvedba}.
Povratna veza omogućuje uvid u trenutno stanje sustava čime se postiže ispravljanje pogrešaka, praćenje referentne veličine i otpornost na smetnje.
Pomoću informacija o poziciji pojedinačnih zglobova također se osvježava matrica Jakobijana manipulatora, koja je ključni element općeg kinematičkog rješenja praćenja u poglavlju \ref{direkt i inverz}.
\begin{figure}[!h]
\centering
\begin{tikzpicture}[auto, node distance=3cm,>=latex']
% We start by placing the blocks
\node [block] (detekcija) {{\small Detektor}};
\node [block, right of=detekcija] (Regulator) {{\small Regulator}};
\node [block, right of=Regulator, node distance=3cm] (system) {{\small API sučelje}};
% We draw an edge between the controller and system block to
% calculate the coordinate u. We need it to place the measurement block.
\draw [->] (Regulator) -- node[name=u] {} (system);
\node [output, right of=system, node distance=3cm] (output) {};
\node [block, below of=system, node distance=2cm] (measurements) {{\small Manipulator}};
% Once the nodes are placed, connecting them is easy.
\draw [->] (detekcija) -- node {} (Regulator);
\draw [->] (system) -- node [name=y] {}(output);
\draw [->] (y) |- (measurements);
\draw [->] (measurements) -| node[pos=0.99] {}
node [near end] {} (Regulator);
\end{tikzpicture}
\caption{Blok dijagram izvedbe sustava}\label{izvedba}
\end{figure}
\subsubsection{Detektor}
Zahtjevi postavljeni na detektor relativno su niski.
Radna frekvencija trebala bi biti dovoljno visoka da pri prosječnom gibanju referentne veličine bivaju zadane prije no što ih manipulator može sustići kako bi izbjegli isprekidano kretanje.
Minimalni zahtjev na sam detekcijski algoritam jest mogućnost pronalaženja koordinata ljudskog dlana u barem dvije dimenzije, ovime se omogućava kretanje manipulatora po ravnini.
U našem radu izvedeno je trodimenzionalno translacijsko kretanje s jednim stupnjem slobode rotacije, dok je upravljačka petlja potpuno osposobljena za detekciju punih 6 stupnjeva slobode gibanja.
\subsubsection{Regulator}
Pod pojmom regulator ovdje se podrazumijeva cijela programska struktura koja prima, obrađuje i šalje podatke između više objekata u stvarnom vremenu.
Stvarna struktura regulatora detaljnije se razmatra u poglavlju \ref{Upravljački algoritam}, nakon upoznavanja s korištenom programskom podrškom i kinematičkim rješenjem.
Ovdje je potrebno napomenuti da je za kvalitetan rad regulatora bitna sinkronizacija rada svih njegovih komponenti kako bi se ostvario stabilan protok podataka i stalna radna frekvencija sustava.
Ovo se ostvaruje korištenjem mrežne arhitekture operacijskog sustava ROS, koji omogućuje postavljanje radne frekvencije komponenti i daje detaljan uvid u protok podataka.
Također, mrežna arhitektura ROS-a omogućuje pokretanje komponenti pojedinačno na različitim fizičkim računalima, što ide u prilog modularnosti sustava.
\subsubsection{API sučelje}
Općenitost sustava zahtijeva razdvajanje općih funkcija za regulaciju i obradu podataka od funkcija povezanih uz specifični korišteni manipulator.
Konkretnije, ovu komponentu potrebno je ostvariti tako da se na nju može spojiti API bilo kojeg manipulatora koji zadovoljava fizičke zahtjeve.
Paket \texttt{ros\_control} ostvaruje zadano sučelje koristeći apstraktne klase na koje "spajamo" API manipulatora.
Dovoljno je funkcije čitanja stanja zglobova i zadavanja brzine/pozicije "umotati" u dostupne klase te ostatak sustava izvesti koristeći njih.
\subsubsection{Manipulator}
Manipulator je robotski uređaj koji izvršava željenu radnju te je na njega postavljeno nekoliko osnovnih zahtijeva kako bi bio kompatibilan sa sustavom.
Kao što je ranije spomenuto, sam manipulator mora imati minimalno dva računalom upravljiva stupnja slobode (time se ostvaruje planarno kretanje).
Minimalan uvjet za upravljanje jest postojanje API naredbi vezanih uz postavljanje brzine zglobova.
Također, manipulator mora biti opermljen senzorima pozicije i/ili brzine koje je moguće čitati na računalu koristeći API.
\chapter{Sklopovska podrška}\label{sklopo}
Sustav je dizajniran da bude univerzalan s obzirom na manipulator i detekcijski uređaj, ali pri svim testiranjima korištena je Kinova Jaco robotska ruka i Microsoft Kinect RGB-Dubinska kamera.
\section{Microsoft Kinect 3d kamera}\label{sec:kinect}
\begin{figure}[h!]
\centering
\includegraphics[width=0.5\textwidth]{detekcija/kinect}
\caption{RGB-Dubinska kamera Kinect for Xbox 360}
\label{fig:kinect}
\end{figure}
Moderni senzori su u mogućnosti prikazati sliku uz submilimetarsku preciznost. Takvu preciznost nam ne nudi Kinect, ali nudi sasvim prihvatljivu preciznost od nekoliko milimetara (ovisno o udaljenosti objekta).
Kinect je naziv za liniju Microsoftovih senzora pokreta razvijenih primarno za potrebe igraćih konzola, ali u širokoj uporabi u području računalnog vida. Sastoji se od dubinske kamere, klasične kamere te niza mikrofona pomoću kojih je u mogućnosti izvršavati kompleksne zadatke prepoznavanja i praćenja kao što je praćenje ljudskih pokreta.
U ovom radu korišten je \textit{Kinect for Xbox 360} \cite{kinect} (Slika \ref{fig:kinect}) te se ne razmatraju parametri drugih Kinect senzora.
RGB-Dubinska kamera sastoji se od emitera infracrvene svjetlosti koji projicira pseudoslučajne uzorke točaka u Kinectov vidokrug. Infracrvena kamera koja se nalazi na znanoj udaljenosti snimi položaj točaka, po kodiranom uzorku zna pod kojim je kutom uzorak generiran te jednostavnom triangulacijom izračuna dubinu u danoj točki prostora. Kako postoji određena udaljenost između senzora i emitera, na nekim mjestima Kinect neće biti sposoban odrediti dubinu zbog okluzije (Slika \ref{fig:oculsion}).
\begin{figure}[h!]
\centering
\includegraphics[width=0.49\textwidth]{detekcija/okluzija}
\includegraphics[width=0.49\textwidth]{detekcija/gubitak-malih-objekata}
\caption{a) Okluzija u dubinskoj slici. b) Gubitak malih objekata.}
\label{fig:oculsion}
\end{figure}
Okluzija se pojavljuje kao posljedica razmaka između emitera infracrvene svjetlosti i kamere. Kako kamera promatra prostor s neke udaljenosti od emitera, vidi neke dijelove prostora koje emiter nije mogao obasjati jer su bili pokriveni drugim objektima. Tako na slici \ref{fig:oculsion} a) bijela boja predstavlja sjenu koju dubinska slika ruke ostavlja za sobom. Iz položaja sjene i ruke jasno se vidi kako emiter emitira infracrvenu svjetlost s desne strane kamere što i je slučaj ako se pogleda arhitekturu senzora gdje se emiter nalazi s desne strane \ref{fig:kinect}.
Okluzije predstavljaju znatni problem u detektiranjima. U detekciji dlana, dlan može biti u takvom položaju da jedan dio dlana zasjeni drugi te je tada dobivena maksimalna moguća dubina na tom području. Takvi slučajevi mogu prevariti detektor te zato valja imati na umu učinak okluzije prilikom konstrukcije detektora.
Jedan kvalitetan pristup detekciji dlana koristi sintetizirane slike dlana na kojima simulira i okluziju kako bi detektor bio što bolje naučen na prave slike \citep{xu2013efficient}. U istom radu Xu i Cheng simulirali su i neuspješne detekcije malih površina. Jedan takav primjer se vidi na slici \ref{fig:oculsion} b), gdje je kažiprst okrenut u smjeru kamere te ne uspijeva biti detektiran. Razlog takvih neuspješnih detekcija nalazimo u načinu na koji Kinect određuje kut pod kojim je površina obasjana. Kako je već spomenuto, Kinect generira pseudoslučajne uzorke ovisno o kutu pod kojim su oni projicirani te tako kamera uspoređivanjem uzoraka može znati pod kojim kutom je predmet obasjan. Ako je predmet dovoljno male površine, uzorak neće biti potpun. Kinect pri tome pristupa na isti način kao i kod okluzije, dubinu na tom području postavlja na maksimalnu moguću dubinu.
%\begin{figure}[h!]
% \centering
% \includegraphics[width=0.5\textwidth]{detekcija/gubitak-malih-objekata}
% \caption{Gubitak malih objekata}
% \label{fig:loss-of-little-objects}
%\end{figure}
\newpage
\section{Kinova Jaco robotska ruka}
Kinova Jaco (\ref{JACO2}) robotska ruka je namijenjena osobama s poteškoćama u kretanju.
Jaco 2010. godine na tržište je stavlja kanadska tvrka Kinova robotics s ciljem olakšavanja svakodnevnog života korisnika.
Jaco ima 6 stupnjeva slobode, čime se ostvaruje puna sloboda pozicioniranja alata u prostoru.
Alat ili izvršni član sastoji se od grabilice s 3 prsta, što omogućuje stabilne hvatove velike količine svakodnevnih objekata.
Ruka je dizajnirana kako bi bila kompatibilna s raznim dostupnim električnim invalidskim kolicima, ali je zbog svoje kvalitetne izrade i tehničkih specifikacija našla široku primjenu u znanosti.
\begin{figure}[h!]
\centering
\includegraphics[width = 0.7\textwidth]{JACO2}
\caption{Kinova Jaco robotska ruka} \label{JACO2}
\end{figure}
\subsection{Tehničke specifikacije}
Glavne prednosti Jaco robotske ruke relativno su niska potrošnja električne energije i malena masa komponenata.
Aktuatori na zglobovima opremljeni su raznim senzorima čijim čitanjem korisnik može dobiti veliku količinu povratnih informacija o stanju manipulatora.
\subsubsection{Opće specifikacije}
Potrebni ulazni napon kreće se od 18V do 29V, a to su vrijednosti lako ostvarive baterijom ugradivom u električna invalidska kolica.
Masa od 5.6 kg osigurava jednostavnu montažu i sigurnost pri upravljanju, što je također vrlo bitno za primarnu svrhu ove robotske ruke.
Detaljan prikaz općih specifikacija manipulaotra nalazi se u tablici \ref{jaco_spec}.
\begin{table}[h!]
\centering
\caption{Prikaz tehničkih specifikacija Jaco robotske ruke} \label{jaco_spec}
\begin{tabular}{ | l | l | l |}
\hline
Masa & $5.6 \pm 5\%$ [kg] \\ \hline
Ulazni napon & $18 - 29$ [VDC] \\ \hline
Ulazna struja & $2 - 10$ [A] \\ \hline
Srednja snaga & $40$ [W] \\ \hline
Frekvencija upravljanja & $100$ [Hz] \\ \hline
Max. teret na alatu pri srednjoj ispruženosti & $1.5$ [kg] \\ \hline
Max. teret na alatu pri maksimalnoj ispruženosti & $1$ [kg]\\ \hline
Dohvat & $90$ [cm] \\ \hline
Linearna brzina alata & $5 - 15$ [cm/s]\\ \hline
Sila stiska prsta & $7$ [N] \\ \hline
\end{tabular}
\end{table}
\subsubsection{Aktuatori}
Manipulator se sastoji od 2 grupe od 3 identična aktuatora, modela K-75+ i K-58.
Veći aktuatori (K-75+) čine 3 donja zgloba koji podnose najveće terete, dok manji aktuatori (K-58) zauzimaju mjesto zglobova čija je primarna funkcija postavljanje orijentacije alata u prostoru.
Postoje još 3 aktuatora koji preko mehanizma arhimedova vijka pokreću prste.
Detaljan pregled specifikacija aktuatora nalazi se u tablicama \ref{spec_act_big}, \ref{spec_act_small}, \ref{spec_act_finger}.
\begin{figure}[h!]
\includegraphics[scale=0.5]{k75plus}
\includegraphics[scale=0.5]{k58}
\caption{a) aktuator K-75+ b) aktuator K-58}
\end{figure}
\begin{table}[h!]
\centering
\caption{Prikaz tehničkih specifikacija aktuatora K-75+.} \label{spec_act_big}
\begin{tabular}{ | l | l | l |}
\hline
Masa & $0.64 \pm 2\%$ [kg] \\ \hline
Promjer & $74.5(+0.00/-0.03)$ [mm] \\ \hline
Visina & $67$ [mm] \\ \hline
Maksimalna brzina & $8$ [RPM] \\ \hline
Apsolutna pogreška pozicije & $\pm0.5^{\circ}$ \\ \hline
Ulazni napon & $18 - 29$ [VDC] \\ \hline
Nominalni moment & $15$ [Nm] \\ \hline
Maksimalni moment & $26$ [Nm] \\ \hline
\end{tabular}
\end{table}
\begin{table}[h!]
\centering
\caption{Prikaz tehničkih specifikacija manjih aktuatora} \label{spec_act_small}
\begin{tabular}{ | l | l | l |}
\hline
Masa & $0.39 \pm 2\%$ [kg] \\ \hline
Promjer & $58(+0.00/-0.03)$ [mm] \\ \hline
Visina & $69$ [mm] \\ \hline
Maksimalna brzina & $10$ [RPM] \\ \hline
Apsolutna pogreška pozicije & $\pm0.5^{\circ}$ \\ \hline
Ulazni napon & $18 - 29$ [VDC] \\ \hline
Nominalni moment & $4$ [Nm] \\ \hline
Maksimalni moment & $7$ [Nm] \\ \hline
\end{tabular}
\end{table}
\begin{table}[h!]
\centering
\caption{Prikaz tehničkih specifikacija aktuatora prstiju} \label{spec_act_finger}
\begin{tabular}{ | l | l | l |}
\hline
Maksimalna brzina & $600$ [RPM] \\ \hline
Ulazni napon & $18 - 29$ [VDC] \\ \hline
Nominalni moment & $15$ [mNm] \\ \hline
Maksimalni moment & $30$ [mNm] \\ \hline
\end{tabular}
\end{table}
\subsubsection{Senzori}
Jaco robotska ruka opremljena je velikom količinom senzora.
Svaki zglob posjeduje senzore pozicije, temperature, struje i napona.
Senzori pozicije služe za bilježenje zakreta svakog pojedinačnog zgloba manipulatora, a diferenciranjem zakreta dobiva se informacija o brzini okretanja.
Informacijom o temperaturi aktuatora manipulator se štiti od moguće štete uzrokovane prekomjernim zagrijavanjem.
Pomoću senzora struje moguće je dobiti povratnu informaciju o momentu razvijenom na pojedinom aktuatoru, ovaj zaključak proizlazi iz dobro poznatog identiteta:
\begin{align}
m_m \approx k \ i_a;
\end{align}
Ovdje $i_a$ predstavlja trenutnu struju armature akturatora, dok je $k$ konstanta definirana specifikacijama motora.
%\begin{figure}[h!]
%\centering
%\includegraphics[width = 0.5\textwidth]{jaco_cad}
%\caption{Shema Kinova Jaco robotske ruke sa označenim duljinama i zakretima elemenata}
%\end{figure}
\subsection{Računalno sučelje}
Jaco robotska ruka s računalom se povezuje preko USB 2.0 (\textit{engl. Universal Serial Bus}) sučelja.
SDK\footnote{SDK (engl. Software Development Kit) - paket je programskih biblioteka, alata i uputa za razvoj vlastitih aplikacija za određeni programski ili sklopovski sustav.} Jaco robotske ruke kompatibilan je s novijim inačicama Linux Ubuntu i Windows operativnih sustava, a uz API sadrži grafičko upravljačko sučelje i bazu primjera korištenja API biblioteka.
\chapter{Programska podrška}\label{prog}
Ovo poglavlje sadrži opise svih programskih paketa, biblioteka i elemenata korištenih u ovom radu.
Kratko se opisuju karakteristke i uloge svake pojedine stavke programskog dijela arhitekture sustava.
Potpoglavlja koja opisuju ROS i Gazebo sadrže nešto detaljnije opise jer smatramo da je razumijevanje mehanizama njihova rada ključno za razumijevanje načela rada sustava.
\section{ROS}
\begin{figure}[h!]
\centering
\includegraphics[width = 0.3\textwidth]{ros_enabled}
\caption{ROS logotip}
\end{figure}
ROS (engl. \textit{Robot Operating System}) je operacijski sustav koji omogućuje jednostavno povezivanja alata i biblioteka potrebnih za razne izvedbe u robotici.
ROS je razvijen 2007. godine pod imenom \textit{switchyard} unutar laboratorija za umjetnu inteligenciju sveučilišta Stanford, kao razvojni alat za STAIR\footnote{\textbf{STAIR} - STanford Artificial Intelligence Robot} robota.
2008. godine razvoj ROS-a preuzima institut Willow Garage iz Kalifornije.
Od 2013. na dalje ROS postaje potpuno open-source i razvoj preuzima Open Source Robotics Foundation.
Glavna gradivna jedinica svake izvedbe u ROS-u je paket.
Paketi u sebi sadrže C++/Python aplikacije koje nazivamo čvorovima (engl. \textit{nodes}).
Čvorove koristimo za komunikaciju sa sklopovljem (aktuatorima, senzorima...), upravljanje simulacijama i prikazivanje podataka.
Izvedbe se u stvarnosti najčešće sastoje od više paketa, stoga se prava prednost ROS-a krije u ostvarivanju brze i učinkovite peer-to-peer komunikacije među čvorovima.
Komunikacija u ROS-u ostvaruje se mrežno (TCP/IP i UDP/IP protokolom) pomoću tema (engl. \textit{topics}) i poruka (engl. \textit{messages}).
Uz gore navedeno, ROS nudi razne naredbe unutar terminala koje olakšavaju prikaz podataka te dijagnostiku pri uklanjanju pogrešaka u kodu. Treba napomenuti da postoje i druge opcije za izvedbu aplikacija u robotici, kao što je OROCOS (engl. \textit{Open Robot Control Software}). ROS je za ovaj projekt izabran zbog jednostavnosti ostvarivanja distribuirane izvedbe.
\subsection{Osnovni koncepti}
Osnovna komunikacija u ROS-u može se vizualizirati u obliku grafa povezanih čvorova i tema. Ovakva struktura daje praktičan način prikazivanja sustava na najvišoj razini, čime se olakšava programska izvedba logike upravljanja.
\begin{figure}[h!]
\begin{center}
\includegraphics[width=\textwidth]{ros_shema}
\caption{Čvor A i čvor B ostvaruju jednosmjernu komunikaciju koristeći topic}
\end{center}
\end{figure}
Čvorovi spremaju podatke u standardizirane strukture koje zovemo porukama te ih objavljuju na odgovarajuće mrežne lokacije koje nazivamo temama.
Svaka tema prima samo jednu točno definiranu vrstu poruke i njen sadržaj dostupan je svim čvorovima na mreži.
Izdavač (engl. \textit{publisher}) je objekt unutar čvora koji šalje poruku na temu, dok pretplatnik (engl. \textit{subscriber}) čini njegov komplement i čita poruku trenutno sadržanu na temi.
Ovaj način komunikacije omogućuje distribuciju raznih procesa na više računala što izvedbe čini manje ovisnima o sistemskim zahtjevima i izboru programskog jezika za pojedine čvorove.
%slika streama jednog topica
\subsection{Ostale korištene funkcionalnosti}
Uz navedene osnovne funkcionalnosti, ROS sadrži neke složenije koncepte od kojih se ovdje izdvajaju servisi i parametarski server.
\subsubsection{Servisi}
U ovom radu koriste se servisi (engl. \textit{services}).
Pomoću servisa čvor A može direktno zahtijevati odgovor čvora B preko mreže.
Čvor A objavljuje servis na mrežnu lokaciju sličnu temi, na tu lokaciju čvor B šalje zahtjev i adresu za spremanje odgovora.
Čvor A učitava zahtjev s mrežne lokacije, obrađuje ga i odgovor sprema na adresu.
Zahtjev i odgovor najčešće su standardne ROS poruke, što znači da se pomoću servisa omogućuje korištenje funkcija čvora A u čvoru B.
Ova funkcionalnost vrlo je korisna za distribuirane izvedbe procesno intenzivnih zadataka.
\subsubsection{Parametarski server}
Parametrima (engl. \textit{parameters}) se nazivaju karakteristične veličine unutar ROS čvorova koje se koriste pri izračunima varijabli.
Glavna razlika između parametra i varijable nalazi se u frekvenciji promjene, koja je za parametre znatno niža.
ROS nudi mogućnost učitavanja parametara s mrežnih lokacija čime se omogućuje jednostavno fino podešavanje ponašanja čvora pri testiranju.
Ovakvim pristupom se izbjegava potreba ponovnim kompiliranje koda pri svakoj promjeni parametara.
\subsection{ros control}
ROS paket \texttt{ros\_control} ostvaruje generičke PID regulatore za razna sklopovska sučelja unutar ROS arhitekture.
Jednostavna i standardizirana integracija s ostatkom ROS ekosustava čini ovaj paket čestom komponentom sustava izvedenih u ROS-u.
Kako bi se postiglo poopćenje, PID upravljanja neovisno o konkretnom robotu (tj. o API-ju), API funkcije robota "umataju" se unutar apstraktnih \texttt{hardware\_interf- ace} klasa koje čine ROS-API sučelje.
Umjesto da regulatori šalju i čitaju podatke koristeći API funkcije direktno, ove operacije obavljaju se pozivanjem generičkih funkcija unutar kojih su "umotane" API funkcije .
Kako bi primijenio postojeći sustav na drugog robota (uz dostupnost istog seta naredbi koje koristi regulator), korisnik mora samo uklopiti odgovarajuće API funkcije unutar generičkih.
Za dobar dio robota ovo sučelje već postoji radi open-source karaktera ROS ekosustava.
%\begin{figure}[h!]
%\centering
%\includegraphics[scale=1]{gazebo_ros_control}
%\caption{Mathworks Matlab logo}
%\end{figure}
\clearpage
\section{Matlab}
\begin{figure}[h!]
\centering
\includegraphics[scale=0.3]{logo_mathworks}
\caption{Mathworks Matlab logo}
\end{figure}
Matlab je računalno okruženje namijenjeno rješavanju širokog spektra tehničkih, računalnih i znanstvenih problema.
U užem smislu Matlab je viši programski jezik četvrte generacije koji omogućava manipulaciju matricama, numeričko računanje, iscrtavanje funkcija i još velik broj korisnih aplikacija.
Unutar Matlaba nalazi se veliki broj programskih paketa koji se koriste za specifične probleme.
Nama je bitan paket za simbolički račun, kao i paketi za čitanje podataka spremljenih unutar ROS operacijskog sustava.
Za svrhe testiranja nam je također bitna mogućnost pretvaranja Matlab koda u C, čime se znatno ubrzava izvođenje te omogućuje testiranje matematičkog modela.
U ovom se radu Matlab koristi pri razvoju rješenja kinematike manipulatora za preliminarno testiranje matematičke provedivosti zamišljene upravljačke petlje.
\section{OpenCV}
\begin{figure}[h!]
\centering
\includegraphics[scale=0.6]{logo_opencv}
\caption{OpenCV logo}
\end{figure}
OpenCV je biblioteka otvorenog koda koja je revolucionarizirala područje računalnog vida. Mnogobrojnim ugrađenim funkcijama koje su dobro dokumentirane omogućava početnicima lagani početak bavljenja računalnim vidom. U ovom radu korištene su ugrađene funkcije dostupne u biblioteci za obradu slike od kojih valja izdvojiti brze izvedbe algoritma za pronalaženje kontura na slici, određivanje obujmica kontura te implementacije morfoloških operacija nad slikom.
\section{OpenKinect/libfreenect}
\begin{figure}[H]
\centering
\includegraphics[scale=0.3]{logo_openkinect}
\caption{OpenKinect logo}
\end{figure}
OpenKinect je otvorena zajednica programera entuzijasta koji su razvili biblioteku \textit{libfreenect} kao biblioteku otvorenog koda koja daje na raspolaganje sučelje za upravljanje Kinect uređajima na različitim platformama. Funkcijama za dohvat podataka s priključenog Kinect uređaja moguće je dohvatiti trenutnu dubinsku sliku u preglednom obliku koji je kompatibilan s bibliotekom OpenCV kako bi se ona mogla dalje procesirati.
\section{TensorFlow}
\textit{TensorFlow} je biblioteka otvorenog koda namijenjena brzom izračunu operacija nad podacima u obliku višedimenzionalnih tenzora. Temelji se na grafovima toka podataka gdje je svaki čvor (engl. \textit{node}) u usmjerenom grafu jedna operacija nad jednim ili više ulaznih tenzora te računa izlaz kao jedan ili više izlaznih tenzora. Većina operacija zna izračunati i parcijalnu derivaciju svakog izlaza po svakom od ulaza koje se koriste prilikom propagacije greške tokom učenja.
Kako je orijentirana na strojno učenje uporabom neuronskih mreža, nudi i širok spektar različitih specijaliziranih metoda, kao što su različiti optimizatori ili različiti modeli prijenosnih funkcija.
Biblioteka također omogućava lako postavljanje željene arhitekture mreže i učenje istih na grafičkim procesorima što višestruko ubrzava sam proces učenja.
\section{KDL}
KDL (engl. \textit{Kinematics Dynamics Library}) je open-source C++ biblioteka razvijena za modeliranje i računanje kinematičkih lanaca.
Pomoću ove biblioteke moguće je jednostavno programski rješavati direktnu i inverznu kinematiku te dinamiku manipulatora sa manje od 7 stupnjeva slobode.
U ovom radu koristi se mogućnost konstrukcije Jacobijeve matrice manipulatora iz opisne datoteke.
Spomenuta matrica pokazuje vrlo važnom prilikom rješavanja problema praćenja putanje u općem slučaju.
KDL također vodi računa o izbjegavanju singulariteta u matricama, čime je osiguran kontinuiran rad upravljačkog algoritma.
\section{Gazebo}
\begin{figure}[H]
\centering
\includegraphics[scale=0.3]{gazebo_1}
\caption{Gazebo logo}
\end{figure}
Gazebo je open-source programski paket za simulaciju robotskih sustava, njihovih senzora i okoline.
Kako bi se postiglo simuliranje dinamike robota korišten je DART\footnote{\textbf{DART} (engl . Dynamic Animation and Robotics Toolkit) - \texttt{www.dartsim.github.io}} , jedna od nekoliko biblioteka ovog tipa koje Gazebo podržava.
Kvalitetno iscrtavanje 3d modela korištenog robota u Gazebu omogućeno je korištenjem OGRE\footnote{\textbf{OGRE} (engl . Object-Oriented Graphics Rendering Engine) - \texttt{www.ogre3d.org}} 3d grafičkog modula.
Semantički opis robota, njegovih komponenti, prijenosa i zglobova Gazebo dobiva iz pripadajuće URDF\footnote{\textbf{URDF} (engl . Unified Robot Description Format )} datoteke.
URDF je vrlo često korišten format za opis kinematičkih lanaca koji nudi kvalitetnu integraciju sa Gazebom i brojnim drugim robotičkim aplikacijama.
Proces pripreme simulacije znatno ubrzava činjenica da gotovo svaki komercijalni robotski manipulator ima pripadajuću URDF datoteku.
\subsection{ROS integracija Gazebo paketa}
Glavni razlog za korištenje ovog simulacijskog paketa uska je integracija sa ROS-om, čime se postiže jednostavan transfer sustava razvijenog na simulaciji na stvarni manipulator.
Gazebo simulaciju moguće je potpuno upravljati kroz ROS kroz regulatore i sučelja ostvarene \texttt{ros\_control} paketom, što nam omogućuje simuliranje korištenjem koda za stvarni manipulator.
Ova kompatibilnost ostvaruje se kroz \texttt{gazebo\_ros}, \texttt{gazebo\_msgs}, \texttt{gazebo\_plugins} ROS pakete.
Vrsta sklopovskog sučelja simulacije definirana je unutar URDF datoteke, te se pri pokretanju Gazeba unutar ROS okruženja sučelje objavljuje kao stvarno.
Zahvaljujući ovoj činjenici, sustav je moguće razvijati za simulaciju i stvarni sklop istovremeno, što ubrzava proces razvoja.
\chapter{Kinematika manipulatora}\label{kinemanip}
Modularna arhitektura našeg sustava dopušta integraciju manipulatora sa različitim razinama mogućnosti API-ja.
Unatoč tome što većina komercijalnih manipulatora dolazi s već izvedenim naprednim kinematičkim funkcijama, odlučeno je da radi kompletnosti izvedbe mora biti predviđen i slučaj kada su dostupne samo naredbe pomicanja zglobova.
Ovo poglavlje prikazuje teoretsku pozadinu programskog rješenja kinematike neredundantnog manipulatora izvedenog unutar našeg sustava na primjeru Jaco robotske ruke.
Budući da Jaco robotska ruka ima 6 stupnjeva slobode, sa stajališta složenosti kinematike ovaj izbor predstavlja svojevrsni najgori slučaj.
Kinematičko rješenje provjerava se u Matlab programskom paketu kako bi se ustanovila numerička stabilnost rješenja i mogući nedostaci.
\begin{figure}[h!]
\centering
\includegraphics[scale=0.8]{kinematika}
\caption{Model Jaco robotske ruke sa označenim parametrima} \label{h}
\end{figure}
U idealnom slučaju, rješavanje problema direktne kinematike manipulatora s do 6 stupnjeva slobode zahtijeva sintezu matrica homogene transformacije između koordinatnih sustava baze i alata.
Iz članova dobivene matrice potom se analitički dobivaju izrazi za Kartezijsku poziciju i orijentaciju alata u ovisnosti o zakretima zglobova.
Sinteza direktne kinematike započinje se D-H postupkom \cite{uicker1964iterative} postavljanja koordinatnih sustava vezanih uz zglobove.
Određivanjem matrica homogenih transformacija između tih sustava dobiva se surjektivna\footnote{Uz pretpostavku restrikcije zakreta zglobova na vrijednosti $[0,2\pi]$.} funkcija koja prostor zglobova preslikava u 6-dimenzionalni prostor pozicije.
Problem inverzne kinematike znatno je složeniji jer zahtijeva rješavanje sustava nelinearnih jednadžbi s više nepoznanica.
Za složenije manipulatore ovaj problem je netrivijalan, a analitička rješenja postoje tek u specijalnim slučajevima gdje su osi zglobova međusobno okomite.
Još jedna otežavajuća okolnost nalazi se u činjenici da će dobivena rješenja često biti višestruka, a pronalaženje odgovarajućeg ovisi o konstrukciji i poziciji manipulatora.
Kod redundantnih manipulatora ovaj problem poprima dodatnu složenost jer za svaku zadanu konfiguraciju postoji beskonačno mnogo rješenja.
Analitička rješenja problema ne postoje za većinu konfiguracija sa 6 stupnjeva slobode \cite{grochow2004style}, a klasični pristupi aproksimiranju rješenja sustava nelinearnih jednadžbi \cite{broyden1965class}\cite{bi2009three} zahtijevaju složen račun neprikladan za izvođenje u stvarnom vremenu.
Pronađeno je da je ovaj problem moguće zaobići koristeći iterativnu metodu baziranu na pronalaženju inverza matrice Jakobijana manipulatora \cite{buss2004introduction}, koja je puno prikladnija za programsku izvedbu.
\begin{figure}[h!]
\centering
\includegraphics[scale=0.35]{jacoDH1}
\caption{Model Jaco robotske ruke sa označenim parametrima korištenim pri sintezi DH parametara} \label{jacoparam}
\end{figure}
U prvom odlomku preskaču se pojedinosti D-H postupka i pomoću gotovih parametara izvode se matrice homogene transformacije.
Zatim se opisuje problem inverzne kinematike te klasični pristup rješavanju.
Drugi odlomak sadrži opis našeg pristupa rješavanju inverzne kinematike.
Počinje se od osnovne ideje, a zatim su objašnjena poboljšanja potrebna kako bi sustav bio primjenjiv na robotskom manipulatoru.
Radi sažetosti izlaganja ove naprednije metode se ne izvode, ali ukratko objašnjeni članovi u njihovim izrazima.
Rezultati zamišljenog postupka potom se ispituju na matematičkom modelu korištenjem Matlab programskog okruženja.
\section{Direktna i inverzna kinematika Jaco robotske ruke}\label{direkt i inverz}
\subsection{Direktna kinematika}
Problem direktne kinematike rješavan je tako da su prvo postavljeni koordinatni sustavi koji odgovaraju svakom pojedinačnom zglobu prema pravilima D-H postupka.
Iz međusobnih udaljenosti i razlika u orijentaciji ovih zglobova proizlaze D-H parametri koji su korišteni za sintezu matrica homogenih transformacija.
Množenjem dobivenih matrica dobiva se matrica koja izražava poziciju i orijentaciju alata izražene Kartezijevim koordinatama u ovisnosti o zakretu zglobova.
\subsubsection{D-H Parametri}
D-H parametri standardizirani su način prikaza kinematičkog lanca u robotici.
Pri sintezi matrica transformacije ruke korišteni su D-H parametri iz službene dokumentacije za Jaco robotsku ruku prikazani u tablici \ref{JacoDH}.
Za sintezu D-H parametara koriste se duljine članaka kao i parametri koji su iz njih izvedeni, prikazani su na slici \ref{jacoparam}.
\begin{table}[h!]
\centering
\begin{tabular}{ | l | l | l |}
\hline
$D_{1}$ & $0.2755$ [m] \\ \hline
$D_{2}$ & $0.4100$ [m] \\ \hline
$D_{3}$ & $0.2073$ [m] \\ \hline
$D_{4}$ & $0.0743$ [m] \\ \hline
$D_{5}$ & $0.0743$ [m] \\ \hline
$D_{6}$ & $0.1687$ [m] \\ \hline
$e_{2}$ & $0.0098$ [m] \\ \hline
$a$ & $\frac{11\cdot\pi}{72}$ [m] \\ \hline
$d_{4b}$ & $D_{3}+D_{4}\frac{\sin(a)}{\sin(2a)}$ [m] \\ \hline
$d_{5b}$ & $D_{4}+D_{5}\frac{\sin(a)}{\sin(2a)}$ [m] \\ \hline
$d_{6b}$ & $D_{6}+D_{5}\frac{\sin(a)}{\sin(2a)}$ [m] \\ \hline
\end{tabular}
\caption{Konstrukcijski parametri Jaco robotske ruke}
\end{table}
%\begin{equation}
%d_{4b}=D_{3}+D_{4}\frac{1}{2\cdot\cos(a)}=D_{3}+D_{4}\frac{\sin(a)}{\sin(2a)}
%\label{d4b}
%\end{equation}
%\begin{equation}
%d_{5b}=D_{4}+D_{5}\frac{1}{2\cdot\cos(a)}=D_{4}+D_{5}\frac{\sin(a)}{\sin(2a)}
%\label{d5b}
%\end{equation}
%\begin{equation}
%d_{6b}=D_{6}+D_{5}\frac{1}{2\cdot\cos(a)}=D_{6}+D_{5}\frac{\sin(a)}{\sin(2a)}.
%\label{d6b}
%\end{equation}
Ne ulazeći u pojedinosti DH metode, potrebno je napomenuti da $d$ i $a$ parametri predstavljaju međusobne odmake koordinatnih sustava zglobova, dok kut $\theta$ predstavlja rotaciju koordinatnih sustava oko vlastite osi rotacije. Navedenim parametrima dodaju se i razlike u orijentaciji rotacijskih osi zglobova $\alpha$. Konačni parametri prikazani su u tablici \ref{JacoDH}.
\begin{table}[H]
\centering
\caption{DH parametri} \label{JacoDH}
\begin{tabular}{c c c c c}
\hline\hline
$ k $ & $ \alpha_{k} $ & $ a_{k} $ & $ d_{k} $ & $ \theta_{k} $ \\
%heading
\hline
1 & $ \pi/2 $ & $ 0 $ & $ D_{1} $ & $ \theta_{1} $\\
2 & $ \pi $ & $ D_{2} $ & 0 & $ \theta_{2} $\\
3 & $ \pi/2 $ & 0 & $ -e2 $ & $ \theta_{3} $\\
4 & $ \frac{11\pi}{36} $ & 0 & $ -d_{4b} $ & $ \theta_{4} $\\
5 & $ \frac{11\pi}{36} $ & 0 & $ -d_{5b} $ & $ \theta_{5} $\\
6 & $ \pi $ & 0 & $ -d_{6b} $ & $ \theta_{6} $\\
\hline
\end{tabular}
\end{table}
\begin{equation}
\theta_{1}=-q_{1_{Jaco}}
\label{q1}
\end{equation}
\begin{equation}
\theta_{2}=q_{2_{Jaco}}-\frac{\pi}{2}
\label{q2}
\end{equation}
\begin{equation}
\theta_{3}=q_{3_{Jaco}}+\frac{\pi}{2}
\label{q3}
\end{equation}
\begin{equation}
\theta_{4}=q_{4_{Jaco}}
\label{q4}
\end{equation}
\begin{equation}
\theta_{5}=q_{5_{Jaco}}-\pi
\label{q5}
\end{equation}
\begin{equation}
\theta_{6}=q_{6_{Jaco}}+\dfrac{5\ \pi}{9}
\label{q6}
\end{equation}
Odnos kutova u matematičkom modelu i stvarnih kutova zglobova Jaco ruke dan je izrazima \ref{q1}, \ref{q2}, \ref{q3}, \ref{q4}, \ref{q5}, \ref{q6}.
Varijabla $q_{i_{Jaco}}$ predstavlja trenutačnu rotaciju i-tog zgloba Jaco robotske ruke očitanu kroz API, dok $\theta_i$ predstavlja stvarni zakret i-tog zgloba.
\subsubsection{Matrice homogene transformacije}
Matrica homogene transformacije između dva koordinatna sustava postavljena prema D-H postupku određena je izrazom \ref{homogena}.
Vektor $\mathbf{p} = [x\ y\ z]^T$ sadrži poziciju ishodišta k-tog koordinatnog sustava u koordinatnom sustavu k-1.
Matrica $\mathbf{R}$ je matrica rotacije koja definira orijentaciju koordinatnog sustava k u koordinatnom sustavu k-1.
\begin{equation}
\mathbf{T_{k-1}^k} =
\begin{bmatrix}
\mathbf{R} & \mathbf{p}\\
\mathbf{0} & 1\\
\end{bmatrix}
=
\begin{bmatrix}
\cos\theta_{k}& -\cos\alpha_{k}\sin\theta_{k} & \sin\alpha_{k}\sin\theta_{k} & a_k\cos\theta_{k}\\
\sin\theta_{k}& \cos\alpha_{k}\cos\theta_{k} & -\sin\alpha_{k}\cos\theta_{k} & a_k\sin\theta_{k}\\
0 & \sin\alpha_{k} & \cos\alpha_{k} & d_{k}\\
0 & 0 & 0 & 1\\
\end{bmatrix}
\label{homogena}
\end{equation}
Uvrštavanjem podataka iz tablice \ref{JacoDH} u izraz \ref{homogena} dobivaju se matrice homogenih transformacija za koordinatne sustave Jaco robotske ruke.
\begin{equation}
\mathbf{T_0^1} =\begin{bmatrix} \cos\theta_{1}& 0 & \sin\theta_{1} & 0\\
\sin\theta_{1}& 0 & -\cos\theta_{1} & 0\\
0 & 1 & 0 & d_{1}\\
0 & 0 & 0 & 1\\
\end{bmatrix}
\end{equation}
\begin{equation}
\mathbf{T_1^2} =\begin{bmatrix} \cos\theta_{2}& \sin\theta_{2} & 0 & a_{2}\cos\theta_{2}\\
\sin\theta_{2}& -\cos\theta_{2} & 0 & a_{2}\sin\theta_{2}\\
0 & 0 & -1 & 0\\
0 & 0 & 0 & 1\\
\end{bmatrix}
\end{equation}
\begin{equation}
\mathbf{T_2^3} =\begin{bmatrix} \cos\theta_{3}& 0 & \sin\theta_{3} & 0\\
\sin\theta_{3}& 0 & -\cos\theta_{3} & 0\\
0 & 1 & 0 & d_{3}\\
0 & 0 & 0 & 1\\
\end{bmatrix}
\end{equation}
\begin{equation}
\mathbf{T_3^4} =\begin{bmatrix} \cos\theta_{4}& -\cos\alpha_{4}\sin\theta_{4} & \sin\alpha_{4}\sin\theta_{4} & 0\\
\sin\theta_{4}& \cos\alpha_{4}\cos\theta_{4} & -\sin\alpha_{4}\cos\theta_{4} & 0\\
0 & \sin\alpha_{4} & \cos\alpha_{4} & d_{4}\\
0 & 0 & 0 & 1\\
\end{bmatrix}
\end{equation}
\begin{equation}
\mathbf{T_4^5} =\begin{bmatrix} \cos\theta_{5}& -\cos\alpha_{5}\sin\theta_{5} & \sin\alpha_{5}\sin\theta_{5} & 0\\
\sin\theta_{5}& \cos\alpha_{5}\cos\theta_{5} & -\sin\alpha_{5}\cos\theta_{5} & 0\\
0 & \sin\alpha_{5} & \cos\alpha_{5} & d_{5}\\
0 & 0 & 0 & 1\\
\end{bmatrix}
\end{equation}
\begin{equation}
\mathbf{T_5^6} =\begin{bmatrix} \cos\theta_{6}& \sin\theta_{6} & 0 & 0\\
\sin\theta_{6}& -\cos\theta_{6} & 0 & 0\\
0 & 0 & -1 & d_{6}\\
0 & 0 & 0 & 1\\
\end{bmatrix}
\end{equation}
Množenjem ovih matrica dobiva se matrica homogene transformacije između baze robota i alata \ref{b-a}
\begin{equation}
\mathbf{T_{alat}^{baza}} = \mathbf{T_1^0}\ \mathbf{T_2^1}\ \mathbf{T_3^2}\ \mathbf{T_4^3}\ \mathbf{T_5^4}\ \mathbf{T_6^5}
\label{b-a}
\end{equation}
Članovi ove matrice određuju se koristeći Matlab skriptu, rezultat računa i skripta ispisani su u dodatku \ref{kinematkod}.
Iz matrice $\mathbf{T_{alat}^{baza}}$ dobiva se potpuna informaciju o položaju alata u baznom koordinatnom sustavu kao funkcija zakreta zglobova:
\begin{equation}
\mathbf{w}(\bm \theta) =
\begin{bmatrix}
\mathbf{p}\\
\mathbf{r}(\mathbf{R})
\end{bmatrix}
\label{konfig_alat}
\end{equation}
Vektor \ref{konfig_alat} još se naziva vektorom konfiguracije alata.
\subsection{Inverzna kinematika}
Ciljane konfiguracije izvršnog člana u $\mathbb{R}^{6}$ dane su vektorom $\vec{\mathbf{t}} = (\mathbf{t_1}, \ldots , \mathbf{t_k})^{T}$ , a trenutne konfiguracije vektorom
$\vec{\mathbf{w}} = (\mathbf{w_1}, \ldots , \mathbf{w_k})^{T}$. Kod mehaničkih manipulatora, $\mathbf{w_i}$ je funkcija pozicija zglobova ${\bm{\theta_i}} = (\theta_{1}, \ldots , \theta_{n})^{T}$, pa za ovaj slučaj zapisujemo $\vec{\mathbf{w}}=\vec{\mathbf{w}}\left({\vec{\bm{\theta}}}\right) $.
Problem inverzne kinematike definiramo kao pronalaženje vektora $\vec{\bm{\theta}} = (\bm{\theta_1}, \ldots ,\bm{\theta_k})^T$ koji zadovoljava izraz:
\begin{equation}
\mathbf{t_i} = \mathbf{w_i}(\bm{\theta}_{\mathbf{i}})
\label{inverzna_def}
\end{equation}
Ono što čini problem inverzne kinematike problemom u užem smislu jest netrivijalnost rješavanja sustava jednadžbi \ref{inverzna_def} kako bi dobili $\bm{\theta}_{\mathbf{i}}(\mathbf{t_i})$.
Razvijeni su različiti pristupi ovom problemu od kojih se mnogi oslanjaju na numeričke metode ili metode pronalaženja minimuma odgovarajuće funkcije \cite{wang1991combined}.
Korištenjem analitičke metode rješavanja opisane u uvodu ovog poglavlja, vektor $\bm{\theta}_{\mathbf{i}}(\mathbf{t_i})$ dobiva se rješavanjem sustava jednadžbi dobivenog iz vektora konfiguracije alata \ref{konfig_alat}.
Promatranjem izraza za vektor konfiguracije alata $\mathbf{w}$, moguće je primijetiti da je analitičko rješavanje ovog problema netrivijalan zadatak čije poopćavanje zahtjeva iznimno složen algoritam.
Ovo dovodi do zaključka da univerzalni algoritam rješavanja inverzne kinematike zahtjeva drugačiji pristup.
\section{Iterativno rješavanje kinematičkog problema}
Kako bi se izbjeglo komplicirano analitičko rješavanje problema inverzne kinematike, koristi se metoda koja zaobilazi rješavanje sustava jednadžbi \ref{inverzna_def}.
Prvi se korak sastoji od određivanja matrice Jakobijana manipulatora koja povezuje brzine okretanja zglobova s linearnim i rotacijskim brzinama alata.
Pronalaženjem inverza ove matrice, moguće je odrediti potrebne brzine rotacije zglobova potrebne za ostvarivanje željene brzine gibanja alata.
Sintezom upravljačke petlje moguće je ostvariti praćenje referentne veličine u obliku zadanog vektora konfiguraciije alata, čime se ostvaruje iterativni postupak rješavanja inverzne kinematike.
\subsection{Jakobijan manipulatora}
Jacobijeva matrica ili Jakobijan manipulatora definira se kao promjena vektora konfiguracije $\mathbf{w_i}$ u ovisnosti o $\bm{\theta}_{\mathbf{i}}$.
Radi jednostavnosti zapisa, u nastavku teksta ispušteni su indeksi ovih vektora.
Sada je izraz za Jacobijevu matricu:
\begin{equation}
\mathbf{J} =\frac{d\mathbf{w}}{d\bm{\theta}} \label{jakob}
\end{equation}
Počinje se pretpostavkom da za dovoljno malene vrijednosti $\Delta \mathbf{w}$ vrijedi \ref{jac_approx}:
\begin{equation}
\Delta \mathbf{w} \approx \mathbf{J} \Delta \bm{\theta}
\label{jac_approx}
\end{equation}
Inverzom matrice $\mathbf{J}$ može se dobiti sljedeći vrlo koristan identitet:
\begin{equation}
\Delta \bm{\theta} \approx \mathbf{J}^{-1} \Delta \textbf{w}
\label{jac_approx2}
\end{equation}
Identitet \ref{jac_approx2} važan je jer omogućuje ostvarivanje regulatora brzine definiranog u \ref{kin_upr}.
U generalnom slučaju Jacobijeva matrica predstavlja matricu dimenzija $n \times k$ gdje je $\mathbf{w_i} = (w_1, \ldots , w_k)^T$:
\begin{equation}
\mathbf{J} =
\begin{bmatrix}
\dfrac{\partial {w_1}}{\partial \theta_{1}} & \dfrac{\partial {w}_{1}}{\partial \theta_{2}} & \dots & \dfrac{\partial {w}_{1}}{\partial \theta_{n}} \\
\dfrac{\partial{w}_{2}}{\partial \theta_{1}} & \dfrac{\partial {w}_{2}}{\partial \theta_{2}} & \dots & \dfrac{\partial {w}_{2}}{\partial \theta_{n}} \\
\vdots \\
\dfrac{\partial {w}_{k}}{\partial \theta_{1}} & \dfrac{\partial {w}_{k}}{\partial \theta_{2}} & \dots & \dfrac{\partial {w}_{k}}{\partial \theta_{n}}
\end{bmatrix}
\end{equation}
U slučaju kada ova matrica predstavlja prostor vektora konfiguracije $\mathbf{w}$, vrijedi $k=6$.
Ove parametre ponekad nije jednostavno analitički odrediti, stoga je korištena geometrijska metoda kojom se zaobilazi deriviranje.
Neka je $\mathbf{p}_{j}$ pozicija j-tog zgloba u baznom koordinatnom sustavu i neka je $\mathbf{z}_{j}$ jedinični vektor osi rotacije j-tog zgloba.
Vektor \textbf{w} predstavlja trenutni vektor konfiguracije manipulatora.
Komponente rotacijskog dijela Jakobijana $J_{\bm{\omega}_j}$ jednake su jediničnim vektorima osi rotacije zgloba u baznom koordinatnom sustavu:
\begin{equation}
J_{\bm{\omega}_j} = \dfrac{\partial \textbf{w}}{ \partial \theta_{j}} = \textbf{z}_{j}
\end{equation}
Uz pretpostavku da je rotacija mjerena u radijanima i da je smjer rotacije određen pravilom desne ruke, za translacijski dio Jakobijana $J_{\bm{v}_j}$ članovi iznose:
\begin{equation}
J_{\bm{v}_j} = \dfrac{\partial \mathbf{w}}{ \partial \theta_{j}} = \mathbf{z}_{j} \times (\mathbf{w} - \mathbf{p}_{j})
\end{equation}
U slučaju translacijskog zgloba, računanje člana još je jednostavnije jer je promjena pozicije jednaka jediničnom vektoru "osi rotacije" zgloba:
\begin{equation}
J_{\bm{v}_j} = \dfrac{\partial \mathbf{w}}{ \partial \theta_{j}} = \mathbf{z}_{j}
\end{equation}
Dobivena Jacobijeva matrica ima strukturu \ref{jacob1}, \ref{jacob2} :
\begin{equation}
\mathbf{J} =
\begin{bmatrix}
J_{\bm{v}}\\
J_{\bm{\omega}}
\end{bmatrix}
\label{jacob1}
\end{equation}
\begin{equation}
\mathbf{J} =
\begin{bmatrix}
\mathbf{z}_{0} \times (\mathbf{w} - \mathbf{p}_{0}) &\mathbf{z}_{1} \times (\mathbf{w} - \mathbf{p}_{1}) &\ldots &\mathbf{z}_{n-1} \times (\mathbf{w} - \mathbf{p}_{n-1})\\
\textbf{z}_{0} &\textbf{z}_{1} &\ldots &\textbf{z}_{n-1}\\
\end{bmatrix}
\label{jacob2}
\end{equation}
Izrazom \ref{jac_approx2} lineariziramo model gibanja robota oko točke $\bm{\theta}$.
Uz odgovarajuću frekvenciju osvježavanja matrice $\mathbf{J}$, moguće je dobiti kvalitetnu aproksimaciju $\Delta \bm{\theta}$ za željeni $\Delta \mathbf{w}$.
Problem kod ovog pristupa nastaje u slučajevima kada matrica $\mathbf{J}$ nije kvadratna, što je slučaj kod svih manipulatora s brojem zglobova različitim od 6.
Nekvadratnu matricu nije moguće invertirati, što znači da metoda nije univerzalna.
Radi potrebe za općim rješenjem koristi se metoda bazirana na Moore-Penroseovom pseudoinverzu \cite{klein1983review}, koji je svojevrsno poopćenje inverza matrice proizvoljnih dimenzija.
Uz određene uvjete (\cite{ben2003generalized}), pseudoinverz Jakobijana određen je izrazom \ref{eq:pseudoinverz}:
\begin{equation}
\mathbf{J}^{+} = \left( \mathbf{J}^{\dagger} \mathbf{J}\right)^{-1}\mathbf{J}^{\dagger}
\label{eq:pseudoinverz}
\end{equation}
U izrazu \ref{eq:pseudoinverz} simbol $\dagger$ označava operaciju hermitske transpozicije.
Ovom modifikacijom poopćava se ideja izraza \ref{jac_approx2} na sve manipualtore, a i osigurava se veća numerička stabilnost naspram običnog inverza.
U praksi se koriste naprednije metode koje osiguravaju značajniju numeričku stabilizaciju dodatnim članovima, pa izraz \ref{jac_approx2} poprima oblik \ref{jacob3}.
\begin{equation}
\Delta \bm{\theta} \approx \mathbf{J}^{+} \Delta \textbf{w} + \mathbf{S}
\label{jacob3}
\end{equation}
U izrazu \ref{jacob3} matrica $\mathbf{S}$ predstavlja stabilizacijski član koji može biti ovisan o trenutnoj brzini, poziciji ili akceleraciji zglobova.
Programska izvedba pomoću KDL biblioteka oslanja se na poboljšanu varijantu metode \ref{jacob3} zvanu metoda prigušenih najmanjih kvadrata (\textit{engl. damped least squares}) \cite{buss2005selectively}.
Za razliku od ranije navedenih metoda, ova ne traži najmanji vektor $\Delta \bm{\theta}$ koji zadovoljava \ref{jakob}.
Metoda prigušenih najmanjih kvadrata nalazi vektor $\Delta \bm{\theta}$ koji pronalazi minimum iznosa:
\begin{equation}
\|\mathbf{J}\Delta \bm{\theta} - \Delta \textbf{w}\|^2 + \lambda^2\|\Delta \bm{\theta}\|^2 \label{dlq}
\end{equation}
Izraz \ref{dlq} može se svesti na izraz \ref{dlq2}, gdje se konstanta $\lambda$ odabire ovisno o konstrukciji manipulatora prema nekoj od razvijenih metoda.
Jedan prijedlog korišten pri testiranju koncepta jest postavljanje konstante na vrijednost maksimalne dopuštene promjene vrijednosti nekog zgloba unutar jednog radnog ciklusa.
\begin{equation}
\Delta \bm{\theta} = \left(\mathbf{J}^{\dagger} \mathbf{J} + \lambda^2\mathbf{I}\right)^{-1}\mathbf{J}^{\dagger} \Delta \mathbf{w} \label{dlq2}
\end{equation}
Ispostavlja se da je ovakva izvedba superiorna prema ostalim metodama, što se pokazuje u odlomku \ref{provjera}.
Primijećeno je da izraz \ref{dlq2} za $\lambda = 0$ postaje \ref{jacob3}.
\subsection{Upravljačka petlja}\label{kin_upr}
%Pomoću izvedene Jakobijeve matrice manipulatora konstruiramo upravljačku petlju više razine koja regulira vektor konfiguracije alata $\mathbf{w}$.
Razmatranjem izraza \ref{jac_approx2} moguće je posredno doći do metode čijom se primjenom u upravljačkoj petlji teoretski ostvaruje kretanje po putanji.
Iterativnom primjenom izraza \ref{jac_approx2} moguće je ostvariti kretanje ruke prema željenom vektoru konfiguracije dokle god je poznata pogreška $\mathbf{e}$.
Za sintezu Jacobijeve matrice potrebni su podaci o trenutnim pozicijama zglobova $\bm{\theta}$, koji čine unutarnju povratnu vezu petlje.
Vanjska povratna vezu korištena za računanje potrebne promjene vektora konfiguracije ostvaruje se pomoću bloka funkcije direktne kinematike \textbf{DK}.
Blok $\mathbf{J^{-1}}$ u ovom slučaju podrazumijeva bilo koju od metoda \ref{jac_approx2}, \ref{jacob3} ili \ref{dlq2} kojima povezujemo promjene zglobova s promjenama vektora konfiguracije.
\begin{figure}[!h]
\centering
\begin{tikzpicture}[auto, node distance=2cm,>=latex']
% We start by placing the blocks
\node [input, name=input] {};
\node [sum, right of=input] (sum) {};
\node [block, right of=sum] (Regulator) {{$\mathbf{J^{-1}}$}};
\node [block, right of=Regulator, node distance=3cm] (system) {{manipulator}};
% We draw an edge between the controller and system block to
% calculate the coordinate u. We need it to place the measurement block.
\draw [->] (Regulator) -- node[name=u] {$\bm{\omega}$} (system);
\node [output, right of=system, node distance=2cm] (output) {};
\node [block, below of=u] (measurements1) {$\mathbf{f}$};
\node [block, below of=measurements1] (measurements) {$\mathbf{DK}$};
% Once the nodes are placed, connecting them is easy.
\draw [draw ,->] (input) -- node {$\mathbf t$} (sum);
\draw [->] (sum) -- node {$\mathbf{e}$} (Regulator);
\draw [->] (system) -- node [name=y] {$\bm{\theta_r}$}(output);
\draw [->] (y) |- (measurements);
\draw [->] (y) |- (measurements1);
\draw [->] (measurements) -| node[pos=0.99] {$-$}
node [near end] {$\mathbf w$} (sum);
\draw [->] (measurements1) -| node[pos=0.99] {}
node [near end] {$\bm{\theta}$} (Regulator);
\end{tikzpicture}
\caption{Blok dijagram izvedbe upravljačke petlje manipulatora} \label{petlja}
\end{figure}
Izrazom \ref{e} definira se vektor razlike translacija u iteraciji $i$. Njime je definirana razlika u poziciji između ciljane i trenutne konfiguracije ${\mathbf{t}_{T}}$ i ${\mathbf{c}_{T}}$ unutar baznog koordinatnog sustava.
\begin{equation}
{\mathbf{e}_{T}} = {\mathbf{t}_{T}} -{\mathbf{c}_{T}}
\label{e}
\end{equation}
Kako bi se potpuno definirala potrebna promjena konfiguracije, potrebno je poznavati i razliku u orijentaciji.
Također, mjera razlike u orijentaciji mora biti kompatibilna s geometrijskom izvedbom Jakobijana koju koristimo u izračunima.
Ovo čini izračun nešto složenijim, te se on ne može svesti na oduzimanje.
\begin{equation}
{\mathbf{e}_{O}} = 0.5\left(\mathbf{R}_{x_c}\times\mathbf{R}_{x_t} + \mathbf{R}_{y_c}\times\mathbf{R}_{y_t} + \mathbf{R}_{z_c}\times\mathbf{R}_{z_t}\right)
\label{eo}
\end{equation}
Koristi se izraz \ref{eo} definiran u \cite{siciliano2010robotics}, koji je pogodan za kinematičke lance koji ne posjeduju sferne zglobove.
Elementi izraza predstavljaju stupce rotacijskih matrica koji korespondiraju s orijentacijom koordinatnog sustava koji je njima definiran.
Razliku referentnog i stvarnog vektora konfiguracije alata sustav množi prema izrazima \ref{jac_approx2}, \ref{jacob3} ili \ref{dlq2}.
Kao rezultat množenja dobivaju se potrebni zakreti zglobova $\Delta \mathbf{q}$.
Pri praćenju putanje manipulator nikad neće biti daleko od tražene pozicije, čime se bez gubitka općenitosti dobiveni potrebni pomaci (nakon skaliranja) mogu tretirati kao brzine.
\begin{equation}
\Delta \mathbf{q} \approx \bm{\omega}
\end{equation}
Vektor funkcija $\mathbf{f}$ u ovom slučaju označava preračunavanje kutova očitanih s manipulatora ruke $\bm{\theta_r}$ u kuteve koji odgovaraju postavljenom matematičkom modelu $\bm{\theta}$.
Dobiveni kutevi korišteni su za osvježavanje matrice $\mathbf{J}$ i dobivanje trenutnog vektora konfiguracije alata $\mathbf{w}$.
Iz \ref{petlja} primjećuje se struktura sa P (proporcionalnim) regulatorom jediničnog pojačanja, no sustav je moguće proširiti složenijim oblicima regulatora u nadređenoj i/ili podređenoj petlji.
\subsection{Provjera sustava}\label{provjera}
Zamišljena upravljačka shema sustava prikazana na slici \ref{petlja} provjerava se u Matlabu.
Prvi je korak rješavanje direktne kinematike te generiranje funkcije \texttt{jacoFK(q)} koja kao argumente prima zakrete zglobova $\mathbf{q}$,
a kao rezultat vraća matricu homogene transformacije alata.
Matrica Jakobijana sastavlja se geometrijskom metodom u funkciji \texttt{JacoJ(q, dw)}, radi boljih performansi od simboličke zamjene.
Konačno, stvara se upravljačka petlja koja se izvodi sa proizvoljnim brojem koraka. Uključena je i funkcija \texttt{skaliranje} koja s obzirom na maksimalnu brzinu skalira pogrešku $e$.
\begin{algorithm}[H]
\caption{Upravljačka petlja}
\begin{algorithmic}
\STATE{\textbf{Ulaz:} $w$ -- referentni vektor konfiguracije, $q$ -- početni položaj zglobova.}
\STATE{broje koraka $:= 6$}
\STATE{$r :=$ eul2rot($w_{4-6}$)}
\FOR{($i := 0; i <$ broj koraka$; i++$)}
\STATE{$T :=$ jacoFK($q$)}
\STATE{$R := T_{1-3,1-3}$}
\STATE{$e_{1-3} := w_{1-3} - T_{1-3,4}$}
\STATE{$e_{4-6} := 0.5\left(R_x\times r_x + R_y\times r_y + R_z\times r_z\right)$}
\STATE{$e :=$ skaliranje($e$)}
\STATE{$J :=$ jacoJ($q$,$e$)}
\STATE{$dq : = J^{-1}e$}
\STATE{$q := q + dq$}
\ENDFOR
\end{algorithmic}
\end{algorithm}
%\begin{equation}
%\alpha = atan2\left(\frac{r_{21}}{r_{11}}\right)
%\end{equation}
%\begin{equation}
%\beta = atan2\left(\frac{-r_{31}}{\sqrt{r_{32}^2 + r_{33}^2}}\right)
%\end{equation}
%\begin{equation}
%\gamma = atan2\left(\frac{r_{32}}{r_{33}}\right)
%\end{equation}
\begin{figure}[h!]
\centering
\includegraphics[width=0.49\textwidth]{matlab_pravocrtno1_kut}
\includegraphics[width=0.49\textwidth]{matlab_pravocrtno1}
\caption{Promjena pozicije inverzom Jakobijana.
Slika a) (lijevo) sadrži translacijski odziv, b) (desno) sadrži odziv orijentacije sustava u Eulerovim kutevima.} \label{P1}
\end{figure}
Radna frekvencija detekcije kreće se oko 30 Hz , a planirana frekvencija osvježavanja matrice Jakobijana je 50 puta u sekundi.
Iz ovih smjernica uzimamo kako ćemo pri testiranju osvježavati matricu Jakobijana 6 puta pri izvršavanju kretanja reda veličine nekoliko centimetara.
Iz grafa \ref{P1} vidljivo je kako pri čistom translacijskom kretanju upravljačka petlja s P regulatorom ostvaruje željenu konfiguraciju bez oscilacija.
Kretanje koje uključuje rotacije pokazalo se nešto većim izazovom za metodu baziranu na korištenju običnog inverza Jakobijana (\ref{jac_approx2}).
\begin{figure}[h!]
\centering
\includegraphics[width = 0.49\textwidth]{matlab_rot1}
\includegraphics[width = 0.49\textwidth]{matlab_rot1_xyz}
\caption{Promjena orijentacije inverzom Jakobijana.
Slika a) (lijevo) sadrži translacijski odziv, b) (desno) sadrži odziv orijentacije sustava u Eulerovim kutevima.} \label{rot1m}
\end{figure}
Sa slike \ref{rot1m} vidi se kako se pri isključivo rotacijskom kretanju korištenjem izraza \ref{jac_approx2} ne može dobiti zadovoljavajuće rješenje.
Ovaj slučaj jednostavan je dokaz ranije tvrdnje kako "obični" Jakobijan često nije dovoljno numerički stabilan.
Kako bi doskočili ovom problemu korištena je metoda prigušenih najmanjih kvadrata iz izraza \ref{dlq2} sa faktorom $\lambda = 0.2$.
\begin{figure}[h!]
\centering
\includegraphics[width = 0.49\textwidth]{matlab_rot2}
\includegraphics[width = 0.49\textwidth]{matlab_rot2_xyz}
\caption{Promjena orijentacije metodom prigušenih najmanjih kvadrata.
Slika a) (lijevo) sadrži translacijski odziv, b) (desno) sadrži odziv orijentacije sustava u Eulerovim kutevima.} \label{rot2m}
\end{figure}
Iz slike \ref{rot2m} vidi se kako je ostvareno drastično bolje ponašanje.
Na prikazu translacije potrebno je primijetiti nakupinu crvenih indikatora u jednoj točki, što znači da je pozicija izvršnog člana približno konstantna.
Potrebno je još ispitati ponašanje pri promjeni cijelog vektora konfiguracije.
\begin{figure}[h!]
\centering
\includegraphics[width = 0.49\textwidth]{matlab_pravocrtno2}
\includegraphics[width = 0.49\textwidth]{matlab_pravocrtno2_kut}
\caption{Promjena vektora konfiguraciije metodom prigušenih najmanjih kvadrata.
Slika a) (lijevo) sadrži translacijski odziv, b) (desno) sadrži odziv orijentacije sustava predstavljene u Eulerovim kutevima.} \label{PPI}
\end{figure}
Rezultati prikazani na slici \ref{PPI} dovoljan su dokaz da se metoda prigušenih najmanjih kvadrata u teoriji može koristiti za upravljanje manipulatorom sa 6 stupnjeva slobode.
U ovom preliminarnom testiranju nije uključen model motora i dinamike manipulatora, stoga će konačnu programsku izvedbu biti potrebno testirati na simulaciji u Gazebo programskom okruženju.
%Klasičnim PID regulatorom možemo značajno smanjiti oscilatornost sustava.
%Pošto se regulator izvodi u kodu, potrebno ga je ostvariti rekurzivno:
%\begin{equation}
%\mathbf{u}(i) = K_I\mathbf{u}(i-1) + K_D[\mathbf{e}(i) - \mathbf{e}(i-1)] + K_P\mathbf{e}(i)
%\end{equation}
%
%Parametriranje regulatora ostvarujemo pomoću optimizacije kriterijske funkcije \ref{krit} koja kažnjava oscilatornost i vrijeme potrebno za postizanje stacionarnog stanja.
%\begin{equation}
%crit(k) = crit(k-1) + 100 k (\mathbf{t} - \mathbf{w}(k)) (\mathbf{t} - \mathbf{w}(k))^T
%\label{krit}
%\end{equation}
%
%Kako bi pronašli parametre $K_I$ i $K_P$ kojima ostvarujemo minimum ove funkcije koristimo Matlab funkciju \verb|fminsearch|.
%Potrebno je uzeti u obzir činjenicu da u ovom procesu nismo modelirali ponašanje samih elektromotora u zglobovima jer pretpostavljamo da su kvalitetno regulirani od strane FPGA pločice na manipulatoru.
%Ovi parametri također ovise o Jakobijanu korištenog manipulatora i raznim mehaničkim karakteristikama, ali rezultati optimiranja mogu poslužiti kao dobra polazna točka pri sintezi regulatora.
\chapter{Detekcijski algoritam}\label{Detekcijski algoritam}
Postoje mnogobrojni načini kojima se može upravljati pokretima ruke. U ovom radu koristi se RGB-Dubinska kamera koja omogućuje snimanje pokreta ljudske ruke, a zatim se svaka snimljena slika prevodi u informaciju. Tako dobivena informacija govori o trenutnoj lokaciji i orijentaciji ruke u trodimenzionalnom prostoru promatranom dubinskom kamerom.