Diplomamunka Léptetőasztal alatt elhelyezett építőelemek felismerése és robotkarral történő manipulációja
Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Műszaki informatika szak
Gelencsér Zsolt
Konzulens: Dr. Cserey György
2010
Nyilatkozat Alulírott Gelencsér Zsolt a Pázmány Péter Katolikus Egyetem Információs Technológiai Karának hallgatója kijelentem, hogy ezt a diplomatervet meg nem engedett segítség nélkül, saját magam készítettem, és a diplomamunkában csak a megadott forrásokat használtam fel. Minden olyan részt, melyet szó szerint, vagy azonos értelemben, de átfogalmazva más forrásból átvettem, egyértelműen a forrás megadásával megjelöltem. Ezt a Diplomamunkát más szakon még nem nyújtottam be. Budapest, 2010. május 16. ................................................ aláírás
2.
Tartalomjegyzék Tartalmi összefoglaló ......................................................................... 5 Abstract ............................................................................................... 6 Feladatkiírás ....................................................................................... 7 1. Ipari robotika ................................................................................ 8 1.1 Ipari robotika rövid története ...................................................... 8 1.2 Objektummozgatás ..................................................................... 9 1.2.1 Manipulátor típusok ........................................................... 10 1.2.2 Aktuátorok ........................................................................ 11 1.2.3 Effektorok, megfogó eszközök ............................................. 13 1.2.4 Feladat végrehajtás ............................................................ 13 1.3 Szenzori és képi jelfeldolgozás .................................................... 15 1.3.1 Szenzori jelek feldolgozása .................................................. 15 1.3.2 Képi jelek feldolgozása ....................................................... 16 1.4 Automatizált téglaházépítés ....................................................... 17 2. Előzmények .................................................................................. 18 2.1 Probléma megoldást segítő cikkek és könyvek .............................. 18 2.2 Felhasznált szoftverek ................................................................. 19 3. Használt Hardverek ..................................................................... 20 3.1 PowerCube ................................................................................ 20 3.1.1 CAN-busz ............................................................................ 20 3.1.2 PowerCube tulajdonságai ..................................................... 21 3.1.3 Munkatér ............................................................................ 22 3.2 Szenzorok .................................................................................. 23 4. A szoftver ...................................................................................... 24 4.1 Léptetőasztal irányítása .............................................................. 24 4.2 Webkamera kezelés .................................................................... 25 4.3 Hálózati kommunikáció .............................................................. 25 4.3.1 Hálózati szerver ................................................................... 26 4.3.2 Léptetőasztal irányító kliens ................................................. 27 4.3.3 Kommunikációs protokoll .................................................... 28 4.4 Grafikus felhasználói felület ........................................................ 29 4.5 Képfeldolgozó modul .................................................................. 32 4.6 Automatizált algoritmusok .......................................................... 33 4.6.1 Önálló építőelem keresés és felismerés ................................... 33 3.
4.6.2 Kommunikáció a tervező programmal ................................... 33
5. Objektum felismerés .................................................................... 35 5.1 Építőelemek ............................................................................... 35 5.2 Keresési módszer ........................................................................ 35 5.3 Alaplépések ................................................................................ 36 5.4 Képfeldolgozási algoritmusok ...................................................... 37 5.4.1 Munkatér feltérképezése....................................................... 37 5.4.2 Objektumosztályozás ........................................................... 38 6. Értékelés, mérési eredmények ..................................................... 41 6.1 Pixel milliméter átváltás .............................................................. 41 6.2 Építőelemek megtalálása ............................................................. 42 6.2.1 Egy felderítési eredmény ...................................................... 43 6.3 Építőelemek osztályozása ............................................................ 45 6.3.1 osztályozási eredmények ....................................................... 46 6.4 Továbbfejlesztési lehetőségek ...................................................... 48 Összefoglalás ...................................................................................... 49 Köszönetnyilvánítás .......................................................................... 50 Irodalomjegyzék ................................................................................ 51 Ábrajegyzék ....................................................................................... 52 Mellékletek ......................................................................................... 53
4.
Tartalmi összefoglaló Az elektronikai eszközök használata mára szinte teljesen természetessé vált az élet minden területén. Ezek a berendezések gondolkozás nélkül hajtják végre az emberek konkrét utasításait. Az elmúlt években azonban kezdenek elterjedni a bonyolult döntési képességgel bíró, önállóan is munkavégzésre képes eszközök. Legelőször az iparban használt robotok lettek alkalmasak összetettebb feladatok teljesítésére, mivel ebben az esetben lehetett biztosítani az ideális körülményeket a műveletek elvégzéséhez. Napjainkban azonban a robotokat már nem csak ideális környezetben, a gyár falain belül szeretnék használni, hanem a környezeti hatásoknak kitett problémák megoldásához is. Ezek a gépek ugyan kevesebb művelet elvégzésére képesek, de bármilyen körülmények között végre tudják hajtani a feladatukat, mivel fejlett alkalmazkodó képességgel rendelkeznek. A téglából épített ház elkészítésének automatizálása során az ipari robotika által használt eszközöket és algoritmusokat tudjuk használni, de ezeknek tovább fejlesztett változataira van szükségünk, hogy a változó környezetben is megfelelő módon tudják megoldani a problémát. A fejlesztések elvégzésének egyik fontos feltétele az alapul vett ipari alkalmazások pontos ismerete. Ezért tanulmányoztam az iparban használt objektummozgatási módszereket és egy léptetőasztal (állványos felépítésű, három lineáris mozgássíkkal rendelkező robotkar) segítségével először kis méretekben foglalkoztam a téglaházépítés kihívásaival. Ezen összetett feladat megismeréséhez nem egyedül láttam neki, hanem kollégám, Hiba Antal segítségével. A tervezési feladatokat két részre osztottuk. Nekem jutott a léptetőasztalon elhelyezett robotkar vezérlésének megoldása és a rendelkezésre álló építőelemek felderítését végző algoritmus megtervezése és implementálása.
5.
Abstract Nowadays the usage of the electronics devices became natural on all areas of life. These equipments execute the instructions of the users without thinking. In the past years devices with complex decision ability and with capability of autonomous work started to be current. First industrial robots became suitable for executing more compound tasks, because in that case it was possible to guarantee an ideal environment for the accomplishment of the operations. Nowadays a robot is not only expected to operate when ideal conditions are given, inside the factory, but also outside, where it is exposed to environmental effects. These machines are capable of accomplishing less operation, but they can execute their task under
extreme circumstances, since they have advanced adaptability. We can use the devices and algorithms of industrial robotics in the challenge of the automation of house-building of brick, but we need to advance them, to be able to solve problems in changing environment. It is an important requirement of upgrading, to be familiar the industrial applications. That is why I studied the industrial object moving, and I dealt with the challenges of the brick house-building in small size with the help of a plotterstage (stand build-up, tree linear motion planed robot arm). I didn’t try to get acquainted with this complex challenge alone, but with my colleague, Antal Hiba. We divided the task into two parts. My task was to solve the control of the robot arm, and I had to design and implement an algorithm to explore the available construction elements.
6.
Feladat kiírás A feladatom az volt, hogy tanulmányozzam az ipari robotika objektum mozgatásával kapcsolatos területét, és megismerkedjem az ehhez kapcsolódó szenzori és képfeldolgozási feladatok lehetséges megoldásaival, majd ezeket felhasználva egy léptetőasztalt irányító szoftvert írjak, amely képes a rendelkezésre álló építőelemek építési terv szerinti elhelyezésére. Először egy a léptetőasztalt biztonságosan vezérelni tudó programot kellett írnom, amely segítségével mozgathattam a robotkart. A későbbiekben ezt tovább kellett fejlesztenem, hogy hálózati interfészen keresztül távoli gépről is irányítható legyen a manipulátor. Ezután terveznem kellett egy olyan objektum felismerő algoritmust, amely a beavatkozón található web kamera és távolságmérő-szenzor segítségével képes a léptetőasztal alatti terület felderítésére, az ott elhelyezett, megadott építőkészletből származó építőelemek számának, típusának és helyzetének feltérképezésére, és ezen adatok további feldolgozó rendszerek számára történő interfészelésére. Az
implementált
algoritmusomat
kísérlettekkel
kellett
tesztelnem,
melyben
megvizsgáltam az objektum felismerés hatékonyságát változó fényviszonyok között és az eredményeket kiértékelnem.
7.
1. Ipari robotika Az ipari robotika az iparban használt automatizált berendezésekkel foglalkozó mérnöki tudomány. Az ipari robot egy olyan irányított mechatronikai struktúra vagy manipulátor, amely merev szegmensek sorozatából áll, melyeket összeillesztések kapcsolnak össze, előírt pályán mozognak és a pálya mentén vagy annak meghatározott pontjaiban előírt feladatokat látnak el végberendezéseik (effektor) segítségével. Működés szempontjából két nagy csoportra oszthatjuk az ipari termelésben használt, önálló munkavégzésre alkalmas eszközöket: ipari manipulátorok és ipari robotok.
Ipari manipulátor Az ipari manipulátorok lényegében áthelyező, mozgató berendezések. Programjaik egyszerű, fix algoritmusok, a vezérlés egyetlen mozgásciklus végrehajtására alkalmas. A mozgások egymásutánisága merev program szerint fut le és mechanikus behatás nélkül nem változtatható meg. Az irányító program semmilyen visszajelzést nem kap a végzett munka sikerességéről, mivel nem rendelkezik érzékelőkkel. Ilyen irányítórendszerek a pneumatikus logikákkal megvalósított és a huzalozott relés logikára épülő vezérlések. Programozásuk tehát meglehetősen kényelmetlen. Csak statikus, erősen
strukturált
környezetben
alkalmazható,
ott
ahol
minden
körülmény
előre
meghatározható, és az előre nem várható események valószínűsége nagyon kicsi.
Ipari robotok Az ipari robotok szenzorjaik segítségével határozzák meg mozgásuk pályaelemeinek nagy
részét.
Pályavezérlésük
magas
útvonaltervezéssel vannak ellátva.
szinten
programozott,
általában
robosztus
Mivel a munkafolyamat érzékelők segítségével
folyamatosan nyomon követhető, ezért a hibakeresés és minőségellenőrzés is részben automatizálható, ezzel is gyorsítva a gyártást és növelve a termék megbízhatóságát. Jól alkalmazhatóak dinamikus ipari környezetben, ahol a körülményeket előre nem lehet meghatározni, illetve ahol a vizuális információk lényegesen befolyásolják az elvégezendő feladat megoldását.
1.1 Az ipari robotika rövid története Az ipari robotika egyidős magával a robotikával. A robotok készítésének fő célja a kezdetektől az volt, hogy az ember helyett elvégezze a munkát. Maga a robot szavunk is erre utal, ami a cseh robota (=munka) szóból származik. A legtöbb robot azért épül, hogy az ember
8.
számára veszélyes, nehéz, vagy monoton feladatokat elvégezze, bár a közelmúltban a kényelmi célokat kiszolgáló és kifejezetten szórakoztatási célokat ellátó robotok fejlesztése is elkezdődött. Az első ipari robotgyártó cég az amerikai, 1962-ben alapított Unimation volt, melynek fő vásárlói a General Motors autóműhelyei voltak. Felismerték, hogy a monoton munkák elvégzéséhez használt automatizált berendezések a drága építési és fenntartási költségek ellenére is gazdaságosabbak és nagyobb hatásfokúak, mint az emberi munkaerő. Az első időkben az ipari robotok nagyrészt csak terméktovábbító és szállító funkciókat láttak el, de folyamatosan egyre több ipari robotot kezdtek használni a futószalagos termeléshez kapcsolódó többi munkafázis elvégzésére is. Nagy ugrást jelentett ezen a téren az 1969-ben a Stanford Egyetemen megalkotott első hat tengelyes robotkar, ami képes volt a végpontját bármilyen pálya mentén vezérelni. Ezt követően vált lehetővé a pont- és ívhegesztés a futószalagokon. Bár a robotok építése az USA-ban kezdődött, az 1970-es években drasztikusan megszaporodó robotfejlesztésekkel foglalkozó vállalatok nagy része Japán székhellyel rendelkezett. Mára a világ 26 legnagyobb robotgyártással foglalkozó cége közül 15 japán érdekeltségű.
1.2 Objektummozgatás Az ember mindig is szeretett változatos környezetben élni. Ehhez szüksége volt a környezetében lévő tárgyak megmunkálására és áthelyezésére. Kezdetben csak a kézi erővel mozgatható dolgoknak a helyzetét lehetett megváltoztatni. Az ember fejlődése során egyre bonyolultabb eszközöket talált fel a tárgyak mozgatására. De ezek az eszközök igényelték az emberi irányítást. Az elmúlt évszázadban kezdtek el foglalkozni olyan berendezések fejlesztésével, amelyek már nem igényelték az emberi beavatkozást. A kezdeti tárgymozgató robotkarok szinte teljesen „vakon” dolgoztak: egy meghatározott fix pozícióban lévő tárgyat próbáltak áthelyezni egy másik pozícióba. Ha a kezdő helyzet nem volt megfelelő, vagy a szállítandó objektum nem felelt meg tökéletesen az előírásnak, akkor a robot nem volt képes a mozgatást végrehajtani, sőt még kárt is okozhatott a tárgyban, illetve saját magában. Ezek a gépek nem sokkal múlták felül egy futószalag tudását, csak kisebb helyet foglaltak, bonyolultabb útvonalat is be tudtak járni, és a tárgy orientációján is tudtak változtatni. A későbbiekben egyre többféle szenzorral szerelték fel ezeket a mozgató robotkarokat, így sokkal általánosabb objektummozgatás vált lehetővé: objektumdetektálás, osztályozás, megfogásipont meghatározása, útoptimalizálás, akadálykikerülés.
9.
1.2.1 Manipulátor típusok A robotkarok több, gyakran különböző hosszúságú és alakú szegmensekből tevődnek össze. Ezen tagok között csuklók helyezkednek el, amelyek lehetővé teszik a robotkar részeinek egymáshoz való elmozdulását. A csuklóknak két fő típusa van: transzlációs csukló (tengelymenti elmozdulást lehetővé tevő) és rotációs csukló (forgómozgás a szegmensek között). A szegmensek és csuklók megválasztása határozza meg a robotkar által elérhető munkatér nagyságát és alakját.
Descartes manipulátor Három transzlációs ízület, egymásra kölcsönösen merőleges tengelyekkel. A mozgási fokok
száma
megegyezik
a
szabadsági
fokok
számával
(x,
y,
z:
Descartes-
koordinátarendszer). A szerkezet merev, így az „ügyessége” nagyon kicsi, cserébe pontos pozicionálás érhető el a teljes munkatérben. Ha a robotkar felülről közelíti meg a munkadarabot, azaz állványos felépítésű, akkor a szerkezetnek nagy a teherbírása, ezért főleg anyagmozgatásra és összeszerelésre használják ezeket a típusokat.
Hengeres manipulátor Kettő transzlációs és egy forgóízület. A mozgási fokok száma megegyezik a szabadsági fokok számával (r, θ, z: hengeres koordinátarendszer). Az előzőhöz hasonlóan ez is merev robotkar. A pontosság csökken, ha a forgástengelyétől távolodunk (r értéke növekszik). Főleg pozicionálásra használják.
1.1. ábra Két Descartes és egy hengeres manipulátor
Gömbi manipulátor Egy transzlációs és két forgóízülettel rendelkezik. A mozgási fokok száma megegyezik a szabadsági fokok számával (r, θ, φ: gömbi koordinátarendszer). Kevésbé merev, de ebből következően bonyolult szerkezet. A pontosság csökken, ha a forgástengelyektől távolodunk (r értéke növekszik).
10.
SCARA manipulátor (SCARA = Selective Compliance Assembly Robot Arm) Egy transzlációs és két forgóízületet tartalmaz, az összes ízület mozgási tengelye párhuzamos. Nincs közvetlen összefüggés a mozgási fokok száma és a szabadsági fokok száma között. Függőleges teherbírása jó és oldalra könnyen mozog. A pozíció pontossága csökken, ha távolodunk az első, tartóízület tengelyétől. Általában kisebb tárgyak mozgatására használják.
Antropomorf manipulátor Három forgóízülete van, ahol az első ízület mozgási tengelye merőleges a másik két egymással párhuzamos mozgási tengelyre. Az emberi karhoz legjobban ez a robotkar típus hasonlít. A pozícionálás pontossága változó a munkatéren belül, de az összes robotkar közül ez a legmozgékonyabb, így széleskörűen használják az ipari robotikában.
1.2. ábra Gömbi, SCARA és Antropomorf manipulátor
1.2.2 Aktuátorok A manipulátorok szegmenseinek egymáshoz viszonyított elmozdulását aktuátorok segítségével érjük el. Amennyiben a robotkart az emberi kar analógiája alapján szeretnénk felírni, akkor a manipulátor tagjai megfelelnek az emberi kar csontjainak, míg az aktuátorok az emberi izomrendszer megfelelői. Ezeknek a mozgatásért felelős eszközöknek a megválasztását nagyban befolyásolja a robotkar felhasználási célja. Ha nagy, és nehéz tárgyakat akarunk mozgatni, akkor erős, nagy forgatónyomatékú motorokat használunk, amelyeknek a pontossága másodlagos szempontú, míg ha kisebb elemek precíz elhelyezése a feladat, akkor inkább pontosan vezérelhető motorokat használunk. A szegmensek mozgatásához használt motorok kiválasztásán kívül nagyon fontos az aktuátorok megfelelő vezérlése is. A robotkar egyetlen motorjának meghibásodása illetve nem megfelelő vezérlése a leálláson túl súlyos kárt is okozhat magában a robotkarban, vagy a környezetében, ezért alaposan fel kell mérni a felhasznált mozgató berendezés korlátait, és
11.
megfelelő szabályozó rendszerek és programok segítségével meg kell akadályoznunk a határok túllépését. A motorok meghajtása többféle módon lehetséges. Ennek meghatározása a megoldandó feladat függvénye, de adott manipulátor esetén általában csak egy féle erőforrást használnak, így csökkentve a robotkaron elhelyezett irányítást lehetővé tevő eszközök számát, melyek akadályozhatják a robotkart a szabad mozgásban, illetve megnövelik annak méretét és súlyát, ezzel is csökkentve a manipulátor hatásfokát. Az aktuátorok legfontosabb típusai:
Elektronikus A motorok erőforrása váltó- vagy egyenáram. Működése az elektromágneses indukción alapszik. Megfelelően elhelyezett mágnesek és forgó tekercsek elektromos áramot hoznak létre (generátor). Ennek a folyamatnak a megfordításából kapjuk a villanymotorokat, azaz az elektromos áram mechanikai forgó mozgást hoz létre. Az elektromos motorok könnyen és pontosan vezérelhetőek a rajtuk átfolyó áram erősségének szabályozásával. Általában maga a motor nagy fordulatszámú és kis nyomatékkal rendelkezik, de áttételek segítségével elérhető a szükséges nyomaték.
Pneumatikus A pneumatikus aktuátorokat sűrített levegő segítségével működtetjük, ami a nyomáskülönbségből adódó mozgást használja. Az ilyen aktuátor mozgási sebessége nem egyenletes, pozicionálása nehézkes, ezért általában csak végállapotok közötti gyors mozgás esetén hatékony. Hátránya a bonyolult szerkezet, mert szükség van sűrített levegőt előállító berendezésre és szivárgásmentes, tartós csővezetékre, aminek esetleges sérülése esetén az aktuátor nem lesz üzemképes.
Hidraulikus A hidraulikus elven működő aktuátorok a folyadékok összenyomhatatlanságát használják ki. Hasonlít a pneumatikus működésű berendezésekhez, de itt az összenyomható levegő helyett magas nyomású, nem összenyomható folyadékot használnak. Nagyon erős és pontos mozgást tesz lehetővé, de a mozgás sebessége messze elmarad a többi mozgatási módszertől. Ezenkívül a pneumatikus eszközökhöz hasonlóan bonyolult felépítésűek, és a nagy nyomású folyadékot tartalmazó vezetékek sérülékenyek.
12.
1.2.3 Effektorok, megfogó eszközök A manipulátor egyik legfontosabb része a végén található effektor. Hiába tudjuk a robotkarunkat a megfelelő pozícióba mozgatni, ha az ott elvégezendő műveletet nem tudjuk végrehajtani. A művelet végrehajtó eszközök sokfélék lehetnek: fogókar, ponthegesztő, festékszóró pisztoly, vágóberendezés, csiszoló, vagy egyéb szerszám. Az objektum mozgatási feladatokhoz a robotkar végén egy megfogó eszközre van szükségünk. Ezen berendezések és mozgatandó tárgy kapcsolata alakkal, erővel, tapadással, vagy ezek kombinációjával biztosítható. A fogókar kiválasztását nagyrészt a mozgatandó tárgyak mérete, alakja, súlya és sokfélesége határozza meg. Amennyiben a robotkarunkat nehéz, raklapozott árunk arrébb helyezésére szeretnénk használni, akkor célszerű egyszerű, de stabil és erős fogószerkezetet választani. Amennyiben a fő szempont a mozgatandó tárgyak sokféleségének megoldása, abban az esetben érdemes az emberi kézhez hasonló, ujjszerű robotkézben gondolkodni. A fogókarokon kívül használnak még szívóhatáson alapuló eszközöket. Ezek általában elektromágneses módon, vagy vákuum segítségével emelik meg a kívánt tárgyat. A vákuumot használó effektorokat olyan helyen alkalmazzák, ahol a célobjektum rendelkezik akkora sima felülettel, hogy a megemeléshez szükséges tapadókorongok elférjenek rajta. Legtöbbször fémlemezek és üveg tárgyak mozgatásához használják. Az elektromágnessel működő effektorok csak vastartalmú tárgyak esetén használhatóak.
1.2.4 Feladat végrehajtás A robotkarokat kinematikai láncnak tekintjük, amely egymás után szerelt, csuklóval összekötött, merev darabokból álló, mozgásra képes szerkezet. A lánc egyik vége a végpont, ami stabilan rögzítve van, és nem képes elmozdulni. A lánc másik végén található a végberendezés, amivel a megadott feladatot szeretnénk végrehajtani. Beszélhetünk nyílt kinematikai láncról, ahol a lánc két végpontját csak egy szegmens sorozat köti össze, és zárt kinematikai láncról, ahol a manipulátor tagjai hurkot alkotnak. Az utóbbi felépítést általában nagyobb terhelés esetén alkalmazzák.
1.3. ábra Kinematikai láncok
13.
Robotkarok esetén a feladat végrehajtása a végszerszám előírt mozgásmintázatának elérését jeleneti. Ennek megvalósítása érekében a manipulátor aktuátorait a hozzá tartozó szabályzó rendszer irányítja. Ezen vezérlő rendszereknek egy belső, dinamikus modellre van szükségük, hogy feladatukat végre tudják hajtani. Kinematikának hívjuk a csuklók pozíciója (szöge) és a végszerszám pozíciója és orientációja közti analitikus kapcsolat leírását. Azaz a kinematika teremt kapcsolatot a műveleti tér (végpont által felvehető pozíciók és orientációk tere) és a csuklótér (a manipulátor csuklói által felvehető állapotok tere) között. Általában az egyik térbeli reprezentációt ismerjük, és a feladatunk az, hogy kiszámítsuk a másik térbeli helyzetét. Ezeket a hívjuk kinematikai problémának. Ezeknek a feladatoknak két típusa van:
Direkt kinematikai probléma A direkt kinematikai probléma esetén a feladatunk egy szisztematikus, általános módszer megadása a lineárisalgebra eszközei segítségével a végszerszám mozgásának leírására a csuklómozgások függvényében. Azaz ismerjük a csuklók kezdeti helyzetét és állapotváltozásuk függvényét, és ebből kell kiszámítanunk a végberendezés pozíciójának mozgás görbéjét és orientációjának függvényét. Amennyiben a robotkar statikus értékeit (szegmensek hossza, csukló tengelyek egymáshoz való viszonya) ismerjük, abban az esetben ez a számolás egyértelműen elvégezhető. Ahol p adja meg a végberendezés pozícióját, Φ pedig az orientációját, k() egy általában nem lineáris vektor-vektor függvény, és q1 … qn a csuklóváltozók vektorai.
Inverz kinematikai probléma Az inverz kinematikai probléma esetén a feladat a kívánt végszerszám mozgás pályájához szükséges csuklómozgások kiszámítása. Azaz tudjuk a végberendezésünk szükséges mozgásának függvényét, és ehhez keressük azon csukló állapotokat, amelyek esetén ez létre jön. Mivel a valóságban a robotkar szerkezete miatt nem minden csukló állapot érhető el, ezért az is előfordulhat, hogy a feladatnak egyáltalán nincs megoldása. Amennyiben a manipulátor kinematikailag redundáns, azaz a lehetséges mozgás szabadságfoka nagyobb, mint a megvalósítandó feladathoz szükséges független változók száma, akkor az inverz kinematikai feladatnak nem létezik egyértelmű megoldása. Ilyen esetben a megoldások közül egy adott szempontból minimális megoldást keresünk. Leggyakrabban minimalizált tulajdonságok: energia, szükséges csuklóforgás, idő, csuklómozgás simasága (gyorsulás időszerinti deriváltja).
14.
1.3 Szenzori és képi jelfeldolgozás Az automatizált objektummozgatáshoz nem csak egy jól vezérelt manipulátorra van szükségünk, hanem egy érzékelőkből álló rendszerre is, mely segítségével megtalálhatjuk és felismerhetjük az áthelyezésre váró tárgyat. A szenzori jelek feldolgozása ezen kívül a biztonságos üzemeltetést is elősegíti, hisz detektálhatja a nem várt eseményeket, illetve ellenőrizheti az elvégzett művelet sikerességét, ami feltétele egy robosztus rendszernek.
1.3.1 Szenzori jelek feldolgozása Az objektummozgatáshoz használt robotkarokon általában háromféle feladatot ellátó érzékelőt találhatunk: állapotérzékelők, amelyek mérik a csuklók aktuális helyzetét, távolságmérők, amelyek a manipulátor környezetét pásztázzák objektumokat és akadályokat keresve, és tapintásérzékelők, amelyek segítenek az objektum ideális megfogási erejének beállításában. Az ízületek aktuális szögét elfordulásdetektorok segítségével mérjük, mely lehet optikai vagy mechanikai alapú is. A távolság mérésére több, különböző paraméterekkel rendelkező, különböző módszeren alapuló eszköz is a rendelkezésünkre áll: ultrahangot, infrafényt vagy lézert használó érzékelő. A tapintásérzékelők a fogókar és a mozgatandó objektum között fellépő erőt mérik kapacitív, piezzorezisztív vagy optikai módszerrel.
Szenzor kiválasztása A szenzor kiválasztásánál több tényezőt kell figyelembe vennünk. Először is úgy kell választanunk a lehetséges szenzorok közül, hogy a lehetséges mérési adatok a szenzor mérési tartományába essenek, és a szükséges pontossággal tudják meghatározni a mérendő mennyiséget. Például ütközésdetekcióra nem érdemes lézeres távolságmérőt használni, mert a mérete miatt nehezen helyezhető el a robotkaron, és úgy sem használjuk a nagy pontosságát és a széles mérési tartományát. Ehelyett, egyszerű, kisméretű, kis hatótávolságú infraszenzorból alkalmazunk többet a manipulátoron. Ezek tápellátása és jelfeldolgozása sokkal egyszerűbb, és bőven ellátják azon feladatukat, hogy észleljék, hogy egy tárgyhoz közeledik a robotkar. Ebben az esetben nem akarjuk pontosan tudni, milyen messze van a felmerült akadály, elég ha azt tudjuk, hogy ütközésveszély lépett fel, és meg kell állnunk. Amennyiben objektumkeresési és felismerési feladathoz használjuk a távolságmérő szenzorunkat, akkor az észlelendő objektumok méreteit figyelembe véve érdemes meggondolni, hogy egy nagyobb pontosságú távolságmérő berendezést is üzembe helyezünk a robotkaron. Ennek az eszköznek a mérései kiegészíthetik az objektumról készült képi információt, és ezzel pontosíthatja az osztályozást.
15.
1.3.2 Képi jelek feldolgozása A robotkaron illetve környékén elhelyezett kamerák képe adja az objektumkereséshez a fő információt. A képeket elemezve a manipulátor környéke modellezhető az irányítórendszer számára, így könnyen kiszámíthatja a feladat elvégzéséhez szükséges mozdulatsorokat. A képek feldolgozásakor több nehézségbe ütközhetünk, amelyek megoldása a rendszer kiegészítése révén számos esetben megkönnyíthető. A legtöbbször előforduló ipari robotkarokkal kapcsolatos képfeldolgozási kihívások:
Dimenzió csökkenés A minket körülvevő világ, így a megtalálandó tárgyunk is háromdimenziós. A kamerák által készített kép viszont ennek a térnek a kétdimenziós leképezése. Ez azt jelenti, hogy ebből adódóan a kép készítésekor kevesebb információhoz jutunk, nem leszünk tisztában a képen szereplő tárgyak egymáshoz viszonyított pontos elhelyezkedésével. Amennyiben az előírt feladat modellezéséhez elegendő egy kétdimenziós térreprezentáció, abban az esetben ez nem okoz problémát, ha viszont bonyolultabb a feladatunk, akkor szükséges a kapott információk kibővítése. Erre több megoldás is lehetséges: több stabil kamera alkalmazása, vagy egy mozgó kamera több szögből készített felvétele, esetleg nem optikai szenzorok használata a mélységi információink kinyeréséhez.
Fényviszonyok A robotkarokon lévő kamerák a méret megkötések miatt nem rendelkeznek bonyolult és nagyméretű optikával, így nem képesek a vizsgálandó tárgyra fókuszálni. Ez elmosódott képet eredményezhet. Ipari környezetben nagyjából behatárolhatjuk azt a távolságtartományt, amilyen távolságba lehet a keresett objektum, és olyan beállításokat használunk, ami ezen keretek között a lehető legjobb eredményt éri el. A kis optikával rendelkező kamerák esetén általában nem tudjuk változtatni a kamerába jutó fény mennyiségét, így nem vagyunk képesek reagálni a környezetben történt fényváltozásokra. Ezek a változások azonban nagyban nehezíthetik az objektumkeresést és objektumfelismerést. Sötét vagy túl világos képen a kontrasztok elmosódnak, így nehezebb megállapítani a tárgyak valós helyzetét és alakját. Ezenkívül, amennyiben a tárgyak színe is fontos, a nem állandó fényerősség szinte lehetetlenné teszi a pontos színfelismerést, így ha hasonló színű objektumokat kell megkülönböztetnünk egymástól, akkor megnő a hiba lehetősége. Ipari környezetben ez a probléma megoldható, ha zárt térben, mesterséges megvilágítást használunk, így a fényerősség is állandó paraméterré válik.
16.
1.4. Automatizált téglaház-építés Manapság rengeteg felhasználási területe van a robotoknak, a legtöbb gyárat szinte már teljesen automatizálták. Felmerül a kérdés, miért ne lehetne például téglaházakat építeni robotok segítségével. Az automatizált berendezések ilyen célú felhasználásánál sok kihívással kell szembenéznünk, melyek közül néhányra kitérnék.
Bonyolultság A gyártási automatizálás gyors terjedése abban rejlik, hogy a legtöbb gyártási folyamat önálló részekre bontható, amelyek külön-külön elvégezhetőek, és a végén a részek összeszerelhetőek. Az épületek felépítése azonban nem bontható fel ilyen módon, mert ebben az esetben a műveleteknek szigorú egymásutánisága van. Nincs lehetőségünk előre dolgozni. Például nem kezdhetjük el a falak építését, amíg az alap nincs kész.
Méret A házépítés automatizálásának egyik nehézsége az épületek méretében van. Míg egy gyárban, a futószalagon maximum gépkocsi méretű termékeket készítenek, addig nincs szükség nagy gépekre a mozgatásához és a szereléséhez. Ellenben egy többszintes ház felépítéséhez jóval nagyobb berendezésekre van szükség. Ezeknek a nagyobb méret miatt masszívabbaknak kell lenniük, hogy a robotkar a saját súlyát is elbírja, így azonban a pontosságuk csökken. Viszont egy ház felépítésénél a pontosság is nagyon fontos, mivel ha a téglafalnak csak pár eleme sincs rendesen a helyén, az az egész falat meggyengíti.
Környezet Épületek készítése esetén az ipari robotika anyagmozgatási és gyártási folyamatait vesszük alapul, mivel sok mindenben megegyeznek a szükséges alapműveletek. Egy gyár falain belül azonban a változó környezeti hatások számát könnyen csökkenthetjük, ugyanezt egy ház építésénél csak nehezen vagy egyáltalán nem tudjuk megoldani. Például az üzem falai megóvják a gyártósort az időjárás viszonytagságaitól. A kültéri építkezésen azonban az időjárást nem tudjuk kizárni, csak alkalmazkodni hozzá, például vízállóvá tett eszközökkel, és építésifelület-tisztító berendezésekkel. Az automatizált építő rendszerünknek így nem csak az építést kell irányítania, hanem az időjárás viszonylatában átszerveznie a teendőket, mivel egyes műveletek nem végezhetőek el például esőben.
17.
2. Előzmények 2.1 Probléma megoldást segítő cikkek és könyvek Robotok optikai bemenetének típusai [1] Megismerkedtem a gyártósori robotok leggyakrabban használt optikai input feldolgozási módszereivel. Ezeknél a gépeknél néha elég 2 dimenziós kép is a feladat elvégzéséhez, de precízebb műveletekhez már 3D-s képfeldolgozás szükséges, melyet több, megfelelő szögben elhelyezett kamerával lehet megoldani. Az egy kamerás megoldás hatékonysága növelhető távolságmérő szenzorok segítségével, illetve mozgatható kamera használatával.
Háromdimenziós neurális hálós objektum felismerés [2] Az objektum felismerési módszer lényege, hogy a tárgyról több képet készítünk, megadott távolságról és szögben. A képek egy 5 rétegű előrecsatolt neurálishálózat (FFNN) bemenetét adják, ami egy objektum adatbázis segítségével eldönti, hogy melyik tárgyról készültek a képek. Az objektum adatbázis feltöltéséhez megfelelő számú tanítás, vagy jól definiált tulajdonság halmaz szükséges.
Digitális képfeldolgozás [3] A könyv megismertet minket a digitális képfeldolgozás alapjaival: képábrázolási technikák, fotometria és kolorimetria. Ezenkívül bepillantást nyújt a digitális képjellemzés lehetőségeibe: mintavételezés és kvantálás. Megismerhetjük a diszkrét lineáris képfeldolgozás eszközeit: szuperpozíció, konvolúció, unitér transzformáció és Fourier transzformáció. A könyv második részében képmanipulációs és feldolgozó algoritmusokat ismerhetünk meg, többek között: kép minőség javító technikák (zajszűrés, hisztogrammódosítás, élsimítás, színkiegyensúlyozás), morfológiai képfeldolgozási eszközök (vékonyítás, szkeletonizáció, dilatáció, erózió), élkereső és textúra felismerő algoritmusok. A könyv befejező részében elsajátíthatjuk a mintaillesztéses objektumfelismerés alapjait.
18.
2.2 Felhasznált szoftverek Programmers guide for PowerCube [4] Az Amtec Robotics GmbH programozókat segítő hivatalos dokumentációja, amiben részletesen leírja a PowerCube programozásának hardveres és szoftveres követelményeit, illetve tartalmazza a kapott interfész (m5apiw32.h) specifikációját és teljes leírását. A léptető asztal irányítófelületének programozása előtt érdemes volt áttanulmányozni és megérteni a PowerCube-ok viselkedésmechanizmusát.
PCube.h Az egyetem Robotika tantárgy labormérésein használt header fájl segítségével nem csak egyesével lehet a PowerCube-okat irányítani, hanem egy összesítőobjektum függvényeinek a segítségével összetett utasításokat elvégzésére is van lehetőség. Az inicializáló függvényében lévő beállítások segítségével megakadályozható, hogy az asztalt túlvezéreljük, azaz ne kaphassanak a PowerCube-ok meghibásodáshoz vezető árammennyiséget, illetve ne terheljük túl a tápegységet sem. Ezenkívül ellenőrizhető, ha nem létező azonosítóval rendelkező PowerCube-nak akarunk utasítást adni.
OpenCV Az OpenCV (Open Source Computer Vision) egy gépi vizuális adatfeldolgozást segítő programkönyvtár. A programcsomag rengeteg hasznos webkamerakezelő, képfeldolgozó és egyéb videómanipuláló metódust tartalmaz, de a szoftverfejlesztés során közvetlenül csak a kamerakezelő eszköztár került felhasználásra.
Microsoft Visual Studio 2005 Az irányító szoftver fejlesztésére a Visual Studio 2005 fejlesztőkörnyezet került kiválasztva, mivel az adott operációs rendszeren a Visual C++ fordítóhoz volt optimalizálva a kapott interfész. A Visual Studio könnyen használható, jól dokumentált program könyvtárral rendelkezik, melyek megkönnyítették a program grafikus felhasználói felületének elkészítését.
ServerInfo.cpp A távolságmérő szenzorok adatainak lekérését végrehajtó osztály, melyet a mérőtársam készített a szenzorok kiméréséhez és ellenőrzéséhez.
19.
3. Használt hardverek
3.1. ábra: Hardverstruktúra
A fenti ábrán (3.1. ábra) láthatjuk a léptetőasztal hardverjeit, és azok egymáshoz kapcsolódásához használt protokollokat.
3.1 PowerCube 3.1.1 CAN-Busz A CAN (= Controller Area Network) egy busz topológiájú kommunikációs protokoll, melyet arra fejlesztettek ki, hogy az autókban lévő mikrokontrollerek és berendezések egymás közötti adatcseréjét és tápellátását egyszerűen, egy kábel segítségével meg lehessen oldani. Használata elterjedt más területeken is, mert alkalmazása egyszerű és gyors.
3.2. ábra: A CAN-Busz felépítése
20.
A léptető asztal PowerCube-jai CAN open protokollnak megfelelően vannak sorba kötve. A kiadott utasítás tartalmazza a cél azonosítószámát, így a többi PowerCube a nem neki szánt parancsot tovább küldi a buszon. Az üzenet addig adódik tovább, amíg el nem éri a célját. A CAN-kábel 3 különböző csatlakozót tartalmaz, melyeknek külön-külön meg van a maga feladata. A felső csatlakozó az adatkábel, az alsó kettő pedig a PowerCube-ok ellátáshoz szükséges 24V-os tápfeszültség ellátásáért felelős.
3.3. ábra: PowerCube-ok fajtái: lineáris, forgó, fogó
3.1.2 PowerCube tulajdonságai Az asztal aktuátorait PowerCube-ok alkotják. Ezt a berendezést az Amtec Robotics GmbH fejleszti és gyártja. Ezen eszközöknek több fajtája létezik, de jelenleg az asztalban három típus van beépítve: három darab lineáris, egy forgó és egy fogó. A PowerCube egy szénkefe nélküli szervomotorral és egy integrált szervo erősítővel rendelkezik, így a belőle épített robotkarok megfelelő erővel rendelkeznek. A különféle áttételek segítenek a feladat elvégzéséhez megfelelő sebesség és nyomaték eléréséhez. A berendezés mágneses fékeket tartalmaz, amelyek segítségével nagy sebesség esetén is gyorsan megállíthatóak. A viszonylag erős és gyors motorok ellenére az eszköz 10µm pontossággal irányítható. A PowerCube-ok decentralizált hálózat (Can-busz) segítségével vezérelhetők, így szoftveresen kell összehangolni működésüket, de ez lehetőséget is ad arra, hogy külön-külön irányítsuk őket. Ezt segíti elő a blokkszerű felépítés, ami megkönnyíti az össze- és szétszerelést. A vezérlést könnyítése érdekében az eszköz belsejében végállás kapcsolók, és pozíció szenzorok helyezkednek el, amelyek segítségével mindig ismerik a helyzetüket. Továbbá
folyamatosan
információt
küldenek az
áramfelvételről, sebességükről
és
gyorsulásukról, ezzel is megkönnyítve a szabályozásukat. Minden egyes PowerCube rendelkezik egy egyedi azonosítóval, melynek segítségével tudunk utasításokat küldeni neki. Tartalmaz belső változókat is, melyeknek egyes elemeit
21.
használat előtt hardveresen be kell állítani (pl.: maximum kitérés, Home-pozíció), más részei használat közben, szoftveresen is beállíthatóak. (pl.: maximális áramfelvétel, maximális sebesség, maximális gyorsulás)
3.1.3 Munkatér A munkatér a környezet azon része, melyet a manipulátor segítségével elérhetünk. A léptetőasztalunk esetében ez egy téglatest által behatárolt terület, mivel három, páronként merőleges transzlációs csuklót tartalmaz. Ez a tér Descartes-féle koordinátákkal könnyen reprezentálható. Minden koordináta értéknek megfeleltethető az adott egyenes mentén mozgató PowerCube aktuális helyzete, így a környezet és a robot azonos koordináta rendszerbe helyezhető. A léptetőasztal Home pozíciója határozza meg a tér origóját, amely az esetünkben a jobb, hátsó, felső sarok. Ezzel a reprezentációval dolgozva minden koordináta értéke pozitív törtszámmal felírható és adott zárt intervallumon meghatározható. Esetünkben ezek a határok: X koordináta esetén [0,122], Y koordináta esetén [0,147] és Z koordináta esetén [0, 29], melyek a fizikai felépítésből adódnak.
3.4. ábra A léptetőasztal munkatere
A végpontban az aktuátor megfelelő rotációjáról a negyedik, forgató PowerCube gondoskodik, amely 360°-ban képes a Z tengely mentén körbefordulni. Mivel a mozgatandó építőelemek az X-Y síkkal párhuzamosan helyezkednek el, ezért a léptető asztal szabadsági foka elegendő ahhoz, hogy bármilyen lehetséges helyzetben lévő elemet manipulálhasson.
22.
3.2 Szenzorok Webkamera A webkamera típusa: Fujitsu Siemens WebCam 130 Portable A kamera egy kisméretű, 1,3 Megapixel felbontású, laptopokhoz gyártott külső kamera, amely mérete miatt könnyen rögzíthető a robotkaron. Az eszköz USB porton keresztül csatlakozik a szervergéphez (Plug&Play módon), így telepítést és specifikus drivert nem igényel. Ennek köszönhetően hiba vagy fejlesztés esetén a kamera könnyen cserélhető. Mivel ezt a webkamerát számítógépekhez tervezték, ezért nem tartalmaz bonyolult optikát, de ez nem okoz problémát, mivel közelről készítünk vele felvételeket (maximum fél méter). A berendezés 640x480-as felbontású képeket készít, melyeken a fehér háttérnek köszönhetően jól elkülöníthetőek a színes építőelemek. A képek tárolása PNG fájl formátumban történik, ugyan ez pixelenként tárol, mint a BMP, de azzal ellentétben tömöríti is az adatokat, ami ugyan nem olyan hatékony, mint JPEG esetén, viszont teljesen veszteségmentes, így nem mosódnak el a kontrasztok és nem jelennek meg az egyszínű felületek esetén a képen vonalak.
Távolságmérő szenzor A szenzor típusa: SHARP GP2D120X Az eszköz egy 3-25 cm intervallumban pontos infraszenzor. A szenzor szórt fényt kiszűrő rendszerrel rendelkezik, így kimenete elhanyagolható mértékben függ a mért tárgy színétől és anyagától, így segítheti az építőelemek felismerését. Mivel az építő elemek vastagsága a kamera képéből nem minden esetben határozható meg, ezért ilyenkor további információkra is szükség van. Legtöbbször a képfeldolgozás eredménye és a távolságmérő szenzor adatai elegendőek az objektum osztályozásához.
Ütközésérzékelő szenzor A szenzor típusa: TCRT5000 Az eszköz egy 2-40 mm méréstartományban mérő infraszenzor. Mivel az ütközés detekciónál a feladtunk csak annyi, hogy észrevegyük a közeledő tárgyat és nem szükséges a pontos távolság meghatározása, ezért elegendő egy rövid távú, egyszerű szenzor használata.
23.
4. A szoftver A feladatom egy olyan program megtervezése és implementálása volt, amely képes a léptetőasztal alatt elhelyezett építőelemekből egy másik programtól kapott tervek alapján egy építési tervet végrehajtani. Ehhez a programnak több részfeladatot kell elvégeznie és több különböző eszközzel kell kommunikálnia, amelyek között meg kell teremtenie a felhasználó által könnyen ellenőrizhető kapcsolatot.
4.1 Léptetőasztal irányítása A legfontosabb feladat a léptetőasztal irányításáért felelős programrész elkészítése volt. Mivel a szoftver ezen része felelős a robotkar közvetlen irányításáért, e nélkül az építőelemek mozgatása lehetetlen lenne. Ezen funkció ellátásárért egy több típusból álló osztályhierarchia felelős, melynek felépítése az alább ábrán látható. (4.1 ábra)
4.1. ábra Irányításért felelős osztályok kapcsolata
Az m5apiw32.dll fájlban található programkönyvtár a léptetőasztal PowerCube-jainak közvetlen irányítását teszi lehetővé. Minden egyes utasítás meghívásához a feladathoz szükséges paramétereken kívül egy PowerCube azonosítószámot is meg kell adni, mivel ez az általános vezérlő interfész nem tárol információkat a CAN-buszon található eszközökről, így minden szükséges adatot függvényhívás segítségével tudunk elérni. A kiadott utasításaink mindegyike rendelkezik egy visszatérési értékkel, amiből megtudhatjuk, hogy elérkezett-e a vezérlőüzenet a megfelelő aktuátorhoz. A PCube és PlotterStage osztályok az előző programkönyvtár metódusai segítségével létrehoznak egy olyan típust, ami már tárolja a PowerCube-ok azonosítóit és megakadályozza, hogy érvénytelen utasításokat küldjünk a robotkar elemenek, ezáltal egyszerűbb és biztonságosabb vezérlést tesz lehetővé. Metódusaik azonban még mindig elemi szintűnek tekinthetőek. A Robot osztály tartalmazza az irányítás összetett műveletit. Azon kívül, hogy képes összehangolni a különböző aktuátorokat egy bonyolultabb mozgás elvégzéséhez, biztosítja a léptetőasztal hibamentes működését is. A mozgást végrehajtó metódusok a létrehozott objektumon kívülről nem hívhatóak, csak egy jól meghatározott interfészen keresztül lehet az irányítást elvégezni. Ezáltal már szoftver szinten is ellenőrizhetőek a végre nem hajtható
24.
utasítások, ugyanis rendelkezik a példány a robotkar pontos fizikai határaival. Amennyiben a felhasználó megpróbálja túlvezérelni a léptetőasztal bármely elemét, a program úgy adja tovább a parancsot, hogy csak a fizikai korlátig mozgassa az eszközt. Erről a felhasználó nem kap külön értesítést, csak az állapot kijelzőkön láthatja, hogy a léptetőasztal előbb állt meg. A vezérlőobjektum minden egyes kiadott parancsát egy logfájlba menti, így utólag is ellenőrizhetjük a robotkarnak kiadott utasításokat.
4.2 Webkamera kezelése A webkamera kezeléséért a WebCam osztály példánya felelős, és a legfontosabb kezelő utasításokat tartalmazza: kamera elindítása, leállítása, és a látott kép lekérése. Ez utóbbi funkciót ellátó metódusból két különbözőt hívhatunk meg. Az egyik fajta az OpenCV által használt, sorfolytonosan tárolt kép adására alkalmas, így ezt a folyamatos megjelenítés esetén alkalmazzuk. Mivel adott képpont elérése ebben az esetben nehezebb, ezért nem ezt használjuk a képfeldolgozási algoritmusban. A másik fajta a Visual Stúdió által használt System névtér bitképével tér vissza. Ez a képtárolási mód megkönnyíti a pixelek elérését, ezért a kép elemzése egyszerűbbé válik. Mivel a bitkép a fordítási környezet alapvető eleme, így más programrészek is könnyen hozzáférnek. (például: megjelenítés, mentés, betöltés) Miután a kamerát elindítjuk, a szoftver lefoglalja magának az erőforrást, így más külső program nem férhet hozzá. Ezáltal biztosak lehetünk abban, hogy egy külső program nem változtat a kamera beállításain. Ha program automatizált futása közben már nincs szükség az eszközre illetve a felhasználó manuálisan leállítja a kamerát, a berendezést felszabadítja a szoftver. A program tervezett, vagy hiba miatt történő leállása esetén is megtörténik a feloldás.
4.3 Hálózati kommunikáció A hálózati kommunikáció megvalósítása szerver-kliens architektúrával történik, a 11111-es porton keresztül. Az üzenetek küldése TCP-t (Transmission Control Protocol) használó socketeken keresztül történik. A TCP használatának előnye, hogy alacsony szinten már megtörténik az érkezett adatok ellenőrzése, így a programban nem kell azzal foglalkozni, hogy történt-e hiba az üzenet átküldése közben, hanem jogosan feltételezzük, hogy amilyen karakter láncot küldünk, az fog a túlsó oldalon megérkezni.
25.
4.3.1 Hálózati szerver A hálózaton történő üzenetek küldéséért a Server nevű osztály példánya felelős: képes a hálózati kapcsolat megnyitására, üzenetek fogadására és továbbítására. A szerverhez mindig csak egy szoftver tud csatlakozni, ezáltal biztosítva a konzekvens működést. Amennyiben foglalt a szerver és egy másik program akar csatlakozni hozzá, akkor nem fogadja annak kérését, csak abban az esetben, ha az aktuális kliens már távozott. A szerver indítására csak akkor van lehetőség, ha a léptetőasztallal már létrejött a kapcsolat. A csatlakozó kliens így tudja, hogyha sikeresen tud csatlakozni a szerverhez, akkor a robotkar kész az utasítások fogadására. Így ez nem igényel külön párbeszédet a kapcsolat két végpontja között. Amennyiben a robotkar inicializációja sikeres volt, a program megnyitja a 11111-es portot, és ezek után folyamatosan figyeli, mikor csatlakozik egy kliens hozzá. A kapcsolódás után a kliens és a szerver között felépül az adatfolyam (stream). Ez után a szerver várakozik a kliens üzeneteire. Ha kap egy üzenetet, azt elemzés nélkül tovább adja a léptetőasztalt irányító alprogramnak (Robot osztály). Ez az alprogram ellenőrzi a parancs helyességét és végrehajthatóságát és amennyiben lehetséges, végrehajtja az utasítást és a választ visszaadja a hálózati kommunikációért felelős alprogramnak (Connection osztály), ami visszaküldi a választ a hálózati adatfolyamon keresztül a kliensnek. Ezután várja a következő utasítást a szerver. Ez a folyamat addig folytatódik, ameddig le nem állítják a szervert, vagy a kliens le nem kapcsolódik. Amennyiben a kliens távozott, a szerver visszatér várakozó állapotba és várja egy új kliens jövetelét. A szerver ilyen módú felépítése nem teszi lehetővé, hogy a szerver bármikor üzenetet küldhessen a kliens számára, csak válaszol a kliens utasításaira. Viszont különleges események (léptetőasztal ütközés elkerülés miatt megáll) esetén a szervernek is üzennie kell a kliensnek. Ezt akkor tudjuk megtenni, mikor a kliens bizonyos időközönként lekéri a léptetőasztal aktuális helyzetét. Amennyiben hiba történt futás közben, akkor nem a kért információval válaszolunk a kliensnek, hanem az üzenetben jelezzük a hibát.
4.2 ábra A szerver működése
26.
4.3.2 Léptetőasztal irányító kliens A kliensprogram egy külső, külön futatható program, amely segítségével hálózaton keresztül tudunk kapcsolatba lépni a léptetőasztalt iránytó programmal. A kommunikációért a Connection osztály példánya felel, ami nagyon hasonló felépítésű és működésű, mint a szerverprogram hasonló feladatot ellátó egyede.
Grafikus felhasználói felület A
távoli
léptetőasztal-irányító
szoftver
kezelőfelülete a szerverhez való csatlakozást és az alapvető
irányítást
lehetővé
tevő
gombokat
tartalmazza. A csatlakozáshoz először a felhasználónak meg kell adnia a szerver ip címét. Ezt a négyes osztásnak megfelelően négy különálló szöveges beviteli mező segítségével tehetjük meg. Miután megadtuk a címet, a „v” feliratú gomb segítségével ellenőriztethetjük, hogy szabványos ip címet adtunk-e meg. (egyik tag sem nagyobb 255-nél) Ez az ellenőrzés minden esetben le fog futni, ha megpróbálunk csatlakozni, de így sokkal hamarabb értesülünk az esetleges hibás beírásról.
4.3. ábra Kliens grafikus felülete
A connect gomb segítségével tudjuk a megadott című szerverre megkísérelni a csatlakozást. Amennyiben sikerül, abban az esetben engedélyezi a program az irányításhoz szükséges kezelőfelület használatát és várja a felhasználó utasításait, közben folyamatosan frissítve a léptetőasztal aktuátorainak aktuális állapotát. A hálózati kapcsolatot a disconnect feliratú gomb segítségével szakíthatjuk meg. A működés közben fellépő eseményekről és hibákról a program felugró üzenetablak segítségével tájékoztatja a kezelőt.
Működés A kliensprogram a felhasználó utasítása után megpróbál rácsatlakozni az adott helyen található szerverre. Amennyiben ez nem sikerül, akkor értesíti a felhasználót, majd fut tovább, lehetőséget adva egy újbóli csatlakozási kísérletre, vagy az ip cím megváltoztatására. Amennyiben sikerült kapcsolatba lépnie a szerverrel, várakozni kezd a felhasználó utasításaira, mivel csak abban az esetben lehetett sikeres a kapcsolta felépítése, amikor a
27.
léptető asztal már készen áll a munkára. A felhasználó gombnyomásainak hatására a kliens parancsokat küld a szervernek, majd ezek után vár a válaszra és kis idő után újra várja a felhasználó utasításait. Ezen válaszokban a szerver tudja értesíteni a klienst az esetlegesen fellépett hibákról. A szervertől való visszajelzésre az adott időközönként történő lekérdezéskor van még lehetőség, amikor a léptetőasztal eleminek pontos helyzetről kér információt a kliensprogram. Ezt meg is jeleníti a kijelzőn, de ezekben a válaszokban van lehetősége a szervernek a működésközben fellépő hibákról is tájékoztatatni a klienst. A kliens leállításakor egy utolsó üzenetben értesíti a szervert, hogy lekapcsolódik, ezután bontják a kapcsolatot.
4.4. ábra Kliens működése
4.3.3 Kommunikációs protokoll Karakterkódolási probléma A szerver és a kliens a protokollban meghatározott karakterláncok segítségével kommunikálnak egymással. A TCP socketek által használt adatfolyamban csak Byte (8bites szám) típusú adatok küldhetőek. Emiatt a küldés előtt az üzeneteket Byte tömbbé kell átalakítani, fogadás után pedig visszaalakítani karakterlánccá. Ez a folyamat akkor okoz komolyabb problémát, ha két különböző program által írt socket kommunikál egymással, mert ekkor ügyelni kell arra, hogy azonos karakter reprezentációt használjanak (ASCII). Amennyiben összetettebb karakterlánc ábrázolással rendelkeznek (például Visual Studio System::String), akkor figyelni kell az esetleges különböző láthatatlan karakterekre, például egy karakterlánc-végejel. Ez olyan problémát okozhat, hogy a visszaalakítás után nem tudjuk, van-e ilyen jel, és ha van, milyen karakter lehet, mert nem ismerjük a másik oldal reprezentációját. Ennek a hibalehetőségnek a kiküszöbölésére minden üzenet végére egy saját üzenet-végejel kerül ($), és visszaalakításkor mindig levágjuk az utolsó karakter. Így, ha $ jel van az üzenet végén, tudjuk, hogy azt nem kell figyelembe venni, viszont biztos nem veszik el hasznos információ a kommunikáció alatt.
28.
Üzenetek felépítése A hálózati kommunikáció során használt üzenetek első két karaktere azonosítja a parancsot. Ezután bizonyos utasítások esetén egy #-vel elválasztva áll a paraméter, ami 6 karakteren kerül ábrázolásra. Típus
parancs
paraméter
M[id]
van
W[id]
van
H[id]
nincs
Mozgatás pozitív irányba a paraméterben meghatározott mértékben Mozgatás negatív irányba a paraméterben meghatározott mértékben Home pozícióba küldés
S[id]
nincs
Az adott PowerCube azonnali leállítása
S9
nincs
Az összes PowerCube leállítása
G[id]
nincs
A0
van
OK
nincs
VA
nincs
ER
nincs
Hálózati
HE
nincs
kommunikáció
EX
nincs
Mozgatás
Információ lekérés
Válasz
jelentés
Az adott PowerCube aktuális helyzetének lekérése Minden rendben válasz, ha információ küldése is szükséges Általános minden rendben válasz Válasz, ha a parancs helyes, de nem végrehajtható Válasz hiba vagy hibás parancs Kliens és Szerver kezdő üzenete kapcsolódáskor Kliens jelzése, hogy lekapcsolódik
Az [id] egy 0 és 4 közötti szám, ami egy-egy PowerCube azonosítója
4.4 Grafikus felhasználói felület A felhasználóval való kommunikációt a Form1 osztály oldja meg: figyeli a grafikus felületen történt eseményeket és azok hatására meghívja a szükséges alprogramokat. Ezen részprogramok ennek az osztálynak a grafikus objektumai segítségével, illetve fájlba való mentésével tudnak visszajelezni.
29.
4.5. ábra A szerver grafikus felülete
A felhasználói felületet funkciója szerint hét külön álló részre oszthatjuk fel, melyek panelek használatával összefogják az irányításhoz szükséges grafikus elemeket (gomb, szövegmező). A panelek segítségével a későbbiekben a vezérlő felületek helyzete könnyen megváltoztatható lesz, illetve a határvonaluk egyértelműen eldönti, melyik vezérlőszerkezet melyik funkcionalitás csoporthoz tartozik. A felhasználói felület készítésekor ügyeltem arra, hogy mindig csak az adott állapotban értelmezhető vezérlőgombok legyenek aktívak, például ne kérhessük a programot fénykép készítésére addig, amíg nem kapcsoltuk be a kamerát.
Képmegjelenítés A megjelenített ablak legnagyobb területét a 640x480–as felbontású képmegjelenítő doboz adja. Ennek a segítségével tudjuk az aktuálisan vizsgált munkatér területét a felhasználó számára is láthatóvá tenni, illetve lehetőséget ad a képfeldolgozás eredményének megtekintésére.
30.
Önálló feladat végrehajtás A képmegjelenítő doboz alatt helyezkedik el az automatizált működést elindító és kezelő gombok. Ezen menüpontok nem lesznek aktívak egészen addig, amíg a léptetőasztalt és a webkamerát nem sikerült inicializálnunk. Itt van lehetőségünk a Save Picture feliratú gomb segítségével képfájlba menteni az éppen aktuálisan megjelenített képet. A fájl neve a mellette található szövegdoboz segítségével változtatható. A másik három gomb segítségével indíthatjuk el az önállóan lefutó algoritmusokat: objektumkeresés indítása(Auto Scan), objektumosztályozás indítása (Auto Detect), tervező programmal kommunikáló hálózati kapcsolat elindítása(Send). Mivel ezek a műveletek csak ilyen sorrendben hajthatóak végre, ezért ezek közül mindig csak egy aktív.
Demo lefuttatása Az automatizált feladatok vezérlését végző felületrész alatt találjuk a képfeldolgozó programrész működésének szemléltetését lehetővé tevő utasításokat. A listadobozból kiválasztott, majd betöltött (Load Picture) kép megjelenik a képkijelzőn és lehetőségünk van ezen lefutatni az objektumkereső (Scan) és az objektumosztályozó (Detect) algoritmusokat. Ezek lépésről lépésre kirajzolják az algoritmus egyes lépéseinek eredményét. A következő lépést mindig a Next Step gomb segítségével tudjuk elindítani. Ezen műveletek akkor is végrehajthatóak, ha sem a léptetőasztal, sem a kamera nincs még bekapcsolva.
Inicializálás A jobb oldali vezérlő panelek közül a legfelső felelős a léptetőasztal elindításáért. A gomb megnyomásának hatására a szoftver megpróbálja felvenni a CAN-porton keresztül a kapcsolatot a léptetőasztal aktuátoraival. Amennyiben sikerült, akkor következő lépésben a robotkaron elhelyezett szenzorokat irányító microchippel alakít ki kommunikációs csatornát. Amennyiben ez is sikeres, a kezelő felületen az összes irányításért felelős gomb aktív lesz. Ha csak a szenzorok élesítése volt sikertelen, akkor a léptetőasztal csökkentett módban fut, azaz a legtöbb feladat elvégezhető rajta, viszont figyelmeztet, hogy az ütközésdetekció nem aktív, így kevésbé biztonságos a használata, illetve a felismerhető építőelemek száma csökken.
Szerverirányítás A léptetőasztalt vezérlő szerver irányítófelülete jobb oldalt, közvetlenül az inicializáció alatt helyezkedik el. Itt van lehetőségünk elindítani (Start) illetve leállítani (Stop) a robotkar távvezérlését. A hálózati kommunikáción alapuló irányítás alatt nincs lehetőségünk a szerveroldali irányítófelület használatára, ezzel biztosítva a konzisztens működést. A szerver
31.
állapotát indítás után folyamatosan követhetjük a felső kijelzőn, így tudhatjuk, van-e csatlakozott kliens, vagy nincs. Az alsó kijelzőn láthatjuk a klienstől kapott utolsó irányítóparancs kódját.
Webkamera irányítása A hálózati kapcsolat vezérlésért felelős modul alatt találjuk a webkamera kezelését irányító panelt. Ezen a felületen lehetőségünk van a kamerát elindítani (Start) illetve ha már nincs rá szükség, akkor leállítani (Stop). Amennyiben aktív a kameránk, akkor készíthetünk egy pillanatfelvételt (Capture), és ez a kép megjelenik a képmegjelenítő dobozban. Lehetőségünk van a kamerától folyamatos képet is kérni. Ez a kép egy külön ablakban jelenik meg, ezáltal teljesen párhuzamos tud futni a vezérlőszoftverrel, és nem okoz semmilyen szinkronizációs problémát.
Léptetőasztal irányítása A jobboldali kezelő felületek közül a legalsó és a legnagyobb a léptetőasztal manuális irányításáért és aktuális állapotának kijelzéséért felelős. A legelső listadobozból választhatjuk ki a mozgatás pontosságát, azaz mekkora mértékben szeretnénk elmozdítani az adott PowerCube-ot. A nyilakkal jelzett gombok megnyomásának hatására a robotkar irányításáért felelős programrészlet kap a hálózati protokollnak megfelelő parancsot. A betűket tartalmazó vezérlők az aktuátorokat visszaküldik a Home pozíciójukba. A felhasználónak lehetősége van a teljes léptetőasztal leállítására (Stop) amennyiben ezt szükségesnek látja. A felület alján találhatóak a robotkar aktuális állapotát jelző indikátorok. A szövegmezőkben a helyzetüket láthatjuk, míg a jelölő mezők arról tájékoztatnak minket, hogy az adott aktuátor mozgásban van-e, vagy áll.
4.5 Képfeldolgozó modul A webkamera által készített képek feldolgozásáért és elemzéséért az ObjectSearcher osztály egy példánya felelős. Ez a program részlet végzi el a későbbikben részletesen leírt képfeldolgozási algoritmusokat és számolja ki az objektumok pontos helyzetét. Ezen feladatokat az osztály által tartalmazott, kívülről nem meghívható függvények segítségével oldja meg. A nyilvános metódusai csak ezeket a függvényeket hívják meg a megfelelő sorrendben és a megfelelő paraméterekkel. A feldolgozás közben több értékre is szükségünk van, amit a program egy konfigurációs fájlból olvas be, így könnyen módosíthatóak ezek az adatok. Ezek konstans értékek a
32.
léptetőasztal felépítéséből következnek, például a kamera és fogókar egymáshoz viszonyított helyzete, illetve a munkaterület pontos helye és mérete. Ez a szoftverrész nem csak feldolgozza az adatokat, hanem tárolja is a megtalált építőelemek helyzetét és tulajdonságait, így nincs szükség ehhez külön modulra. Mivel ezeket az adatokat csak a képfeldolgozás hatására lehet változtatni, ezért nincs szükség az adatok kívülről való közvetlen módosítására.
4.6 Automatizált algoritmusok 4.6.1. Önálló építőelem keresés és felismerés Az automatizált műveletek végrehajtásához szükségünk van a léptetőasztal-irányító, a webkamera-kezelő és a képfeldolgozó programrész összehangolt működéséhez. Ezek az objektumok nem tudnak kölcsönösen egymásról, ezért kell használnunk egy ezeket vezérlő és egységesítő szoftvermodult. A program főosztálya (form1) tartalmazza az összes objektumot, mégis létrehoztam egy teljesen új osztályt a feladat végrehajtására. Ezzel elértem, hogy az objektum-orientált programozás szemléletéhez közelálló program keletkezzen, azaz minden feladatot ellátó programrész egyértelműen elhatárolódjon, és csak a meghatározott interfészeken keresztül kommunikáljon egymással.
4.6.2 Kommunikáció a tervező programmal Miután a programunk alkalmas önállóan megtalálni a rendelkezésre álló építőelemeket, és képes biztonságosan irányítani a robotkart, már csak le kell kérdeznie a szükséges építési tervet egy külső, háromdimenziós tervezőprogramtól. Mivel a tervezőprogram nincs beleépítve a szoftverbe, ezért szükségük van a két program összekapcsolására. Ennek megoldása két módon lehetséges: offline, azaz fájl írás-olvasás segítségével, illetve online, közvetlen hálózati kapcsolattal. Offline mód esetén nincs szükség arra, hogy a két gép között közvetlen kapcsolatot építsük ki. Ebben ez esetben a fájlt manuálisan kell átvinni a gépek között, ami önmagában nem okoz nagy problémát. A gondot az okozza, hogy amíg a tervező dolgozik, nem szabad, hogy a munkaterületen bármi változás történjen, mert akkor a kapott terv nem lesz végrehajtható. Online kapcsolat esetén, a hiba valószínűsége sokkal kisebb, mivel azonnal megjelenik a feltérképezés eredménye, és a tervezés után egyből megkapja a szoftver az építési tervet.
33.
Az építőelemek tulajdonságainak átvitele a hálózaton karakterláncok segítségével történik. Minden karakterlánc egy-egy építőelemet reprezentál a következő módon: 9 számot tartalmaz üres hellyel elválasztva: [ID] [BT] [S] [X] [Y] [Z] [R] [O] [C] ahol: ID: Az építőelem egyedi azonosítója BT: Az építőelem alaptípusa: (téglatest, kocka, henger, tető, hídelem) S: Az építőelem mérete (kis, közepes, nagy) X: Az építőelem X koordinátája Y: Az építőelem Y koordinátája Z: Az építőelem Z koordinátája R: Az építőelem helyzete a vízszinteshez képest O: Az építő elem orientáltsága (melyik lapján fekszik) C: Az építőelem színe A tervezőtől kapott építési tervben ugyanezek a sorok szerepelnek, csak a végéhez kapcsolódik még négy darab szám, ami a terv alapján az új pozíciót határozza meg: [ID] [BT] [S] [X] [Y] [Z] [R] [O] [C] [nX] [nY] [nZ] [nR] nX: Az új X pozíció nY: Az új Y pozíció nZ: Az új Z pozíció nR: Az új rotáció érték
34.
5. Objektum felismerés 5.1 Építőelemek Az építőelem készlet fából készült, különböző alakú és színű építőkockákból áll. Előforduló színek: piros, sárga, kék és zöld. Az alak és a szín között nincs kapcsolat, így bármilyen kombinációjú elem megjelenésére számítani kell a keresés során.
5.1. ábra Az építőelemek lehetséges formái
5.2 Keresési módszer Az építési feladat legelső lépése az, hogy felmérjük, milyen építőelemek állnak rendelkezésre az aktuális építéshez és ezeknek meghatározzuk a pontos helyzetét. Mivel statikus, iparihoz hasonló környezetben dolgozunk, ezért vannak feltételezéseink a keresendő objektumokról: A munkaterületen található tárgyak mindegyike a megadott építőelem készletből kerül ki és ezeken kívül más tárgy vagy akadály nem található a munkatérben. A szükséges objektumok nem lógnak ki a munkaterületről Az építőkockák nincsenek egymáson, hanem egymás mellett helyezkednek el, legalább akkora távolságban, hogy a manipulátor által megfoghatóak legyenek. A munkaterület megvilágítása elégséges ahhoz, hogy a színek megkülönböztethetőek legyenek. Az építőelemek helyzete a művelet során csak a robotkar hatására változhat meg, más mozgató hatás nem lép fel
A keresés fő lépései Az objektumok keresésének két fő lépése van. Először az egész munkateret feltérképezzük, és meghatározzuk az objektumok körülbelüli helyét. Ehhez a munkaterületet egyenlő méretű területrészekre bontjuk és mindegyik ilyen részről készítünk egy fényképet. A terület méretét úgy határozzuk meg, hogy
35.
mindenképp beleférjen egy képbe. Ezeken a fotókon megkeressük a lehetséges építőelemeket és durván megbecsüljük a helyzetüket. Az összes kép feldolgozása után megnézzük a talált objektumokat, és kiszűrjük a képek átfedése miatt többszörösen látott elemeket. A képeken az objektumok pontos felismerése nem lehetséges, mivel az építő elemek színe nem teljesen homogén, ezért nagyon nehéz eldönteni, meddig ér az építőelem teteje és mennyire látjuk az oldalát. Miután a lehetséges elemek helyét nagyjából ismerjük, elkezdődik a felismerés második fázisa. Minden egyes elem fölé pozícionáljuk a robotkar kameráját és függőleges helyzetből készítünk róla egy képet. Ezen a képen már pontosan meghatározhatóak az építőelem tulajdonságai. Mivel néhány különböző elem felülről nézve ugyanolyan formát mutat, ezért ezek pontos azonosításához a távolságmérő szenzort is használjuk. Ezen adatokból már biztosan tudjuk osztályozni ez elemeket.
5.3 Alaplépések Világosítás A világosítás során a kép fényerejét növeljük. Ennek több különböző formája lehet: lehet részleges, azaz a kép csak bizonyos részét világosítjuk ki, a többit változatlanul hagyjuk, vagy lehet teljes, azaz az egész képet ugyanazon világosítási függvénnyel változtatjuk. A színváltoztatás lehet konstans, azaz minden színt ugyanakkora mértékben módosítjuk, vagy lehet az aktuális világosságának valamilyen függvénye. Jelen képfeldolgozási esetekben ez utóbbit fogjuk alkalmazni, olyan módon, hogy a szín minden komponensének értékét 10%-kal növeljük. Így a sötét részek kevésbé, a világos részek nagyobb mértékben fognak változni. Ez jelentősen megnöveli a sötét-világos tárgyhatárok kontrasztját, így megkönnyíti a világos háttér előtti színes objektumok felismerését.
Munkaterület kivágása A léptetőasztal alatt egy fehér téglalap alakú terület határozza meg a munkaterületet. Erre azért volt szükség, mert a léptetőasztal alatta lévő, famintás felület nagyon megnehezítette volna az objektum körvonalainak felismerését, mivel függőleges csíkos és nem homogén. A fehér lap azonban erős kontrasztot biztosít a színes építőelemeknek. A munkaterület azonban nem fedi le teljesen a léptetőasztal alapját, így a szélén készült felvételeken láthatóvá válik a famintázat. Ezeket a területeket könnyű levágni, mert biztos, hogy a kép szélén helyezkednek el, és biztos, hogy a fehér határvonalnál van végük. Ezért a levágáshoz egy rekurzív algoritmust használ a szoftver. Minden sarokból pontonként elindul és ha nem fehér, akkor fehérré teszi a pontot. Ezután átlép azokra a szomszédos pixelekre,
36.
ahol még nem járt. Ezt addig végzi, amíg mindenhol fehér pontra nem fut. Mivel a munkaterület oldalai párhuzamosak a kép széleivel, ezért ez a módszer biztos, hogy minden famintázatú részt kitöröl. Viszont annak is meg van a veszélye, hogy a kép szélén túllógó objektumot is kitörli. Erre majd a felismerési algoritmusokban figyelni kell.
Színtelenítés A legtöbb és leghatékonyabb képfeldolgozási módszerek szürkeárnyalatos képekre vannak kidolgozva, ezért érdemes a felvételünket színteleníteni. Ha a művelet előtt eltároljuk az objektumaink színét, akkor ez a művelete nem okoz információ veszteséget. Mivel igazából két fontos dolgot akarunk megkülönböztetni: építőelemek és háttér, ezért a fotókat binarizálhatjuk is, azaz az objektumokat tartalmazó képpontok feketék lesznek, a háttér pedig fehér.
Objektumok detektálása A bináris képünkön fehér alapon fekete objektumok maradtak. Ezeket el kell különítenünk egymástól és mindegyikről meg kell becsülnünk a körülbelüli helyzetüket a további számoláshoz. Ez a probléma megegyezik a sziget keresési probléma módosított változatával, ahol egy képen összefüggő szigeteket keresünk. Ezen feladat megoldására az egyik lehetőség az, ha sorfolytonosan haladunk a képen, és ha egy objektum elemet találunk (fekete pont), akkor egy számot rendelünk hozzá, és egy rekurzív eljárással az összes ehhez kapcsolódó pontnak is ezt az értéket adjuk, és közben ezeket a pontokat átszínezzük, hogy tudjuk, már megtaláltuk őket. Ezután tovább folyik a fekete pontok keresése, addig, amíg a kezdő sarokkal átellenes sarokba nem érünk. Végeredményben az azonos számmal jelzett pontok tartoznak egy építőelemhez, így ezután könnyen tudjuk tovább folytatni az elemzést.
5.4 Képfeldolgozási algoritmus 5.4.1. Munkaterület feltérképezése A
munkaterület
feltérképezésének
célja
a
lehetséges
objektumok
helyének
meghatározása. Mivel a cél, hogy minden objektumot megtaláljunk, ezért a képfeldolgozási algoritmus határértékei engedékenyebbek, hogy biztosan észrevegyen minden elemet. Inkább minden lehetségest megtaláljon, minthogy egy is kimaradjon. Ezt a célt szolgálja az átfedő képek készítése is.
37.
A fotó elkészülése után lefutattunk egy konstans világosító eljárást, ezáltal a fehér munkaterület és az építőelemek, valamint a fafelület kontrasztja erősödni fog, ezzel pontosabbá téve az ezután következő műveleteket. A világosítás után levágjuk a képről az esetlegesen belátszódó fafelületet, mivel ez a rész csak nehezítené a későbbi elemzést. Ezután biztosan tudjuk, hogy ami a fehérhez közelálló szín, az a munkaterület, ami nem az építőelem. Így már egy egyszerű határvonal felállítása után könnyű binarizálni a képet. A bináris képen meghatározzuk, minden egyes fekete pixelről, hogy melyik objektumhoz tartozik. Ezután a lehetséges építőelemhez tartozó képpontok koordinátáit súlyozás nélkül átlagoljuk, ezzel megkapjuk a középpontjának körülbelüli helyét. Amennyiben egy objektumnak egy bizonyos számnál kevesebb pontja van, az vagy egy hiba eredménye vagy egy építőelem részlete, ami nem fért bele a képbe. Mindkét esetben ez a jelölt elhagyható a lehetséges objektumok halmazából. Ugyanúgy hibára utal, ha a munkaterületen kívül talál az algoritmus lehetséges építőelemet. A munkaterület feltérképezése után, mikor az összes kép feldolgozásra került, végig nézzük a talált objektumokat tároló adatszerkezetet, és ugyanazon építőelem többszöri megtalálását kiszűrjük. Mivel az elemek nem lehetnek tetszőleges közel egymáshoz, így ha két jelölt középpontja egy bizonyos távolságnál kisebb, akkor ugyanarról az objektumról van szó és csak egyiket kell figyelembe vennünk. A jelöltek megtalálásakor megjelöljük azokat az elemeket, amelyeket a kép szélén találtunk, így mikor dönteni kell, hogy melyik jelölt maradjon, akkor azt fogjuk választani, amelyik nincs megjelölve.
5.2. ábra A munkaterület feltérképezésének algoritmusa
5.4.2. Objektumosztályozás Az objektum pontos osztályozásához használt képfeldolgozási algoritmus sokban hasonlít a feltérképezéskor használtra. Ugyanúgy a képvilágosítása után levágjuk a fölösleges, munkaterületről kilógó részeket és a maradékot binarizáljuk. Ezután azonban egészen más szempontból vizsgáljuk a képet. Mivel tudjuk, hogy a meghatározandó objektum a kép közepén helyezkedik el, ezért egyedül ezt tartjuk meg, a többi fekete pontból álló alakzatot eltüntetjük. Az objektum keresése hasonlóan működik, mint az összes építőelemet felderítő algoritmus esetén, csak itt egyedül a kép közepét vizsgáljuk, és ha egy tárgyat találtunk, akkor megállunk. Ennek a keresése közben megjegyezzük a legszélső pontok koordinátáit, ezáltal megkapva annak a
38.
legkisebb téglalapnak az oldalait, amiben benne van a talált objektum. Az osztályozáshoz szükséges adatok meghatározásához már csak ezen a téglalapon kell a metódusainkat lefutatni.
5.3. ábra Az objektumok osztályozása
Az építő elem pontos meghatározásához a következő adatokat kell kiszámolnunk:
Pozíció Az
építőelem
pontos
helyzetének
meghatározásához
kihasználjuk azt, hogy már korábbi műveleteinkből ismerjük az objektum körüli téglalap adatait. Ennek a síkidomnak a középpontja megegyezik az építőelem középpontjával, így az oldalak helyzetének átlaga megadja a képi koordinátákban adott középpontot. (5.4. ábra)
5.4. ábra
Sikerült meghatároznunk az objektum középpontját a képen. Most ki kell számolnunk, hogy ez hol helyezkedik el a munkaterületen, hogy tovább tudjunk dolgozni vele. Mivel ismerjük a léptetőasztal pontos helyzetének koordinátáit a kép készítésekor, tudjuk a kamera és a fogókar (azaz a manipulátor) közötti eltolás mértékét, és mivel mindig ugyan olyan magasságban készítjük a képeket, ezért ismerjük a képpixel milliméter átváltás mértékét is. Ezekből az adatokból ki tudjuk számítani a robotkar koordinátarendszerbeli koordinátáit, figyelembe véve, hogy a képen az origó a bal felső sarokban van, míg a léptetőasztalon a jobb felső sarokban. Az átszámítási képletek a következők:
Ahol: (xpixel ;ypixel ) (X , Y) (XWebCam;YWebCam) (Xpic;Ypic) Cmm/pixel
Az objektum középpontjának képkoordinátája pixelben Az objektum munkatérbeli helyzetének koordinátája A kamera és fogókar középpontjának különbség vektora A kép készülésének koordinátája Átváltási érték pixel és mm között
Rotáció A rotáció, azaz a vízszintessel bezárt szög kiszámításához szükségünk van a téglalap csúcsainak meghatározásához. Mivel ismerjük a körülíró téglalapot, ezért ahol az érintkezik az objektummal, ott van a csúcspont. Viszont ha közel párhuzamosan áll az építőelem az építési terület szélével, akkor több érintkezési pontja is lehet. Ekkor kevés pont esetén a középső pont, sok pont esetén a legszélső pont határozza meg legjobban a csúcspontot.
39.
A csúcspontok meghatározása után tangens függvény segítségével kiszámíthatjuk az elfordulás szögét:
Ahol: Φrot
Az elfordultság mértéke
A és B
Két szomszédos csúcs
tan2()
Módosított tangens függvény
Szín Az építőelem színének meghatározása még a képbinarizálás előtt megtörténik. A kép közepén lévő 20x20 pixeles téglalapban átlagoljuk a nem fehér pixelek színkomponenseit. Az így kapott színt klasszifikálja a lehetséges 4 színre. Ezzel a módszerrel nagypontossággal meghatározható az építőelem színe: megfelelő megvilágítás esetén egyértelműen el tudjuk dönteni, milyen színű.
Típus Az építő elem típusának meghatározásához a felismert objektum oldal hosszait, területét és szükség esetén a magasságát használjuk. A detektálás több lépésben történik: Először kiszámítjuk az alakzatunk becsült területét. Ezt a fekete pixelek számával tudjuk megoldani. A pixelek számát megszorozzuk a Cmm/pixel konstans négyzetével, így megkapjuk az alakzatunk becsült területét mm2-ben. Ezután megnézzük, hogy különleges alakzatot látunk-e és ha igen, akkor a kiszámolt terület meghatározza, hogy kör, vagy háromszög. Ebben az esetben nem kell tovább vizsgálni az alakzatot, mivel a nem téglalap felszínű építőelemeknek csak egy féle alakja lehet. Téglalap esetén meghatározzuk a csúcspontokat. A szomszédos csúcspontok távolságából meghatározzuk a téglalap négy oldalát. Az egymással szemben lévő oldalak átlagának segítségével kiszámítjuk, milyen méretű téglalapot vizsgálunk. A két oldalhossz meghatározása után megtudhatjuk a terület pontosabb értékét (T = a * b), amely megkönnyíti az osztályozást. Abban az esetben, ha ehhez az alakhoz több féle magasság is tartozhat, abban az esetben a távolságmérő segítségével meghatározzuk az objektumunk magasságát. Ezen értékek már elegendőek ahhoz, hogy egyértelműen felismerjük az építőelemünket.
40.
6. Értékelés, mérési eredmények 6.1 Pixel milliméter átváltás Ahhoz, hogy a fénykép feldolgozása után a megszerzett információkat a léptetőasztal koordináta rendszerébe tudjuk konvertálni, szükséges a Cmm/pixel konstans meghatározása. Ehhez előzetes méréséket kell végezünk, melyekből meghatározzuk az értékét. A mérés során a kamera magassága nem változik, mindig alaphelyzetében lesz, így a számolt érték ehhez a magassághoz
fog tartozni. Más
magasságok esetén
ebből
az
értékből
könnyen
meghatározhatjuk az aktuális arányszámot.
6.1. ábra Kalibrációs ábra
A méréshez egy kalibrációs képet használunk, melyen különböző hosszú és különböző területű alakzatok találhatóak (6.1. ábra). A síkidomok hasonlítanak mint méretben, mint alakban a várható építőelemekhez. Mivel ezek méreteit ismerjük milliméterben, ezért ha a készült fotó segítségével kiszámoljuk őket pixelben is, akkor abból könnyen megkapjuk az arányossági tényezőt:
A négyzetnél, a téglalapnál és a körnél a síkidom területét számítottuk ki pixelben, többféle szögbe fordítva a lapot. A számolt értékek az alábbi táblázatban láthatóak:
Alakzat
Valódi méret (mm2)
Számolt méret (pixel)
Számolt méret szórása (pixel)
Cmm/pixel
négyzet
2500
8091
4
0,5558
téglalap
2400
7756
11
0,5563
kör
2827
9132
20
0,5564
41.
A hat darab párhuzamos téglalapnál a hosszukat számoltuk ki pixelben, egyszer függőleges, egyszer vízszintes elhelyezkedés esetén. A kapott értékek a következőek:
Vonal száma
Vonal hossza (mm)
Számolt 1 (pixel)
Számolt 2 (pixel)
Cmm/pixel
1 2 3 4 5 6
20 30 40 50 60 70
35 54 72 89 106 126
35 53 71 89 107 125
0,5714 0,5607 0,5594 0,5618 0,5634 0,5578
Mérések eredménye A területmérés esetén, ahol a nagyobb méretek miatt csökkent a kvantálás (pixelek létrehozás) okozta hiba, a Cmm/pixel számolt értéke közelítőleg 0,556
értéket vett fel. A
hosszúság számolása esetén ennél nagyobb értékeket kaptunk, de az is megfigyelhető, hogy minél hosszabb alakzatot vettünk, annál inkább közelített a területszámolással meghatározott értékhez, ezért ezzel fogunk számolni. Az építőelemek méretének ezzel az értékkel való kiszámítása közben azonban minden esetben a valós méretnél körülbelül 3% nagyobb értéket kapunk, mivel nem tudunk teljesen pontosan felülről fotózni, ezért az oldalak is belelátszódnak a felületbe, ezzel megnövelve a képen a mért területet. Ezt minden esetben ki tudjuk szűrni az eredményből a mért érték megfelelő arányú csökkentésével és emiatt ez nem okoz hibát a terület meghatározásában.
6.2 Építőelemek megtalálása Az építőelemek felderítését végző algoritmus tervezésekor az volt a szempont, hogy minden építőelem pozícióját körülbelül határozza meg, így a gyenge feltételnek a külső hatásoktól függetlenül szinte minden esetben meg is tud felelni. Emellett a redundáns képi információ miatt az építőelem mindegyike több képen is szerepel, így annak a valószínűsége, hogy egy objektumot nem találunk meg nagyon kicsi. Ebből viszont az következik, hogy egy építőelemet többször is megtalálhatunk. Ezeket a redundáns találatokat ki kell szűrnünk. A szűrés távolság alapon működik, azaz ha két lehetséges építőelem jelölt túl közel van egymáshoz, akkor azt egynek tekintjük. Mivel az objektumok nem lehetnek tetszőleges közel egymáshoz, ezért egy megfelelő határérték esetén biztos nem vesztünk el a szűrés közben építőelemet. Az viszont előfordulhat, hogy egy hosszabb elem két végét két különböző jelöltként ismerjük fel, ha pont a felvételek határán volt található. Ez a hiba azonban az osztályozás során kijavítható, mert a klasszifikáció során
42.
megállapítjuk a két jelölt pontos helyzetét, és mindkét vég esetén ugyanazt az építőelemet kapjuk. Itt csak arra kell figyelnünk, hogy az építőelemek listájába csak egyszer kerüljön bele. Az építőelemek biztos megtalálásának egy hátránya van: a sok képfeldolgozási művelet sok időbe telik, így a feltérképezés időigényes művelet. Mivel azonban a feladat végrehajtás feltételeiben nem szerepel időkorlát, így ez számunkra nem jelent korlátozó tényezőt.
6.2.1 Egy felderítési eredmény A léptetőasztal alatt négy különböző színű építőelemet helyeztem el a munkaterületre. Mivel a mérés a feltérképezés hatékonyságát vizsgálja, ezért nem volt fontos tényező, hogy az objektumok különböző alakúak legyenek. A megadott munkaterület mérete miatt négy felvétel készült, melyeken végig futattuk a feltérképező algoritmust. Az elemzésből látható, hogy bár az egyes képekről nem szereztünk meg minden információt, ennek ellenére az összes felvétel elemzése után minden, a munkaterületen található objektum feltérképezésre került és minden feltétel adott, hogy a program továbbfusson és megpróbálja osztályozni a talált objektumokat.
1. Felvétel
6.2. ábra Felderítés, első kép és eredmény
Az első felvétel elemzése révén a következő információkkal gazdagodtunk: Találtunk egy építőelemet (kék) és egy részleges objektumot (sárga). Azoknak az objektumoknak a középpontját, melyeket teljes egészben látunk, jelöljük pirossal, amelyek a kép szélén helyezkednek el, jelöljük kékkel. Mind a kettő középpontjának koordinátáját bevesszük a jelöltek közé.
43.
2. Felvétel:
6.3. ábra Felderítés, második kép és eredmény
A második felvétel feldolgozása után három új építőelem-jelöltünk lett. Ezek közül az egyik már szerepelt (kék), mivel a középpontjának koordinátái már a jelöltek között van, így ezzel nem törődünk. Egy másik (sárga) az előző kép szélén már szerepelt, de mivel jelen esetben az egész objektum szerepel a képen, így biztosabban meghatározható a középpontja, ezért a korábbi jelöltet kivesszük, és ezt tesszük a helyére. A harmadik (zöld) még nem szerepelt, így felvesszük a jelöltek közé.
3. Felvétel
6.4. ábra Felderítés, harmadik kép és eredmény
A harmadik felvétel elemzésével ismét három új lehetőség adódik építőelem pozícióra. Az első (kék) már szerepel a jelöltek között, így továbbra is figyelmen kívül hagyjuk. A másik (zöld) csak részleges, ráadásul már ő is szerepelt, így vele sem foglalkozunk. A harmadik (piros) viszont még nem szerepelt, így bővítjük vele az eddig megtalált építőelemek halmazát.
44.
4. Felvétel
6.5. ábra Felderítés, negyedik kép és eredmény
A teljes munkaterület felderítéséhez szükségünk van még egy negyedik kép elemzésére is. Az elemzés 4 objektumot is talál a képen, de mivel mindegyik középpontjának koordinátája szerepelt már, ezért nem nő a jelöltek száma.
6.3 Építőelemek osztályozása Az építőelemek felismerésénél megpróbáljuk a legmegfelelőbb körülményeket biztosítani azzal, hogy pontosan felülről készítjük a felvételt róluk. Mivel azonban ez nem mindig sikerül pontosan, ezért előfordul, hogy az építőelem oldala is kis mértékben láthatóvá válik. Ez a hiba azonban nem annyira súlyos, hogy nagymértékben zavarná az osztályozást. Az oldal láthatósága csak megnöveli az észlelt felület nagyságát. Szerencsére ez a méretnövekedés az esetek nagy részében nem számottevő a tényleges felület méretéhez képest, így nem rontja a felismerésünket. A feltérképezési algoritmussal ellentétben a klasszifikáció sikerességét nagymértékben befolyásolják a fényviszonyok. Amennyiben nincs megfelelő mennyiségű fény, vagy a fény nem eléggé szórt, akkor az árnyékok zavarják vagy szélsőséges esetben meg is akadályozzák az építőelem felismerését. Amennyiben kevés fénnyel világítjuk meg a munkaterületünket, abban az esetben a színek eltolódnak a szürke felé, így például a zöld és kék színeket már nem lehet megkülönböztetni egymástól. Alacsony megvilágítás esetén az árnyékok is hangsúlyosabbak lesznek a képen, és így a színeltolódással együtt már lehetetlenné teszik az építőelem és árnyékának elhatárolását.
45.
6.3.1 Osztályozási eredmények Első mérés
6.6. ábra Osztályozás, első példa
Rövidebb oldal Hosszabb oldal Terület Szín
Számolt érték 33,46 mm 33,48 mm 1120,24 mm2 #003E14
Valós érték 33,3 mm 33,3 mm 1108,9 mm2 Zöld
Eltérés 1% 1% 1% Felismerhető
Az eredményekből látható, hogy jelen esetben tökéletesen sikerült a felismerés, mivel a fényviszonyok megfelelőek voltak.
Második mérés
6.7. ábra Osztályozás, második példa
Rövidebb oldal Hosszabb oldal Terület Szín
Számolt érték 15,12 mm 103,14 mm 1559,48 mm2 #D7171A
Valós érték 16,6 mm 100 mm 1660 mm2 Piros
Eltérés 9% 3% 6% Felismerhető
Az eredményekből látható, hogy jelen esetben is sikeres a felismerés, annak ellenére, hogy az építőelem árnyéka már kis mértékben megzavarta az osztályozást.
46.
Harmadik mérés
6.8. ábra Osztályozás, harmadik példa
Rövidebb oldal Hosszabb oldal Terület Szín
Számolt érték 31,32 mm 64,8 mm 2029,54 mm2 #D9AB00
Valós érték 33,3 mm 66,6 mm 2217,78 mm2 Sárga
Eltérés 6% 3% 9% Felismerhető
Az eredmények itt már nem annyira pontosak, de mivel ennek az értéknek a közelében nincs másik lehetséges építőelemhez tartozó méret, ezért képesek vagyunk pontosan megállapítani a típusát.
Negyedik mérés
6.9. ábra Osztályozás, negyedik példa
A képfeldolgozás eredményén jól látható, hogy sikeres felderítettük, hogy egy kör felületünk van. A távolságmérő szenzor méréseinek vizsgálata után a magasságát is el tudjuk dönteni. A kép készülésekor azonban nem voltak megfelelőek a fényviszonyok, ezért az építőelem színe közel esik a szürkéhez, ezért nem tudjuk biztosan eldönteni, hogy kék vagy zöld színű-e az adott objektum.
47.
Ötödik mérés
6.10. ábra Osztályozás, ötödik példa
Rövidebb oldal Hosszabb oldal Terület Szín
Számolt érték 35,62 mm 74,46 mm 2652,26 mm2 #9C0000
Valós érték 33,3 mm 100 mm 3300 mm2 piros
Eltérés 7% 25 % 20 % Felismerhető
A mérési eredményekből jól látható, hogy jelen esetben az osztályozásunk nem volt sikeres. Hiába az egyik legkönnyebben felismerhető építőelemet vizsgáltuk, a kép sötétsége miatt rosszul határoztuk meg a csúcspontokat, és a kiszámolt oldalhosszakból más építőelemre következtethetünk.
6.4 Továbbfejlesztési lehetőségek Mint a korábbiakban kifejtettem, az objektumosztályozási algoritmus nem minden esetben volt képes az építőelem típusának a meghatározására. Ennek oka legtöbbször az elégtelen megvilágításból adódott. Ezt a hatás csökkenthetjük, ha a világosítás során előre megvizsgáljuk a képet, és ez alapján a képet többféle algoritmus segítségével javítjuk. Ehhez azonban a képfeldolgozási eljárást gyorsítani kell, mert így is az egyik gyenge pont az időigény, és az előfeldolgozás hatására a program még jobban lelassulna. Ha az irányítószoftvertben több, jól szinkronizált szálat használnánk, akkor a program grafikus felülete dinamikusabb futásra lenne képes, és bizonyos műveletek időigénye csökkenne, mivel a szálak segítségével a fölösleges várakozási idők megszüntethetőek lennének.
48.
Összefoglalás
A diplomamunkám célja az volt, hogy megismerkedjem az ipari robotika objektum mozgatási feladatainak nehézségeivel és egy léptetőasztal segítségével olyan algoritmusokat tervezzek és implementáljak, amelyek megkönnyíthetik egy automatizált építési probléma megoldását. A léptetőasztal precíz irányításának elsajátítása a robotika egyéb területein is hasznos lehet, hiszen sok helyen szükséges a pontosan irányított, meghatározott pálya mentén történő mozgatás (például szenzorok karakterisztikájának kimérésekor). Az irányító szoftver fejlesztése közben megismerkedtem a Microsoft Visual Studio fejlesztő környezetével, alapokat szereztem a .net programozásból, és megoldottam a C++ és .net környezet integrálásából adódó problémákat. A megszerzett tudásom a későbbiekben hasznos lehet hasonló környezetekben történő fejlesztéseknél.
49.
Köszönetnyilvánítás Köszönettel tartozom konzulensemnek, dr. Cserey Györgynek, aki útmutatásával és problémafelvetéseivel nagyban segítette a diplomamunkám elkészítését. Köszönettel tartozom kollégámnak, Hiba Antalnak, akivel együtt közösen dolgoztunk azon, hogy a léptetőasztal képes legyen a kockákból az általunk kigondolt építményeket a feladatkiírásnak megfelelő módon összerakni. Köszönettel tartozom még a Pázmány Péter Katolikus Egyetem Információs Technológiai Karának Robotika laborjában dolgozó összes hallgatónak és doktorandusznak, akik mindig segítettek a problémák megoldásában és hasznos tanácsokkal láttak el a munkám folyamán.
50.
Irodalomjegyzék [1] Isak Karabegovic, Samir Vojic and Vlatko Dolecek “3D Vision in Industrial Robot Working Process” Faculty of Technical Engineering, Bosnia and Herzegowina, IEEE EPEPEMC 2006/6 1223-1226 [2] D. Naga Jyothi “Multi-View Technique for 3-D Robotic Object Recognition System using Neuro-Fuzzy Method” School of Computing and Information Technology Inti College Malaysia, Map India (2004) [3] William K. Pratt (2001) “Digital Image Processing “John Wiley &Sons Inc. ISBN: 0-47122132-5 [4] Amtec Robotics GmbH: Programmers guide for PowerCube [5] Amtec Robotics hivatalos honlapja www.amtec-robotics.com [6] Ajmal S. Mian, Mohammed Bennamoun, and Robyn Owens ”Three-Dimensional ModelBased Object Recognition and Segmentation in Cluttered Scenes” IEEE Transactions on pattern analysis and machine intelligence, 2006 no.10 1584-1601 [7] John Billingsley, Robin Bradbeer (2008) ”Mechatronics and Machine Vision in Practice” Springer, ISBN 978-3-540-74027-8 [8] L. Sciavicco and B. Siciliano(2000) “Modelling and Control of Robot Manipulators Advanced textbooks in Control and Signal Processing series” ISSN 1439-2232 Springer Science + Business Media ISBN 1-85233-221-2 1.2.3
51.
Ábrajegyzék 1.1. ábra: Két Descartes és egy hengeres manipulátor (forrás: PPKE-ITK Robotika előadás jegyzet 2009) 1.2. ábra: Gömbi, SCARA és Antropomorf manipulátor (forrás: PPKE-ITK Robotika előadás jegyzet 2009)
1.3. ábra: Kinematikai láncok 3.1. ábra: Hardverstruktúra 3.2. ábra: A CAN-busz soros felépítése 3.3. ábra: PowerCube-ok fajtái: lineáris, forgó, fogó (forrás: www.amtec-robotics.com) 3.4. ábra: A léptető asztal munkatere 4.1. ábra: Irányításért felelős osztályok kapcsolata 4.2. ábra: A szerver működése 4.3. ábra: Kliens grafikus felülete 4.4. ábra: Kliens működése 4.5. ábra: A szerver grafikus felülete 5.1. ábra: Az építőelemek lehetséges formái 5.2. ábra: A munkaterület feltérképezésének algoritmusa 5.3. ábra: Az objektumok osztályozása 5.4. ábra: Objektum köré rajzolt téglalappal 6.1. ábra: Kalibrációs ábra 6.2. ábra: Felderítés, első kép és eredmény 6.3. ábra: Felderítés, második kép és eredmény 6.4. ábra: Felderítés, harmadik kép és eredmény 6.5. ábra: Felderítés, negyedik kép és eredmény 6.6. ábra Osztályozás, első példa 6.7. ábra Osztályozás, második példa 6.8. ábra Osztályozás, harmadik példa 6.9. ábra Osztályozás, negyedik példa 6.10. ábra Osztályozás, ötödik példa
52.
Mellékletek Építőelem tulajdonság táblázat Szám hármas Név
főtípus típus irány
Alak (mm x mm)
Magasság (mm)
Felső felület (mm2)
Kis tégla, álló
1
1
1
16,6 x 33,3
33,3
552,8
Kis tégla, oldalán
1
1
2
16,6 x 33,3
33,3
552,8
Kis tégla, fekvő
1
1
3
33,3 x 33,3
16,5
1108,9
Közepes tégla, álló
1
2
1
16,6 x 33,3
66,7
552,8
Közepes tégla, oldalán
1
2
2
16,6 x 66,7
33,3
1107,2
Közepes tégla, fekvő
1
2
3
33,3 x 66,7
16,5
2221,1
Nagy tégla, álló
1
3
1
16,6 x 33,3
100
522,8
Nagy tégla, oldalán
1
3
2
16,6 x 100
33,3
1660
Nagy tégla, fekvő
1
3
3
33,3 x 100
16,5
3330
Kocka
2
0
0
33,3 x 33,3
33,3
1108,9
Kis henger, lapján
3
1
1
KÖR
33,3
865,7
Kis henger, oldalán
3
1
2
33,3 x 33,3
33,3
1108,9
Nagy henger, lapján
3
2
1
KÖR
66,7
865,7
Nagy henger, oldalán
3
2
2
33,3 x 66,7
33,3
1107,2
Tető, álló
4
0
1
33,3 x 47,1
23,5
1568,4
Tető, oldalán
4
0
2
33,3 x 33,3
33,3
1108,9
Tető, háromszögön
4
0
3
HÁROMSZÖG
33,3
554,4
Híd, normál
5
0
1
33,3 x 100
33,3
3330
Híd, kisebbik oldalán
5
0
2
33,3 x 33,3
100
1108,9
Híd, oldalán
5
0
3
HÍD
33,3
3041,5
Híd, a tetején
5
0
4
33,3 x 100
33,3
3330
53.
Szoftver diagram
A mellékelt ábrán a szoftver által tartalmazott osztályok (zárt vonal) és a külső eszközök (szaggatott vonal) kapcsolatát mutatja be. Amennyiben egy osztály használ egy másik típust, abban az esetben nyíllal vannak összekötve, a nyíl a használó fele mutat.
54.
UML Osztálydiagram
55.