Diplomová práce
Software pro adaptivní montáž vypracoval: Bc. Jiří Liška vedoucí práce: doc.RNDr.Ing. Jiří Šťastný, CSc. obor: Inženýrská informatika a automatizace specializace: Informatika 2006
Vysoké u ení technické v Brn Fakulta strojního in enýrství Ústav automatizace a informatiky http://www.uai.fme.vutbr.cz
Strana 5
ANOTACE Diplomová práce se zabývá snímáním reálného objektu kamerou, propojení kamery s počítačem a následného rozpoznání objektu. Převedení rozpoznaného objektu do pracovního prostoru šestiosého robota a polohování robota na tento objekt. Aplikace pro simulaci pohybu robota je napsána v prostředí Visual C++. Aplikace využívá moderních prostředků objektově orientovaného programování.
ANNOTATION The thesis describes scanning of a real subject with the camera, interconnection of the camera with the computer and subsequent recognition of the subject. The transfer of recognized subject into the working area of the six-axis robot and positioning of the robot to this subject. The application of the robot movement simulation is written in the Visual C++ environment. The application utilizes modern means of the object oriented programming.
Strana 7
PODĚKOVÁNÍ Za cenné rady a připomínky týkající se celkového zpracování práce děkuji vedoucímu diplomové práce doc. RNDr. Ing. Jiřímu Šťastnému, CSc. a také doc. Ing. Pavlovi Bělohoubkovi, CSc. Dále bych chtěl poděkovat svojí rodině za morální i finanční pomoc a podporu během celé doby studia.
Strana 9
PROHLÁŠENÍ Místopřísežně prohlašuji, že jsem byl seznámen s předpisy pro vypracování diplomové práce a že jsem celou diplomovou práci včetně příloh vypracoval samostatně. Ustanovení předpisů pro vypracování diplomové práce jsem vzal na vědomí a jsem si vědom toho, že v případě jejich nedodržení nebude moje práce přijata.
V Brně dne 20.5.2006
………………………………… Jiří Liška
Strana 11
1
OBSAH Anotace.............................................................................................................................................. 5 Poděkování........................................................................................................................................ 7 Prohlášení .......................................................................................................................................... 9 1 Obsah ..................................................................................................................................... 11 2 Úvod....................................................................................................................................... 13 3 Cíl diplomové práce ............................................................................................................. 15 4 Matematický model transformace souřadnicových systémů.......................................... 17 4.1 Reprezentace koncového bodu................................................................................. 17 4.2 Transformační matice základních pohybů .............................................................. 19 4.2.1 Translační pohyb pomocí transformačních matic [2]....................................... 19 4.2.2 Rotační pohyb pomocí transformačních matic [2] ........................................... 20 4.3 Pohyb mezi uzlovými body ....................................................................................... 21 4.4 Interpolátor robota ..................................................................................................... 22 4.5 Kinematická analýza ................................................................................................... 23 4.5.1 Stanovení souřadných systémů jednotlivých článků robota ............................ 23 4.5.2 Matice pro transformaci mezi jednotlivými články robota .............................. 24 4.5.3 Transformace do globálního souřadného systému ........................................... 25 4.6 Kinematická syntéza ................................................................................................... 26 4.6.1 Výpočet natočení jednotlivých článků robota.................................................... 26 4.6.2 Výpočet natočení γ1 ............................................................................................... 27 4.6.3 Výpočet natočení γ2 a γ3 ........................................................................................ 27 4.6.4 Výpočet natočení γ4 ............................................................................................... 29 4.6.5 Výpočet natočení γ5 ............................................................................................... 29 4.6.6 Výpočet natočení γ6 ............................................................................................... 29 5 Rozpoznávání obrazu .......................................................................................................... 31 5.1 Základní pojmy............................................................................................................ 31 5.2 Reprezentace údajů v obraze..................................................................................... 32 5.3 Předzpracování obrazu............................................................................................... 33 5.3.1 Převedení na stupně šedi....................................................................................... 33 5.3.2 Jas a kontrast.......................................................................................................... 33 5.3.3 Další možnosti předzpracování obrazu .............................................................. 34 5.4 Segmentace................................................................................................................... 34 5.4.1 Práhování................................................................................................................. 35 5.5 Detekce hran................................................................................................................ 35 5.5.1 Vlastní algoritmus detekce hran........................................................................... 36 5.6 Popis objektu a klasifikace objektů .......................................................................... 38 6 Aplikace.................................................................................................................................. 39 6.1 Knihovna OpenGL [8][9].......................................................................................... 39 6.2 Objektově orientované programování..................................................................... 40 6.3 Popis aplikace .............................................................................................................. 41 6.3.1 Levé okno................................................................................................................ 43 6.3.2 Pravé okno .............................................................................................................. 47 6.4 Třída ArcBall................................................................................................................ 50 6.4.1 Matematický aparát pro ArcBall .......................................................................... 51 7 Závěr....................................................................................................................................... 53 Seznam použité literatury.............................................................................................................. 55 Seznam příloh ................................................................................................................................. 57
Strana 13
2 ÚVOD V dnešní době každý výrobce, který chce prosperovat a chce zůstat konkurenceschopný, musí u svých výrobků snižovat dobu potřebnou na výrobu a zvyšovat kvalitu tohoto výrobku. Nejlepším způsobem, jak tohoto dosáhnout je zavedení automatizace do výroby. Díky krátkým životním cyklům dnešních výrobků, drobným modifikacím v rámci tohoto životního cyklu, nebo dokonce požadavkům na výrobu několika různých produktů na jedné výrobní lince se však již nemůžeme spoléhat pouze na „pevnou“ automatizaci. A právě výše zmíněné možnosti nám přináší nasazení průmyslových robotů. Robot je počítačem řízený integrovaný systém, schopný autonomní cílově orientované iterace s reálným prostředím v souladu s instrukcemi člověka.V současnosti je terminologie v robotice velice různorodá a proto se můžeme setkat s různými odlišnostmi jak v definici robota tak v robotice jako celku. První společností produkující průmyslové roboty se v roce 1962 stala společnost Unimation. Po dlouhou dobu pro ní byla jedinou konkurencí společnost Cincinnati Milacron, což se změnilo až koncem sedmdesátých let, kdy se myšlenky nasazení průmyslových robotů ujalo několik Japonských konglomerátů. Převzetí a další vývoj této technologie umožnila těmto společnostem platnost patentů společnosti Unimation pouze na území USA. Vynález šestiosého antropomorfního robotu potom spadá do roku 1969, kdy Victor Sheinman sestrojil na Standford University robota Standford Arm. Do této doby byly průmyslové roboty programovány za pomocí úhlů natočení mezi jednotlivými rameny. Standford Arm však umožnoval zpětný výpočet těchto úhlů podle orientace a polohy koncového bodu tohoto robotu [1]. Toto umožnilo přesné sledování libovolných cest v prostoru, což rozšířilo potenciální možnosti nasazení průmyslových robotů do oblastí jako je například obloukové svařování, nebo montáž, kterou se zabývá právě tato práce. Počet robotů na světě se ke konci roku 2000 přiblížil k jednomu milionu.[8] Ze statistik posledních let vyplývá, že objem výroby průmyslových robotů u největších světových producentů (Japonsko a Německo, USA a Itálie ) po výrazné depresi let 1991 - 1994, začal v roce 1995 opět pozvolna růst a tento trend pravděpodobně potrvá i v příštích letech. Nejvíce robotů pracuje v automobilovém průmyslu, ale i v jiných průmyslových i neprůmyslových oblastech je trend směrovat stále více úkonů na robotické pomocníky. Ať už jsou to roboti vykonávající přesné chirurgické operace nebo automatické meziplanetární sondy.
Strana 15
3 CÍL DIPLOMOVÉ PRÁCE Tato práce je zaměřena na snímání obrazu z kamery a dále na možnosti zpracování tohoto obrazu v počítači. Objekty které jsou z obrazu rozpoznány, jsou převedeny do pracovního prostoru robota a po té pomocí kinematické analýzy a kinematické syntézy je propočítám pohyb robota respektive velikost natočení jednotlivých článků robota. Pro tuto diplomovou práci byla jako kamera zvolena webkamera od firmy Asus. Jedná se o jednoduchou kameru jejíž cena se pohybuje v řádech stokorun. Propojuje se s počítačem pomocí USB rozhranní. Tato kamera byla vybrána proto, že při nasazení ideologie která je popsána v této práci, nemusejí výrobci vynakládat velké finanční prostředky. Dále v této práci je popsán 6-ti osý antropomorfní robot ABB IRB 2400/16-10. Typ IRB je nejpopulárnější průmyslový robot na světě. Jeho robustní konstrukce a použití malého množství dílů přispívá k jeho spolehlivosti a dlouhými intervaly mezi údržbou. Tato práce je rozčleněna do tří větších celků. První z nich obsahuje matematický model transformace souřadnicových systémů při pohybu koncového bodu robota, druhá část se zabývá problémem rozpoznání objektu z obrazu z kamery a poslední část popisuje program pro vizualizaci.
Obrázek 1: Schéma robotu ABB IRB 2400/16-10
Strana 17
4 MATEMATICKÝ MODEL TRANSFORMACE SOUŘADNICOVÝCH SYSTÉMŮ Následující kapitola je rozdělena do několika celků. První z nich je kapitola 4.1 vysvětlující reprezentaci koncového bodu robotu v programu, v kapitole 4.2 následuje popis matematických operací pro vyjádření základních pohybů tohoto bodu. Další kapitola popisuje možné přístupy k pohybu robotu mezi uzlovými body dané trajektorie. Následující kapitola 4.4 popisuje interpolátor robota. Předposlední kapitola 4.5 se zabývá kinematickou analýzou pomocí které je možno vypočítat souřadnice jednotlivých kloubů robota v prostoru a pomocí kinematické syntézy v kapitole 4.6 lze ze známé polohy a orientace koncového bodu odvodit natočení jednotlivých servopohonů robotu.
4.1
Reprezentace koncového bodu
Koncový bod robotu můžeme jednoznačně reprezentovat pomocí homogenní transformační matice NSAP, obsahující informace o poloze a orientaci koncového bodu robotu.
Obrázek 2: Reprezentace koncového bodu pomocí matice NSAP
Strana 18 4 Matematický model transformace souřadnicových systémů
Tuto matici můžeme vyjádřit jako : NX N T= Y NZ 0
SX SY SZ 0
AX AY AZ 0
PX PY PZ 1
kde : →
N=N →
S
T
NY
N Z ………vektor přiblížení
SY
SZ
AX
AY
AZ
PX
PY
PZ
X
= SX
T
→
A= →
P=
T
T
………vektor stisku ………vektor normálový ………vektor polohy koncového bodu
Tato transformační matice může být také vyjádřena jako : →
T=
→
→
→
→
N S A P=R P 0
0
0
1
0
1
kde :
R ………rotační matice P ………polohový vektor souřadného systému koncového →
bodu vzhledem k základnímu souřadnému systému
Při výpočtu natočení koncového bodu robotu používáme právě tuto rotační matici. Při použití homogenní transformační matice bychom vyjádřili transformaci koncového bodu robotu, včetně polohového vektoru tohoto bodu, okolo základního souřadného systému. Ve skutečnosti ale koncový bod sleduje jistou trajektorii, kterou určuje polohový vektor, a nezávisle na tom se dle potřeby natáčí koncový bod. Z tohoto důvodu je vhodnější v programu koncový bod robotu reprezentovat dvěma nezávislými strukturami pomocí této rotační matice R (označené také jako NSA) a polohového vektoru P:
4 Matematický model transformace souřadnicových systémů
NSA = R = N
S
Strana 19
NX
SX
AX
A = NY NZ
SY SZ
AY AZ
a →
P= P
PY
X
PZ
T
Pro správnost všech výpočtů je potom důležité, aby byly jednotlivé vektory ve všech transformačních maticích jednotkové.
4.2 4.2.1
Transformační matice základních pohybů Translační pohyb pomocí transformačních matic [2] Translace ve směru osy X :
1 0 TX = 0 0
0 1 0 0
0 0 1 0
0 1 0 0
0 0 0 y 1 0 0 1
0 1 0 0
0 0 1 0
x 0 0 1
Translace ve směru osy Y :
1 0 TY = 0 0 Translace ve směru osy Z :
1 0 TZ = 0 0
0 0 z 1
Strana 20 4 Matematický model transformace souřadnicových systémů
→
Translace pomocí vektoru V = V X
1 0 T = 0 0
4.2.2
0 1 0 0
VY
T
VZ :
0 VX 0 VY 1 VZ 0 1
Rotační pohyb pomocí transformačních matic [2] Rotace kolem osy X :
1 0 0 0 cos(γ ) − sin (γ ) R X (γ ) = 0 sin (γ ) cos(γ ) 0 0 0
0 0 0 1
cos(γ ) 0 RY (γ ) = − sin (γ ) 0
0 0 0 1
Rotace kolem osy Y :
0 sin (γ ) 1 0 0 cos(γ ) 0 0
Rotace kolem osy Z :
cos(γ ) − sin (γ ) sin (γ ) cos(γ ) RZ (γ ) = 0 0 0 0
0 0 1 0
0 0 0 1
4 Matematický model transformace souřadnicových systémů
Rotace kolem obecné osy dané směrovým vektorem
Strana 21
→
r = [r
rY
X
rZ ] viz. Obrázek 3:
Obrázek 3: Znázornění úhlu a osy rotace a jejího rozkladu do jednotlivých složek rX2 (1 − c ) + c
R(γ ) =
rX rY (1 − c ) + rZ s
r (1 − c ) + c 2 Y
rX rZ (1 − c ) − rY s rY rZ (1 − c ) + rX s 0
kde
4.3
rX rY (1 − c ) − rZ s
0
rX rZ (1 − c ) + rY s
0
rZ2 (1 − c ) + c
0
0
1
rX rZ (1 − c ) − rX s 0
c = cos(γ ), s = sin (γ )
Pohyb mezi uzlovými body
Pro řízení pohybu koncového bodu robotu mezi uzlovými body je možné použít dva přístupy. Pokud nám záleží pouze na zaujmutí určitého bodu v prostoru, bez ohledu na orientaci koncového bodu mezi jednotlivými částmi trajektorie, je možné použít metodu řízení PTP (Point to point). V případě potřeby kontrolovat nejen změnu polohy, ale i orientaci koncového bodu robotu na jednotlivých částech trajektorie, je nutné použít metodu řízení CP (continuous point), která je schopna výpočtu změny orientace koncového efektoru podél celé trajektorie. Tyto změny trajektorie mohou probíhat rotací kolem jedné z os tvořící základní souřadný systém robotu, nebo kolem obecné prostorové osy definované počátkem a bodem v prostoru. Na každé z částí trajektorie jsou většinou předepsány požadavky na rychlost a zrychlení, které se mohou, s ohledem na dodržení jejich spojitosti, v průběhu celé trajektorie měnit. Tyto části navíc nemusí být realizovány pomocí stejných prostorových křivek, v tom případě je ale
Strana 22 4 Matematický model transformace souřadnicových systémů interpolátor robotu nutné vybavit takovými metodami interpolace, aby byl schopen tyto křivky do svých výpočtů zahrnout.
4.4
Interpolátor robota
Hlavním úkolem při řízení robotu je nalezení vztahu mezi polohou a orientací koncového bodu, rychlostí a zrychlením v daném bodě a natočením jednotlivých servopohonů na robotu. Podle taktu regulační smyčky těchto servopohonů lze trajektorii rozdělit na jednotlivé body, které budeme dále nazývat jako body interpolační. V těchto bodech potom pomocí kinematické syntézy dokážeme vypočítat úhly natočení jednotlivých servopohonů robotu právě v okamžicích taktu této regulační smyčky. Počet interpolačních bodů závisí na délce trajektorie, rychlosti a zrychlení podél této trajektorie a samozřejmě taktu regulační smyčky. Interpolací tedy rozumíme proložení pohybové trajektorie, dané dvěma nebo více řídícími body (například v případě kruhového oblouku), interpolačními body, určujícími polohu a orientaci koncového bodu robotu, v závislosti na rychlosti, zrychlení a taktu regulační smyčky. Nejčastěji používané křivky : - přímka - kruhové výseč - spline Od typu křivky se odvozují metody interpolace [2]: - lineární interpolace - kruhová interpolace - B-Splines, Coonsovy kubiky - interpolace DDA - interpolace pomocí přímého funkčního výpočtu - interpolace s inkrementálním odměřováním - interpolace pomocí poměrového řízení
4 Matematický model transformace souřadnicových systémů
4.5
Strana 23
Kinematická analýza
Úkolem kinematické analýzy (přímé úlohy kinematiky) je stanovit ze známých hodnot natočení servopohonů polohu a orientaci koncového efektoru. Kinematické analýzy je v řídícím programu využito k zobrazení robotu v požadované poloze. Kinematickou analýzou se zabývaly již dvě předcházející diplomové práce. Výpočet kinematické analýzy se skládá ze tří částí: – stanovení souřadnicových systémů jednotlivých článků robotu – transformace mezi těmito souřadnicovými systémy – transformace lokálně vyjádřených souřadnic do globálního souřadnicového
4.5.1
Stanovení souřadných systémů jednotlivých článků robota
Obrázek 4: Znázornění souřadných systémů jednotlivých článků robota
systému
Strana 24 4 Matematický model transformace souřadnicových systémů 4.5.2
Matice pro transformaci mezi jednotlivými články robota
Transformace mezi souřadným systémem 1 a 0 je realizována posunutím ve směru osy Z o 175mm a rotací kolem osy Z o úhel γ1 :
cos(γ 1 ) − sin (γ 1 ) sin (γ 1 ) cos(γ 1 ) T10 = 0 0 0 0
0 0 0 0 1 175 0 1
Transformace mezi souřadným systémem 2 a 1 je realizována posunutím ve směru osy Z o 440mm a ve směru osy X o 100mm a rotací kolem osy Y o úhel γ2 :
cos(γ 2 ) 0 T21 = − sin (γ 2 ) 0
0 sin (γ 2 ) 100 1 0 0 0 cos(γ 2 ) 440 0 0 1
Transformace mezi souřadným systémem 3 a 2 je realizována posunutím ve směru osy Z o 705mm a rotací kolem osy Y o úhel γ3 :
cos(γ 3 ) 0 T32 = − sin (γ 3 ) 0
0 sin (γ 3 ) 0 1 0 0 0 cos(γ 3 ) 705 0 0 1
4 Matematický model transformace souřadnicových systémů
Strana 25
Transformace mezi souřadným systémem 4 a 3 je realizována posunutím ve směru osy Z o 135mm a rotací kolem osy X o úhel γ4 :
1 0 0 0 0 cos(γ 4 ) − sin (γ 4 ) 0 T43 = 0 sin (γ 4 ) cos(γ 3 ) 135 0 0 0 1
Transformace mezi souřadným systémem 5 a 4 je realizována posunutím ve směru osy X o 755mm a rotací kolem osy Y o úhel γ5 :
cos(γ 5 ) 0 T54 = − sin (γ 5 ) 0
0 sin (γ 5 ) 755 1 0 0 0 cos(γ 5 ) 0 0 0 1
Transformace mezi souřadným systémem 6 a 5 je realizována posunutím ve směru osy X o 85mm a rotací kolem osy X o úhel γ6 :
1 0 0 85 0 cos(γ 6 ) − sin (γ 6 ) 0 T65 = 0 sin (γ 6 ) cos(γ 6 ) 0 0 0 0 1
4.5.3
Transformace do globálního souřadného systému
Transformace lokálně vyjádřených souřadnic do globálního systému se realizuje jako maticový součin jednotlivých matic T10 až T65 :
T60 = T10 ∗ T21 ∗ T32 ∗ T43 ∗ T54 ∗ T65
Rov. 1
Strana 26 4 Matematický model transformace souřadnicových systémů 4.6
Kinematická syntéza
Kinematická syntéza ( inverzní úloha kinematiky ) řeší problém, jak ze známé polohy a orientace koncového efektoru získat natočení jednotlivých servopohonů robotu. Logicky tak navazuje na úlohu interpolace trajektorie robotu, jejímž výstupem jsou právě body obsahující informace o poloze a orientaci koncového bodu. Za vstupy pro výpočet inverzní kinematické úlohy se považuje: – matice orientace a vektor polohy koncového bodu robotu – kinematické schéma daného robotu – sada konstrukčních parametrů robotu Jedním z úkolů této práce je propojení rozpoznaného obrazu z kamery s kinematickým řetězcem robotu ABB. K tomuto propojení dochází právě pomocí kinematické syntézy, pro jejíž úspěšné řešení potřebujeme znát konstrukční parametry tohoto robotu. Parametry robotu typu ABB IRB 2400/16-10 vidíme na obrázku 1.
4.6.1
Výpočet natočení jednotlivých článků robota
Ve výpočtu je využíváno matematických funkcí standardní knihovny vývojového prostředí Visual Studio 6 math.h. Ta obsahuje funkci atan2, která vrací funkci tg-1 přizpůsobenou danému kvadrantu. Výpočet vychází ze: – stanovení souřadných systémů na robotu – vyjádření polohových vektorů v těchto souřadných systémech – přepočtu do základního souřadného systému robotu
Matice orientace a polohy koncového bodu robota :
Nx N T= y Nz 0
Sx Sy Sz 0
Ax Ay Az 0
Px Py Pz 1
4 Matematický model transformace souřadnicových systémů
Strana 27
Sada konstrukčních parametrů : H1…………175mm H2…………100mm H3…………440mm H4…………705mm H5…………135mm H6…………755mm H7…………85mm 4.6.2
Výpočet natočení γ1
γ 1 = a tan 2(Py − N y ∗ H 7 , Px − N x ∗ H 7 )
Rov. 2
Dále ze známé hodnoty γ1 vypočítáme inverzní matici ( T10 )-1 k matici T10 a tuto matici vynásobíme s maticí T a dostaneme matici T1. Tato matice již neobsahuje natočení γ1 a počátek polohového vektoru je posunut do souřadného systému 1. Tuto matici použijeme dále při výpočtu.
T1 = (T10 ) ∗ T = −1
4.6.3
N 1x
S 1x
A1x
Px1
N 1y
S 1y
A1y
Py1
N 1z
S 1z
A1z
Pz1
0
0
0
1
Výpočet natočení γ2 a γ3
γ3
γ2
Obrázek 5: Znázornění pomocných rozměrů pro výpočet γ2 a γ3
Strana 28 4 Matematický model transformace souřadnicových systémů
(
)
PAZR = Pz1 − H 7 ∗ N 1z − H 3
Rov. 3
PAS = Px1 − H 7 * N 1x − H 2
Rov. 4
X1 =
(H
X2 =
(PAZR
2 6
+ H5 2
2
)
Rov. 5
+ PAS 2
)
Rov. 6
⎛ X 2 + H 4 2 − X 12 ⎞ ⎟ A1 = arccos⎜⎜ 2 ⎟ ⎝ 2 * X 2 * H4 ⎠
Rov. 7
A2 = a tan 2(PAZR, PAS )
Rov. 8
⎛ X 2 + H 42 − X 22 ⎞ ⎟ A3 = arccos⎜⎜ 1 ⎟ ⎝ 2 * X1 * H 4 ⎠
Rov. 9
A4 = a tan 2(H 6 , H 5 )
Rov. 10
A5 = π − A3
Rov. 11
⎛π ⎞ γ 2 = ⎜ ⎟ − A1 − A2
Rov. 12
⎝2⎠
T2 = (T21 ) ∗ T1 = −1
N x2
S x2
Ax2
Px2
N y2
S y2
Ay2
Py2
N z2
S z2
Az2
Pz2
0
0
0
1
Rov. 13
γ 3 = A5 − A4
T3 = (T32 ) ∗ T2 = −1
N x3
S x3
Ax3
Px3
N y3
S y3
Ay3
Py3
N z3
S z3
Az3
Pz3
0
0
0
1
4 Matematický model transformace souřadnicových systémů 4.6.4
Výpočet natočení γ4 Jestliže jinak
(H
5
)
− Pz3 = 0
pak
γ4 = 0
⎛ Py3 ⎞ ⎟ γ 4 = arctan⎜⎜ 3⎟ H P − z ⎠ ⎝ 5
T4 = (T43 ) ∗ T3 = −1
4.6.5
Rov. 14
N x4
S x4
Ax4
Px4
N y4
S y4
Ay4
Py4
N z4
S z4
Az4
Pz4
0
0
0
1
Výpočet natočení γ5
γ 5 = −a tan 2(Pz4 , Px4 − H 6 )
T5 = (T54 ) ∗ T4 = −1
4.6.6
Strana 29
Rov. 15
N x5
S x5
Ax5
Px5
N y5
S y5
Ay5
Py5
N z5
S z5
Az5
Pz5
0
0
0
1
Výpočet natočení γ6
γ 6 = a tan 2(S z5 , S y5 )
T6 = (T65 ) ∗ T5 = −1
Rov. 16
N x6
S x6
Ax6
Px6
N y6
S y6
Ay6
Py6
N z6
S z6
Az6
Pz6
0
0
0
1
Matici T6 již nemusíme počítat, ovšem lze ji použít jako kontrolu zda všechny výpočty proběhly korektně. Jestliže bylo vše v pořádku je matice T6 jednotková.
Strana 30 4 Matematický model transformace souřadnicových systémů
Tímto způsobem vypočítáme natočení jednotlivých servopohonů robota. Tento výpočet se vztahuje konkrétně k tomuto typu robota a na jiný typ nebudou vypočtené výsledky správné. Algoritmem popsaném v předešlé části se vypočítává natočení jednotlivých servopohonů podél celé části trajektorie.
Strana 31
5 ROZPOZNÁVÁNÍ OBRAZU Jedná se o obraz nasnímaný CCD kamerou, televizní kamerou, digitálním fotoaparátem, popřípadě digitalizovaný klasický obrázek pomocí skeneru. Tento obraz však ještě není vhodný pro rozpoznávací algoritmus a proto se musí použít algoritmy pro předzpracování obrazu.
5.1
Základní pojmy
Pro porozumění další části textu je třeba objasnit některé základní pojmy z oblasti počítačového zpracování obrazu.
Obrazem se rozumí obraz sejmutý např. CCD kamerou a má plošnou,
dvojrozměrnou povahu.
Obrazová funkce f (i, j ) je matematický model obrazu kde i a j jsou souřadnice bodu v rovině a hodnotou této funkce je intenzita (jas) tohoto bodu, protože právě intenzita je veličinou, měřenou čidly pro vstup obrazu. V počítačích se nejčastěji pracuje s údaji digitalizovanými ve čtvercovém rastru, proto bývá obrazová funkce reprezentována celočíselnou maticí (matice rastru).
Pixel [3] je nejmenší prvek matice rastru. Má nejčastěji čtvercový tvar. RGB model je počítačová reprezentace barev v obraze. Barva pixelu je tvořena aditivním smícháním tří složek barev: červená R (red), zelená G (green), modrá B (blue). Tyto složky mají intenzitu 〈 0,255〉 . Histogram je jednou ze základních charakteristik obrazu. Histogram jasu je vektor H s počtem složek rovným počtu jasových úrovní. Hodnota každé složky odpovídá četnosti bodů příslušného jasu v obraze. Poskytuje informaci o četnosti výskytu jednotlivých jasových úrovní v obraze. Oblast je taková množina obrazových elementů, že mezi každou dvojici bodů z této množiny existuje cesta patřící celá do této množiny. Oblast je tedy souvislá množina bodů. Hranice oblastí je množina bodů, z nichž každý má alespoň jednoho souseda, který nepatří této oblasti. Šum je vada v obrazu způsobena při snímání, přenosu, nebo zpracování obrazu.
Strana 32 5 Rozpoznávání obrazu
Okolí bodu tvoří obrazové elementy s jednotkou vzdálenosti D4, resp. D8.
Obrázek 6: Okolí bodu D4 ( vlevo) a D8 ( vpravo )
Předzpracování obrazu má za cíl potlačit v obraze šum, nebo zvýraznit určité rysy
v obrazu pro další zpracování.
Segmentace hledá v obraze objekty, které nás z hlediska dalšího zpracování zajímají. Popis nalezených objektů je ovlivněn tím na co se bude popis používat. Používá se
kvantitativní popis pomocí číselných charakteristik a kvalitativní popis pomocí vztahů mezi objekty.
Rozpoznávání se zabývá tříděním objektů, do tříd podle předem známých vlastností. Dělí se na strukturální metody a na příznakové metody.
5.2
Reprezentace údajů v obraze
Mezi vstupním obrazem a jeho modelem (matematickým popisem, interpretací) se definuje několik dalších úrovní reprezentace obrazové informace. Počítačové vidění se potom skládá z návrhu těchto přechodových reprezentací a algoritmů pro jejich vytváření a zavedení vztahů mezi nimi. Reprezentaci obrazů lze podle organizace dat rozdělit do těchto čtyř základních úrovní: Ikonická úroveň reprezentace jsou obrazy, které mají podobu původních obrazových dat (sejmutých kamerou), tj. celočíselné matice s údaji o jasu jednotlivých pixelů. Takové obrazy slouží pro další zpracování. Segmentované obrazy jsou druhou úrovní reprezentace. Části obrazu jsou spojeny do skupin a rozděleny na objekty a pozadí, tak že oblasti patřící pozadí mají hodnotu 0 a oblasti patřící objektům mají hodnotu 1. Dále je možno označit objekty jedinečným číslem a tím odlišit objekty jeden od druhého. Viz barvení objektů.
5 Rozpoznávání obrazu
Strana 33
Geometrický popis objektů je třetí úrovní reprezentace obrazových dat. Tento způsob zachycuje poznatky o tvaru objektů. Tato úroveň je však velmi náročná. Druh geometrické reprezentace je třeba volit s ohledem na konkrétní problém. Relační modely představují čtvrtou a také nejvyšší úroveň reprezentace. Umožňují zpracovávat vyšší úroveň informací, při kterém používají předběžných znalostí řešené úlohy. Jako modely se používají sémantické sítě nebo rámce.
5.3
Předzpracování obrazu
Metody předzpracování obrazu slouží ke zlepšení obrazu z hlediska dalšího zpracování. Cílem předzpracování je potlačit šum vzniklý při digitalizaci a přenosu obrazu, odstranit zkreslení dané vlastnostmi snímacího zařízení, nebo potlačit či zvýraznit jiné rysy důležité z hlediska dalšího zpracování.
5.3.1
Převedení na stupně šedi
Při této operaci dochází k transformaci jedné hodnoty jasu pixelu na jinou bez ohledu na jeho pozici v obraze. Vstupním obrazem této operace je barevný obraz v RGB modelu. Při převodu na stupně šedi se obrazový element přepočítává podle vztahu:
I = 0, 299 × R + 0,587 × G + 0,114 × B
Rov. 17
Kde: I – výsledná intenzita elementu z intervalu 0 až 255. Hodnota 0 odpovídá černé barvě, hodnota 255 pak barvě bílé. Z histogramu obrazové matice se pak stává čistě jasová funkce, která je vhodnější z hlediska zpracování.
5.3.2
Jas a kontrast
Jasové transformace [3] slouží pro korekci jasové funkce, která může obsahovat zkreslení způsobené např. nerovnoměrným osvětlením scény, nestejnoměrnou citlivostí CCD prvku kamery, apod. Korekce jasu se provádí přičtením stejné hodnoty ke všem barevným složkám (např. RGB, CMYK). Při překročení maximální jasové úrovně (intenzity) barevné složky, se nastaví intenzita na maximální hodnotu (255 u 24bit obrazu). Korekce kontrastu se provádí vynásobením všech barevných složek stejnou hodnotou.
Strana 34 5 Rozpoznávání obrazu 5.3.3
Další možnosti předzpracování obrazu
Ekvalizace histogramu - Je jednou z nejpoužívanějších metod na vyrovnání jasových
poměrů v obraze.
Ostření obrazu - Cílem ostření obrazu [3] je upravit obraz tak, aby v něm byly
strmější hrany.
Filtrace - Jako filtrace [3],[4],[5] se označuje skupina transformací, které převádějí
hodnoty jasu vstupního obrazu na jiné jasové hodnoty s cílem zvýraznit nebo potlačit některé jeho vlastnosti. Častým cílem je vyhlazování šumu v obraze, čili potlačení vysokých frekvencí v obraze. Mezi nejpoužívanější druhy filtrace patří tyto filtrace průměrováním. Filtrace průměrováním0,0 je založena na principu výpočtu aritmetického průmeru jasu bodů čtvercového okolí podle předem zadaného konvolučního jádra. Potlačí se tak skvrny šumu menší, než je významný detail v obraze. Podle toho se také volí řád konvoluční masky, který je tvořen lichými čísly 3, 5, 7, nebo 9. Nevýhodou obyčejného průměrování je rozmazávání hran v obraze. Před maskou je násobící koeficient, který normuje masku tak, aby součet koeficientů byl roven 1. Použitá konvoluční maska : ⎡1 1 1⎤ 1⎢ h 3 = ⎢1 1 1⎥⎥ 9 ⎢⎣1 1 1⎥⎦
V této diplomové práci, respektive v aplikaci, která je vytvořena jako součást této práce, je jako metoda předzpracování obrazu implementována filtrace průměrováním. Důvod, proč není použito více metod je v tom , že jako podklad pro snímaný objekt je použita tabule vyrobená speciálně pro tyto účely.
5.4
Segmentace
Segmentováním nazýváme postup, který obraz rozčlení na části, které mají úzkou souvislost s objekty[6].
5 Rozpoznávání obrazu 5.4.1
Strana 35
Práhování
Práhování [3] je nejjednodušší segmentační postup. Vychází ze skutečnosti, že mnoho objektů nebo oblastí obrazu má konstantní odrazivost, či pohltivost povrchu. Pak se může využít určená jasová konstanta (práh) k oddělení objektů od pozadí. Vzhledem k nenáročnosti výpočtu je práhování nejrychlejší segmentační metodou.
Práhování je transformace vstupního obrazu f na výstupní binární obraz g daná vztahem: Rov. 18 g ( i, j ) = 1 pro f (i, j ) > T Rov. 19 g ( i, j ) = 0 pro f (i, j ) ≤ T Kde : T – je předem určená konstanta (práh) a g ( i, j ) = 1 pro obrazové elementy náležející po segmentaci objektům a g ( i, j ) = 0 pro elementy pozadí (nebo naopak) Správné určení prahu má zásadní vliv na výsledek práhování. Hodnotu prahu lze určovat buď interaktivně ve spolupráci s uživatelem, nebo automaticky. V této diplomové práci je hodnota nastavována interaktivně ve spolupráci s uživatelem pomocí standardního posuvníku. Viz. Kapitola 6 Aplikace. V případě že je ve scéně více objektů následuje algoritmus barvení po kterém, každé oblasti odpovídá označení (obarvení) jedinou, v jiné oblasti se nevyskytující hodnotou (barvou).
5.5
Detekce hran
Metody pro detekci hran jsou podrobně popsány v [7]. V aplikaci není použit žádný z těchto hranových detektorů, ale je zde použit můj vlastní hranový detektor. Důvod proč jsem tak učinil je velice prostý. Zjistil jsem že rozpoznat z obrazu hranu objektu, který je vytvořen jako obrázek na počítači není velký problém, protože zde nejsou žádné šumy a obrázek se časem nemění. Ovšem rozpoznat hranu ze snímaného objektu kamerou při horším osvětlení a při snímkovací frekvenci 15 snímků za sekundu, již není jednoduchá úloha a proto jsem chtěl do tohoto problému proniknout hlouběji tuto úlohu se pokusit vyřešit.
Strana 36 5 Rozpoznávání obrazu 5.5.1
Vlastní algoritmus detekce hran
Tento algoritmus se aplikuje na vyfiltrovaný a segmentovaný obraz. V případě že je ve scéně více objektů, které jsou obarveny různou barvou, aplikuje se algoritmus postupně na všechny barvy. Tento algoritmus je vhodný pro detekování hran objektů s přímými hranami např. čtverec, obdélník, n-úhelník a samozřejmě trojúhelník. V případě že objekt má některou z hran kruhovou, tento algoritmus tuto hranu aproximuje přímkami podle zadaných parametrů, kroku a úhlu. Problém detekování hrany z obrazu z kamery je znázorněn na Obrázku 7.
Obrázek 7: Rozdíl hrany mezi obrazem z kamery a ideálním obrazem Jak je vidět na Obrázku 7 hrana z kamery se od ideální hrany dost liší. Při dobrém osvětlení a při použití kvalitní kamery se tento rozdíl může značně zmenšit, ovšem stále tu bude. Jak tedy zjistit že pravý dolní pixel ( v Obrázku 7. vpravo ) je právě vrchol a že jedna hrana zde končí a další začíná. Algoritmus je založený na vektorovém počtu. Algoritmus má za vstupy dva parametry. První je KROK a druhý je ÚHEL. Dále pak pracuje se dvěmi dvou rozměrnými vektory.
5 Rozpoznávání obrazu
Strana 37
Princip hranového algoritmu : 1. Nalezni v obrazu první bod objektu 2. Nastav tento bod jako výchozí bod obou vektorů 3. Pro koncový bod druhého vektoru sleduj hranici objektu vpravo od výchozího bodu o takový počet pixelů, kolik je hodnota prvního parametru ( KROK ) algoritmu 4. Pro koncový bod prvního vektoru sleduj hranici objektu vlevo od výchozího bodu o takový počet pixelů, kolik je hodnota prvního parametru ( KROK ) algoritmu 5. Vypočítej úhel mezi vektory 6. Je odchylka větší než druhý parametr ( ÚHEL ) algoritmu ANO – nalezni vrchol mezi koncovými body vektorů, jako nejvzdálenější bod objektu od koncových bodů vektorů. Tento bod přidej do pole vrcholů. Pokračuj bodem 7 NE – Pokračuj bodem 7 7. Prošlo se při sledování hrany výchozím bodem ANO – Pokračuj bodem 9 NE – Pokračuj bodem 8 8. Nastav počáteční bod druhého vektoru na koncový bod prvního vrcholu a koncový bod druhého vektoru na počáteční bod prvního vektoru. Pokračuj bodem 4 9. Konec
Obrázek 8: Styl hledání vrcholu hranového algoritmu
Strana 38 5 Rozpoznávání obrazu Známe-li přibližně velikost nejmenší hrany objektu, můžeme vhodně nastavit parametry algoritmu. Tím se zkracuje doba výpočtu a máme zaručeno že algoritmus nerozpozná šumy v obraze jako hrany. Výstupem je počet nalezených vrcholů. Pro popis složitějších objektů může být výstup nejen počet vrcholů, ale i směr a jednotlivých hran. Tyto směry je možné využít pro klasifikaci objektů například pomocí řetězcových kódů.
5.6
Popis objektu a klasifikace objektů
Další úrovní rozpoznávání obrazu je popis nalezených oblastí. Popsat tvar objektu je velmi problematické. Potřebujeme nalézt takový popis, který bude invariantní vůči posunu, rotaci a případně i velikosti. Pro popis objektů se nejčastěji používají : - řetězcové kódy - diferenciální řetězcové kódy - momenty objektů - Furierovy deskriptory - ramena objektu - gramatika
Rozpoznávání předmětů [3] spočívá v zařazování předmětů do tříd. Třída je
podmnožina prvků, jejichž prvky mají z hlediska klasifikace společné rysy. Předmět je fyzikální objekt, kterým v počítačovém vidění rozumíme nejčastěji části segmentovaného obrazu. Samotnou činnost klasifikace vykonává klasifikátor. Klasifikátor nerozhoduje o třídě předmětu podle předmětu jako takového, nýbrž podle jeho vjemu. Tento vjem se nazývá obraz (předmětu).
Obrázek 7: Klasifikace objektů
Strana 39
6 APLIKACE Aplikace, která je nedílnou součástí této diplomové práce, je napsána ve vývojovém prostředí Microsoft Visual Studio 6.0, v jazyce C++. Jazyk C++ dodnes zůstává nejrozšířenějším prostředkem pro tvorbu aplikací, počínaje běžnými komerčními aplikacemi a systémy pracujícími v reálném čase konče. Dále je zde využívána knihovna OpenGL.
6.1
Knihovna OpenGL [8][9]
Knihovna OpenGLTM (Open Graphics Library) byla navržena firmou SGI (Silicon Graphics Inc.) jako aplikační programové rozhraní (Application Programming Interface API) k akcelerovaným grafickým kartám resp. celým grafickým subsystémům. Předchůdcem této knihovny byla programová knihovna IRIS GL (Silicon Graphics IRIS Graphics Library). OpenGL byla navržena s důrazem na to, aby byla použitelná na různých typech grafických akcelerátorů a aby ji bylo možno použít i v případě, že na určité platformě žádný grafický akcelerátor není nainstalován - v tom případě se použije softwarová simulace. V současné době lze knihovnu OpenGL použít na různých verzích unixových systémů (včetně Linuxu a samozřejmě IRIXu), OS/2 a na platformách Microsoft Windows. Logo OpenGL a název OpenGLTM je registrovaná známka firmy Silicon Graphics Inc. Programátorské rozhraní knihovny OpenGL je vytvořeno tak, aby knihovna byla použitelná v téměř libovolném programovacím jazyce. Primárně je k dispozici hlavičkový soubor pro jazyky C a C++. V tomto souboru jsou deklarovány nové datové typy používané knihovnou, některé symbolické konstanty (např. GL_POINTS) a sada cca 120 funkcí tvořících vlastní rozhraní. Existují však i podobné soubory s deklaracemi pro další programovací jazyky, například Fortran, Object Pascal či Javu; tyto soubory jsou většinou automaticky vytvářeny z Cčkovských hlavičkových souborů. Z programátorského hlediska se OpenGL chová jako stavový automat. To znamená, že během zadávání příkazů pro vykreslování lze průběžně měnit vlastnosti vykreslovaných primitiv (barva, průhlednost) nebo celé scény (volba způsobu vykreslování, transformace) a toto nastavení zůstane zachováno do té doby, než ho explicitně změníme. Výhoda tohoto přístupu spočívá především v tom, že funkce pro vykreslování mají menší počet parametrů a že jedním příkazem lze globálně změnit způsob vykreslení celé scény, například volbu drátového zobrazení modelu (wireframe model) nebo zobrazení pomocí vyplněných polygonů (filled model). Vykreslování scény se provádí procedurálně - voláním funkcí OpenGL se vykreslí výsledný rastrový obrázek. Výsledkem volání těchto funkcí je rastrový obrázek uložený v tzv. framebufferu, kde je každému pixelu přiřazena barva, hloubka, alfa složka popř. i další atributy. Z framebufferu lze získat pouze barevnou informaci a tu je možné následně zobrazit na obrazovce viz Obrázek 8.
Strana 40 6 Aplikace
Obrázek 8: Vykreslování scény v OpenGL OpenGL nezaručuje, že při spuštění identického programu používajícího knihovnu OpenGL na různých platformách nebo různých grafických akcelerátorech dostaneme vždy přesně stejný výsledek. Pokud bychom oba výsledné rastrové obrázky porovnali pixel po pixelu, mohli bychom zjistit mírné rozdíly v barvách. Může to být způsobeno například odlišnou přesností reprezentace čísel na grafické kartě, odlišnými algoritmy pro interpolaci barvy, normály a texturových souřadnic nebo jinou bitovou hloubkou Z-bufferu. Celkové geometrické a barevné podání scény by však mělo být zachováno. Pomocí funkcí poskytovaných knihovnou OpenGL lze vykreslovat obrazce a tělesa složená ze základních geometrických prvků, které nazýváme grafická primitiva. Mezi tato primitiva patří bod, úsečka, trojúhelník, čtyřúhelník, plošný konvexní polygon, bitmapa (jednobarevný rastrový obraz) a pixmapa (barevný rastrový obraz). Existují i funkce, které podporují proudové vykreslování některých primitiv - lze například vykreslit polyčáru (line loop), pruh trojúhelníků (triangle strip), pruh čtyřúhelníků (quad strip) nebo trs trojúhelníků (triangle fan). Na vrcholy tvořící jednotlivá grafická primitiva lze aplikovat různé transformace (otočení, změna měřítka, posun, perspektivní projekce), pomocí kterých lze poměrně jednoduše vytvořit animace. Vykreslovaná primitiva mohou být osvětlena nebo pokryta texturou. 6.2
Objektově orientované programování
Vývojové prostředí Microsoft Visual Studio 6.0 plně využívá možností vycházejících z jazyka C++, který byl vytvořen právě jako objektově orientované rozšíření oblíbeného programovacího jazyka C. Při objektově orientovaném přístupu se program se skládá z množství individuálních jednotek, objektů, což kontrastuje s tradičním pojetím programu, který není o mnoho více, než seznam instrukcí pro procesor počítače. Každý objekt je schopen zpracovávat data a posílat a přijímat zprávy od dalších objektů. Tato modularita zvyšuje flexibilitu, zjednodušuje provádění pozdějších změn v programu a umožňuje programu lépe korespondovat s reálnými aspekty problému a tak lépe modelovat problémy vyskytující se ve skutečném světě.
6 Aplikace
Strana 41
Hlavními rysy objektově orientovaného programování jsou:
– zapouzdření (encapsulation) - Zaručuje, že objekt nemůže přímo přistupovat k obsahu jiných objektů, což by mohlo vést k nekonzistenci. Každý objekt potom navenek zpřístupňuje rozhraní, pomocí kterého se s objektem pracuje. – dědičnost (inheritance) – umožňuje definici objektu jako specializovaného případu nějakého stávajícího objektu. Tento specializovaný objekt může sdílet a rozšiřovat možnosti objektu stávajícího. –
6.3
polymorfismus (polymorphism) – odkazovaný objekt se chová podle toho, jaký je jeho skutečný typ. Pokud několik objektů poskytuje stejné rozhraní, pracuje se s nimi stejným způsobem, ale jejich konkrétní chování se může lišit. Toto může probíhat i za běhu programu, kdy se až podle typu odkazovaného objektu určí, kterou metodu použijeme.
Popis aplikace
Aplikace je rozdělena na dvě základní okna. Levé okno zobrazuje snímaný obraz z kamery a pravé okno slouží pro zobrazení robota a jeho animaci. Pod každým oknem je skupina standardních ovládacích prvků , které mohou měnit jisté parametry. Dále je zde základní menu, které rozšiřuje možnosti programu. Základní vzhled aplikace je vidět na Obrázku 9.
Obrázek 9: Hlavní okno aplikace
Strana 42 6 Aplikace
Aplikace se skládá z těchto modulů : Modul pro ovládání aplikace
•
3D_robot_main.cpp – zde jsou funkce, které zajišťují chod aplikace, zpracovávají zprávy od systému nebo uživatele a zajišťuje vytvoření a destrukci ostatních objektů
Modul pro práci s obrazem
• •
3D_robot_obraz.cpp – obsahuje funkce pro práci s obrazem, jako je práhování, nalezení objektu a podobně 3D_robot_obraz.h – funkční prototypy těchto funkcí
Modul pro práci s robotem
• •
3D_robot_robot.cpp – implementuje metody třídy Robot a definuje konstrukční parametry robota 3D_robot_robot.h – definuje třídu Robot
Modul pro OpenGL
• •
3D_robot_OpenGL.cpp – obsahuje funkce knihovny OpenGL, inicializuje OpenGL, zajišťuje vykreslování robota a obrazu z kamery 3D_robot_OpenGL.h – funkční prototypy funkcí pro OpenGL
Modul pro pohled na robota
• •
3D_robot_ArcBall.cpp – implementuje metody tříty ArcBall 3D_robot_ArcBall.h – definuje třídu ArcBall, která zajišťuje plynulou rotaci robota pomocí myši
6 Aplikace
Strana 43
Obrázek 10: Schéma propojení jednotlivých modulů
6.3.1
Levé okno
Jak již bylo zmíněno dříve levé okno slouží k zobrazení obrazu z kamery. Kamera, která je použita v této diplomové práci, je webkamera od firmy ASUS. Tato webkamera je dodávaná ke grafickým kartám této firmy zdarma. Jedná se tedy o výrobek, jehož cena se pohybuje okolo 200 korun. Samozřejmě její parametry nejsou špičkové, ovšem i z relativně špatným vstupem z této kamery se dá dosáhnout dobrých výsledků. Pro zobrazení obrazu se využívá modulu pro práci s obrazem a samozřejmě některých funkcí OpenGL.
Strana 44 6 Aplikace
Obrázek 11: Webkamera firmy Asus Tato kamera dokáže zachytávat obraz od rozlišení 160x120 po 640x480 při rychlosti snímkování 15 obrázků za sekundu. Ostření obrazu je manuální. Dokáže i zachytávat zvuk, ovšem ten pro naše použití není důležitý. Dále jsem pro účely této diplomové práce zhotovil tabuli pro vystavení objektu při snímání a jeho posouvání či rotaci bez toho aniž by člověk musel zasahovat do scény viz. Obrázek 11. Toho bylo dosaženo pomocí magnetů. Na přední snímané scéně tabule je objekt , který má na své spodní straně nalepenu dvojici tenkých magnetů. Na zadní straně tabule je také dvojice magnetů, které jsou situovány tak aby se každá dvojice magnetů přitahovala přes tenkou stěnu tabule. Magnety na zadní straně tabule jsou umístěny v dřevěném obalu a tvoří tak neoddělitelný celek. To má za následek že při pohybu dřevěným obalem po zadní ploše tabule se pohybuje i objekt po přední snímané straně tabule, aniž bychom rušili snímanou scénu.
Obrázek 12: Přední a zadní strana tabule
6 Aplikace
Strana 45
Obrázek 13: Princip polohování objektu V aplikaci je standardně nastaveno rozlišení 640x480 pixelů. S počítačem se kamera propojuje kabelem s koncovkou USB. Aplikace se s kamerou propojí využitím funkcí capCreateCaptureWindow() a capDriverConnect(), které jsou implementovány ve standardní knihovně operačního systému Windows vfw.h. Po úspěšném volání těchto funkcí dostává aplikace blok dat. Tento blok dat má charakter jednorozměrného pole typu byte. Jedná se o proměnnou o velikosti 8 bitu neboli 1 Bytu o rozsahu 0-255. Jeden pixel obrazu je reprezentován 3. složkami ( R G B). Toto značí intenzitu červené ( red ), zelené ( green ) a modré ( blue ) složky obrazu. Každá složka může nabývat hodnoty 0-255. Proto je zde vhodné tyto složky ukládat to proměnných typu byte. Velikost pole je tedy dáno vzorcem :
velikost = rolisenX ∗ rozliseniY ∗ 3
Rov. 20
Tento blok dat dostává aplikace dle nastavené hodnoty frekvence. Základně je tato hodnota nastavená na 15 snímků za sekundu. Aplikace je po té zodpovědná za všechny transformace vstupního obrazu. Na tento obraz, který je již uložen v paměti počítače, můžeme aplikovat algoritmy popsané v Kapitole 5. Při použití tabule, kde je jasně definované pozadí a sledovaný objekt, můžeme některé z algoritmů popsané v Kapitole 5 vynechat. Jedná se především o algoritmy pro předzpracování obrazu. Toho je využito v této aplikaci. Jelikož
Strana 46 6 Aplikace z kamery dostává aplikace obraz barevný, je první algoritmus, který se aplikuje na obraz práhování. Hodnotu prahu je v aplikaci možno nastavit posuvníkem pod levým oknem.
Obrázek 14: Poloha posuvníku pro změnu hodnoty prahu Obraz po přepočítaní tímto algoritmem je již pouze dvou barevný. Černá barva odpovídá pozadí a bílá odpovídá objektu. Takto připravený obraz je zpracován implementovaným hranovým algoritmem. Výstupem z tohoto algoritmu je počet nalezených vrcholů. V této diplomové práci je hlavním úkolem nalézt trojúhelník, proto výstup ve formě počtu bodů je dostačující. V případě, že bychom chtěli rozpoznávat objekty abstraktnějších tvarů, výstup z tohoto algoritmu by byl rozhodně složitější. Opět parametry tohoto algoritmu může uživatel měnit pomocí dvou posuvníků. Změnou těchto parametrů můžeme optimalizovat algoritmus pro lepší nalezení objektu.
Obrázek 15: Poloha posuvníků pro změny hodnot hranového algoritmu
6 Aplikace
Strana 47
Tyto nalezené body jsou zobrazeny v levém okně jako malé červené čtverečky. V případě, že byly nalezeny tři body, neboli byl rozpoznán trojúhelník, je z těchto bodů vypočítán počátek a orientace souřadného systému. Počátek je umístěn do těžiště a orientace se stanoví tak, že směr osy Y ( S ) je rovnoběžný s nejkratší stranou trojúhelníka. Směr osy Z ( A ) je kolmý na osu Y ( S ) a kladná hodnota této osy směřuje k protilehlému bodu nejkratší strany. Poslední osa X ( N ) je samozřejmě kolmá na tyto dvě předcházející osy. Směr osy Y ( S ) je v levém okně znázorněn červenou úsečkou a směr osy Z ( A ) je znázorněn zelenou úsečkou. Osa X ( N ) zde znázorněna není protože je kolmá ke snímané ploše. Obraz v levém okně můžeme přepínat mezi zobrazením skutečného obrazu, neboli barevného, a nebo zobrazením již práhovaného obrazu. Toto přepnutí se provádí pomocí položky Zobraz reálný obraz pod položkou Pohled ve hlavním menu. V případě, že snímaný objekt máme, pomocí hodnoty prahu a hodnot pro hranový detektor, vyladěn tak, že nedochází k žádným šumům, můžeme tento objekt propojit s robotem. Učiníme tak zapnutím položky Referenční trojúhelník z kamery v položce Reference v hlavním menu. Po tomto kroku se přepočítají hodnoty souřadnic nalezených vrcholů ze souřadnic dvou rozměrných do souřadnic tří rozměrných a umístí se do pracovního prostoru robota. Dále se zobrazí na pracovním stole robota v pravém okně a nahradí se jím objekt, který se zadává ručně. Teď je propojení robota se snímaným obraze hotové. V případě pohybu snímaného objektu se pohybuje i objekt na pracovním stole robota. V kterékoliv chvíli můžeme animovat pohyb robota.
6.3.2
Pravé okno
Pravé okno slouží k zobrazení a animaci 6-ti osého robota. Pro tuto diplomovou práci byl vybrán ABB IRB 2400/16-10. Typ IRB je nejpopulárnější průmyslový robot na světě. Jeho robustní konstrukce a použití malého množství dílů přispívá k jeho spolehlivosti a dlouhými intervaly mezi údržbou.
Obrázek 16: 6-ti osý robot ABB IRB 2400/16-10
Strana 48 6 Aplikace
Pro zobrazeni tohoto robota je využito opět knihovna OpenGL. Knihovna OpenGL slouží k zobrazení základních primitiv jako je bod, úsečka, trojúhelník a anebo n-úhelník. Každý složitější objekt, který chceme zobrazit je složen z těchto základních primitiv. Pro zobrazení například krychle, kvádru nebo jehlanu můžeme jednotlivé body zadávat ručně. Ovšem zadávat ručně složitější objekty jako je tento robot, který se stává z několika tisíců bodů není příliš chytré. Například podstava tohoto robota se skládá z 5782 trojúhelníků. Data pro takto složité objekty se již musejí nacházet v samostatných souborech vhodného formátu. Pro získání takového souboru vede několik cest. Podle mého názoru je nejschůdnější cesta využít nějakého CAD softwaru. Tyto CAD softwary jsou specializované na konstruování a modelování různých součástí. Příklady CAD softwarů :
• • • • • •
SolidWorks Unigraphics ProEngineer Catia Autodesk invertor SolidEdge
Právě tyto softwary umožňují převést model do vhodného formátu souboru. Původně jsem chtěl celého robota namodelovat sám. Ovšem při procházení webových stránek firmy ABB jsem našel odkaz na již namodelované modely. Tyto modely jsou volně ke stažení. Využil jsem software SolidWorks pro převod těchto modelů ze standardního formátu *.igs do formátu *.stl. Formát stl jsem si zvolil záměrně kvůli jeho jednoduchému formátu souboru. Jelikož tyto softwary jsou cenově velmi náročné, hledal jsem firmy pro jeho zapůjčení. Tento software mi zapůjčila firma Technoservice s.r.o. ze Žďáru nad Sázavou. Tyto stl soubory jsou na CD, které je součástí této diplomové práce. Knohovna OpenGL samozřejmě neobsahuje funkce pro načítání modelů se souboru typu stl, proto jsem vytvořil vlastní funkci, která překonvertuje data ze souboru stl do formátu OpenGL. Při zavádění aplikace je tato funkce volána a s pomocí funkce glNewList() knihovny OpenGL předkompiluje všechny části robota a uloží jej do paměti. Po té při nutnosti vykreslit robota do scény je vykreslován z paměti počítače což má za následek výrazné zvýšení výkonu. Ve scéně je společně s robotem umístěn i pracovní stůl a pro větší názornost i kamera pro znázornění zorného úhlu kamery. Zorný úhle je znázorněn světle modrým poloprůhledným jehlanem. Pro simulaci pohybu robota slouží 6 posuvníků pod pravým oknem. Každý posuvník slouží k ovládání jednoho servopohonu. Při polohování těmito posuvníky se simuluje pohyb příslušného servopohonu a robot se plynule pohybuje. Pod pravým oknem je též matice NSAP koncového bodu robota. Tato matice informuje o natočení a poloze tohoto bodu v jakékoliv poloze.
6 Aplikace
Strana 49
Obrázek 17: Ukázka natočení servopohonu robota Při ručním polohování těžko můžeme najet na referenční polohu, danou trojúhelníkem, přesně. Pro přesné polohování robota jsou určeny tři položky v záložce Robot v hlavním menu. Jedná se o položky : • Reset robota – vynuluje všechna natočení servopohonů
•
Referenční poloha – pomocí kinematické syntézy se vypočítají úhly natočení jednotlivých částí pro dosažení referenční polohy a robot se zobrazí v této poloze
•
Referenční poloha ( ANIMACE ) - pomocí kinematické syntézy se vypočítají úhly natočení jednotlivých částí pro dosažení referenční polohy s animací trajektorie robota
Strana 50 6 Aplikace
Referenční polohu, danou trojúhelníkem, je možno změnit buďto pohybem snímaného objektu kamerou, je-li zatržená volba Referenční trojúhelník z kamery v položce Reference v hlavním menu. Není- li tato volba zatržena je možno referenční trojúhelník zadat ručně pomocí dialogu. Tento dialog se vyvolá volbou Zadej referenční trojúhelník s položky Reference v hlavním menu.
Obrázek 18: Dialog pro zadání referenčního trojúhelníka Zde je možné zadat každému vrcholu souřadnice X,Y a Z. Po potvrzení tohoto dialogu se bude kinematické syntéza vypočítávat na tento nově zadaný trojúhelník. A samozřejmě se nová poloha zobrazí v pravém okně.
6.4
Třída ArcBall
Při návrhu této aplikace jsem se zabýval myšlenkou jak zobrazit robota v co nejpříjemnějším rozhraním pro uživatele. Nejprve jsem definoval jeden pohled na celou scénu z takové dálky aby byly viditelné všechny prvky. Pro demonstrační účely zda se robot chová správně toto zobrazení stačilo. V případě že byl referenční trojúhelník natočen nevhodně nebyly viditelné všechny detaily. Proto jsem okno rozdělil na čtyři části a v každé z těchto částí byl jiný pohled na scénu. Opět to byl krůček kupředu, ale ještě jsem cítil že to není ono. Sice bylo na scéně vidět vše, ale na úkor velikosti. Další inspiraci jsem našel v CAD softwarech. Jmenovitě v softwaru SolidWorks se kterým jsem se seznámil při přípravě modelů robota. V tomto softwaru je pouze jediné okno, ovšem ve kterém má uživatel naprostou volnost
6 Aplikace
Strana 51
pohybu s modelem. Tato volnost je dána zvětšováním detailů, posouváním modelu po obrazovce a hlavně natáčení modelu pomocí myši technikou zvanou Drag-Drop. Toto mě přivedlo na myšlenku implementovat tuto volnost i do mé aplikace. Jako první mě napadla myšlenka zdali tuto volnost neumožňuje knihovna OpenGL sama. Samozřejmě, že knihovna nabízí možnost rotace nebo posun modelu, ovšem přes mnou definované osy. A tyto osy bylo potřeba nejprve vypočítat. Pak jsem objevil funkci glLookAtPoint() knihovny OpenGL. Její parametry jsou :
• • •
6.4.1
Bod kde je umístěna kamera Bod na který se kamera dívá Vektor vertikální osy pro polohu kamery
Matematický aparát pro ArcBall
Základní myšlenka je jak dvou rozměrné souřadnice definované pomocí pozice myši převést na souřadnice třírozměrné. Jedná se tedy o virtuální pohyb dvou na sebe kolmých vektorů, tvořící rovinu tečnou k povrchu koule. Na tečné rovině je realizován pohyb kurzoru myši a na kouli je pak tento pohyb promítnut.
Obrázek 19: Pohyb po povrchu koule
Strana 52 6 Aplikace Využívá se zde vektorový počet. Známe-li polohu středu koule, vypočítaný bod na kouli a vertikální vektor, tak toto můžeme dosadit jako parametry funkce glLookAtPoint(). Změnou polohy středu koule dosáhneme posunu scény po obrazovce, změnou poloměru koule dosáhneme přibližování a oddalování scény a změnou polohy bodu na povrchu koule dosáhneme rotaci scény. Pro tyto účely je zde definovaná třída ArcBall. Třída je definovaná v souboru 3D_robot_ArcBall.h a její metody jsou obsaženy v souboru 3D_robot_ArcBall.cpp. Takto definovaná je použitelná v jakékoliv aplikaci využívající knihovnu OpenGL. Stačí před vykreslením scény zavolat metodu ArcBall::PrepocitejVektory() a potom tyto vypočítané vektory použít pro vykreslení. Pro ovládání scény v pravém okně slouží standardní tří tlačítková myš s kolečkem. V případě že u počítače není myš s kolečkem můžeme použít klávesnici. Pro pohled na scénu je možnost využít čtyř přednastavených pohledů, horní, boční, přední a axonometrický.
Strana 53
7 ZÁVĚR Hlavní přínos této diplomové práce vidím v propojení reálného světa s řízením šestiosého robota. Toto propojení je možné realizovat za velmi malých finančních investic. Ovšem přínos například při montáži je obrovský. Při výkonech dnešních počítačů je možné v reálném čase rozpoznávat objekty z kamer o vysokých rozlišeních a proto určení polohy objektu může být dost přesné. Tato práce může sloužit jako odrazový můstek do tohoto doposud ještě ne moc prozkoumaného světa. V případě použití jedné kamery ke snímání objektů jsme limitovaní tím, že nejsme schopni přesně rozpoznat objekty ve třírozměrném prostoru. Ale v případě použití dvojice kamer, vhodně umístěných ( simulujících lidské oči ), je možné rozpoznat objekty libovolně umístěné v prostoru. K tomuto je ovšem nutné najít vhodný matematický aparát. Rozpoznávání objektů pomocí počítačů nemusí sloužit pouze k řízení tří, čtyř nebo šestiosých robotů, ale je možné je využít i pro obecnější činnosti. Například jako pomocníka rehabilitacích. Jako budoucnost v tomto oboru vidím v největším lákadle jak propojit reálný svět s nějakou kinematickou strukturou. Jedná se samozřejmě o vytvoření samostatné „myslící“ jednotky, která se v našem světe bude pohybovat svépomocí. A této jednotce je třeba darovat zrak.
Strana 55
SEZNAM POUŽITÉ LITERATURY [1]
History of industrial robotics, Wikipedia, http://en.wikipedia.org/wiki/Industrial_robot
[2]
TESAŘ, M.: Software pro řízení pohybové trajektorie průmyslových robotů, Diplomová práce, VUT-FSI, Brno, 2004
[3]
HLAVAČ V., ŠONKA M.: Počítačové vidění, Grada, Praha 1993
[4]
ŽÁRA J., BENEŠ B., FELKEL P., Moderní počítačová grafika, Computer Press, Praha 1998
[5]
SOCHOR J., ŽÁRA J., BENEŠ B., Algoritmy počítačové grafiky, ČVUT, Praha 1998
[6]
KOTEK Z., MAŘÍK V. a kol., Metody rozpoznávání a jejich aplikace, Academia, Praha 1993
[7]
Málek M., Programový systém pro rozpoznávání objektů [Diplomová práce], Brno, VUT FSI 2002
[8]
Grafická knihovna OpenGL, Root, http://www.root.cz/clanky/graficka-knihovna-opengl-1
[9]
Segal M., Akeley K.: "The OpenGLTM Graphics System: A Specification (Version 1.2.1)", Silicon Graphics, Inc., 1999
Strana 57
SEZNAM PŘÍLOH
CD-ROM disk obsahující řídící program, jeho zdrojové texty a dokumentaci v elektronické podobě.