Mendelova univerzita v Brně Provozně ekonomická fakulta
Systém ovládání robota Katana prostřednictvím programovacího jazyka C Bakalářská práce
Vedoucí práce: Ing. Radomír Křenovský
Eduard Tomášek
Brno, 2010
Prohlašuji, že jsem práci vypracoval samostatně s uvedením všech zdrojů v seznamu literatury.
V Brně, 25. 5. 2010
....................................................
4
Abstract Tomášek, E. System of control Katana robot via C programming language. Bachelor thesis. Brno, 2010 This bachelor thesis deals with description of Katana Native Interface and realization remote control of Katana robot over computer network.
Abstrakt Tomášek, E. Systém ovládání robota Katana prostřednictvím programovacího jazyka C. Bakalářská práce. Brno, 2010 Tato bakalářská práce se zabývá popisem rozhraní Katana Native Interface a realizací vzdáleného ovládání robotu Katana pomocí počítačové sítě.
5
OBSAH
Obsah 1 Úvod a cíl práce 1.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Cíl práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Katana 2.1 Základní popis . . . . . . 2.2 Mechanika . . . . . . . . . 2.3 Elektronika . . . . . . . . Adaptér . . . . . . . . . . Komunikační rozhraní . . 2.4 Nástroje . . . . . . . . . . Možnosti uchopení . . . . Senzory/Snímače . . . . . Infračervený snímač . . . . Snímač síly . . . . . . . . Snímač vodivosti . . . . . 2.5 Detekce kolize . . . . . . . Kontrola pozice . . . . . . Kontrola chyby rychlosti . 2.6 Souřadný systém . . . . . Světový souřadný systém . Souřadný systém základny Souřadný systém nástroje Eulerovy úhly . . . . . . . 2.7 Síly . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
7 7 8 9 9 10 10 10 12 12 13 14 14 14 14 15 15 15 15 16 16 17 18 19
3 Dostupné nástroje na správu 21 3.1 Katana4D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4 Navrhovaná architektura 4.1 Metodika řešení . . . . . . . . . 4.2 Použité technologie . . . . . . . KNI (Katana Native Interface) Jazyk C++ . . . . . . . . . . . QT4.6 . . . . . . . . . . . . . . XAMMP . . . . . . . . . . . . . WebCam Live 3.0 . . . . . . . . 4.3 Architektura klient-server . . . 4.4 Klient . . . . . . . . . . . . . . Funkce . . . . . . . . . . . . . . 4.5 Server . . . . . . . . . . . . . . 4.6 Komunikační protokol . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
22 22 22 22 24 24 25 25 25 27 28 30 31
6
OBSAH
5 Řešení 5.1 Klient . . . . . . . . . . . . . . . . . . . . . . . . Protředky pro síťové spojení . . . . . . . . . . . . Zpracování příchozích zpráv . . . . . . . . . . . . Řešení cyklických operací . . . . . . . . . . . . . . Získávání obrazu . . . . . . . . . . . . . . . . . . 5.2 Použití KNI . . . . . . . . . . . . . . . . . . . . . Připojení k robotu . . . . . . . . . . . . . . . . . Příkazy pro nastavení . . . . . . . . . . . . . . . . Zjišťování parametrů . . . . . . . . . . . . . . . . Příkazy pro manipulaci . . . . . . . . . . . . . . . 5.3 Server . . . . . . . . . . . . . . . . . . . . . . . . Inicializace Katany a spuštění serveru . . . . . . . Vytvoření serveru . . . . . . . . . . . . . . . . . . Zpracování nového spojení . . . . . . . . . . . . . Zpracování příchozích zpráv a přihlášení uživatele
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
34 34 34 34 35 36 36 37 39 39 41 42 42 43 43 44
6 Diskuze a závěr 45 6.1 Diskuze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.2 Závěr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 7 Literatura
47
1
ÚVOD A CíL PRÁCE
1 1.1
7
Úvod a cíl práce Úvod
Všeobecně je robot chápán jako mechanický stroj, který zastává podobné činnosti jako člověk. Především jsou to činnosti pohybové a manipulační. Jeho hlavní činností by měla být ulehčit práci člověku. Především práci, která vyžaduje opakování stále stejného postupu a nebo práci v prostředí člověku nebezpečném. Člověk se vždy snaží, nějakým způsobem si ulehčit práci. Proto vždy vymýšlel nějaké mechanické stroje, které mu nějakým způsobem ulehčovaly práci. Stěží by se tyto stroje dali považovat za roboty, ale jsou jistým vývojovým článkem dnešních robotů. O pravé robotice se dá uvažovat až s nástupem elektrotechniky. Samotné slovo robot a jeho definice se objevila v roce 1920 ve hře R.U.R. Karla Čapka. A první reálné aplikace, které spadají do oblasti robotiky se objevují v roce 1940, jako teleoperátory pro manipulaci s radioaktivním a jiným materiálem. Následný vývoj nabral rychlý spád a už v roce 1949 je zahájen výzkum numericky řízených obráběcích strojů. První průmyslově vyrábený robot, UNIMATE od firmy General Motors, přichází v roce 1961. Následuje zahajování různých výzkumných činností v oblasti elektrotechniky, umělé inteligence a dalších disciplín, které dovedly robotiku do stavu, jaký známe dnes. Soudobá moderní robotika je multidiciplinární obor zahrnující znalosti mechaniky, elektrotechniky, teorie řízení, měřící techniky, kybernetiky, umělé inteligence a mnoho dalších diciplín. Vývoj robotů se dá rozdělit do dvou hlavních proudů. První jsou roboty průmysloví, lekařští, záchranářští, výzkumní a další podobného typu. Tyto elektromechanické stroje jsou uzpůsobeny pro optimální provádění činnosti pro kterou byly vytvořeny. Na jejich vzhled ve většině případů není brán zřetel, hlavním požadavkem je efektivní funkčnost. Jako druzí jsou takzvaní androidi. Tyto roboty se snaží napodobit člověka nebo zvíře, jak vzhledově, tak funkčně. Nejznámnějším robotem tohoto typu je s největší pravděpodobností robot ASIMO představený firmou Honda v roce 2000. Nebo také robot AIBO od firmy Sony, který se snaží imitovat psa. Tito androidi, ačkoliv v dnešní době již dokážou různé činnosti, které napodobují lidskou činnost, jsou stálé velmi závislí na člověku. Jakýkoliv robotický systém průmyslového typu nebo ve formě androida není schopen fungovat naprosto autonomně. I když už existují vyspělé systémy, které dovolí robotu dělat velkou část jeho práce samostatně, je stále nutné mít jej pod kontrolou. K tomu slouží programy na správu, které jsou ve spojení s robotem a v případě nutnosti umožní operátorovi převzít na robotem kontrolu. Správa pomocí takového programu probíhá v místě umístění robotu, je-li software spuštěn na hardwaru, který musí být přímo napojen na robotický systém. Nebo vzdáleně, kdy operátor spouští obslužný program mimo působiště robotického systému a komunikuje s ním pomocí libovolné komnikační technologie. (WiFi, Ethernet, Bluetooth a další)
1.2
1.2
Cíl práce
8
Cíl práce
Cílem bakalářské práce je částečný popis rozhraní KNI (Katana Native Interface) a realizace vzdáleného ovládání robotu pomocí počítačové sítě. Rozraní KNI je napsáno v jazyce C++, novější verze i v jazyce Python nebo postavené na platformě .NET. Toto rozhraní je dodáváno spolu s robotem Katana. Cílem je popis práce s rozhraním v jazyce C++, navázání spojení s robotem, získávání dat z robotu, nastavení vlastností robotu a manipulační úkony. Realizace vzdáleného ovládání robotu pomocí počítačové sítě je dalším cílem bakalářské práce. Spočívá ve vytvoření aplikace, která umožní uživateli ovádání Katany. Aplikace ke komunikaci s robotem využije rozhraní KNI. Aplikace poskytne uživateli možnost ovládání robotu více způsoby (pohyb jednotlivých motorů, pohyb celého robotu na základě souřadného systému), čtení dat ze senzorů robotu a zpřístupnění nastavení některých vlastností ovlivňujcí chod robotu. Vzhledem k tomu, že se jedná o vzdálené ovládání, uživatel nemusí být v bezprostřední blízkosti robotu, což by umožňovalo vizuální kontrolu prováděných akcí. Z tohoto důvodu aplikace umožní zobrazování obrazu snímaného pomocí webové kamery, která je umístěna v prostoru robotu.
2
KATANA
2 2.1
9
Katana Základní popis
KATANA jsou malé inteligentní roboty švýcarské firmy Neuronics AG a představují unikátní koncepci bezpečného robotu, který je díky souboru bezpečnostních opatření a své konstrukci určen pro přímou spolupráci s lidmi a může s nimi sdílet pracoviště. Roboty KATANA jsou určeny pro různé aplikace jak v průmyslu, tak ve službách, laboratořích a všude tam, kde je potřeba nahradit stereotypní lidskou práci nebo tam, kde je to pro člověka nebezpečné. Mohou odebírat díly z rizikového prostoru, manipulovat s nebezpečnými látkami atd.(8) KATANA jsou také připraveny pro nasazení s kamerovými systémy, čímž se násobí jejich možnosti a mohou s jistotou rozlišovat předměty, bary, kódy, polohy, rozměry, tolerance a další znaky, potřebné pro selekci a rozhodování.(8) Vzhledem k tomu, že lze nasadit Katana roboty i tam, kde se běžně pohybují lidé, tedy do míst, kde průmysloví roboti nemohou z bezpečnostních či jiných důvodů být, jsou aplikační možnosti široké.(9) Možnosti použití:(9) • montáž dílů, operace na montážních linkách • pick and place pracoviště, manipulace v automatizaci • selektivní uchopení na základě tvaru, barvy, polohy a dalších možností v závislosti na přidaných komponentách • vkládání a vyjímání z lisu, forem, obráběcích strojů • farmaceutický, potravinářský nebo balící průmysl • paletizování, práce v rastrech • laboratroní aplikace, práce s nebezpečnými látkami • manipulace s křehkými, měkkými nebo tvarovými předměty • lakování, stříkaní, pohyb po kontuře • výuka robotiky a programování Pro bakalářskou práci je k dispozici Katana 6M180. Základní technická data jsou v tabulce č. 1 a v tabulce č. 2. Následující údaje o robotu jsou čerpány z (6).
2.2
Mechanika
10
Obr. 1: Katana 6M180 převzato z (6)
2.2
Mechanika
Podstavec a ramena jsou vyrobeny z eloxovaného hliníku. Robot KATANA obsahuje harmonické převodovky. Jsou v robotech použity k zabezpečení precizního polohování s minimálním zatížením os. Pro pohon jsou použity DC stejnosměrné kartáčové motory Faulhaber. Jsou vybaveny digitálním odměřováním s vysokým rozlišením.
2.3
Elektronika
Veškerá použitá elektronika je v souladu s RoHS (Restriction of the use of Hazardeous Substances), což je direktiva Evropské komise, zakazující použití nebezpečných látek v elektrických a elektronických výrobcích. K napájení používá robot Katana 60W adaptér. Jako základní řídící deska (master) slouží kruhová deska tištěných spojů, která komunikuje slave (podřízené desky mikrokontroléru: jedna pro každý motor a jedna nebo více desek pro uchopovač a případně pro další přídavná zařízení) Některé kovové části Katana jsou uzemněny (GND). Protože eloxovaný povrch některých hliníkových částí je izolant, kovové součásti mohou, ale nemusí být spojeny s GND, ale nikdy nesmí být připojeny k jinému napětí. K dosažení správné komunikace v elektricky nebo elektromagneticky rušivém prostředí musí být hlavní části a kovové součásti uzemněny spojením s GND. Silové vstupy jsou chráněny diodami proti špatné polaritě. Adaptér Pro napájení a jako mezičlánek komunikace počítače a Katany je použit sériový adaptér 2.1. Adaptér obsahuje tři indikační led diody, vypínač napájení, tlačítko
2.3
11
Elektronika
Tab. 1: Katana 6M180 parametry převzato z (6)
DOF Max. výška [mm] Úhly vosení [◦ ]
Operační rozsah [◦ ]
Délka ramene [mm]
5 854 M1: 0 M2: 124.25 M3: 52.7 M4: 63.5 M5: 8.5 M1: 345.7 M2: 140 M3: 241.5 M4: 232 M5: 332.2 M6: 140 (čelisti) UA: 190 FA: 139 WR: 185 GR: 130 (s uchopovačem)
Tab. 2: Katana 6M180 technická data převzato z (6)
Opakovaná přesnost ± 0.1 mm Nosnost 500 g Hmotnost 4.3 kg Příkon Max. 100 W ( 12 V / 8.33 A) Max. rychlost jednotlivých motorů M1 (normal), 4,5,6 125◦ · s−1 M1 (zesílený) 135◦ · s−1 M2, 3 (F w < 1.24) 68◦ · s−1 M3 (F w > 1.23) 80◦ · s−1 reset, 25 pinovou D-Sub zásuvku pro připojení k pc, 9 pinovou D-Sub zásuvku pro propojení s Katanou a zásuvku pro připojení napájení. Pro propojení pc s adaptérem je použit kabel RS-232 s maximální délkou 10 m a pro propojení adaptéru s Katanou je doporučován kabel o maximální délce 40 cm.
2.4
Nástroje
12
Obr. 2: Schéma sériového adaptéru 2.1 překresleno z (6)
Komunikační rozhraní Katana obsahuje asynchroní sériové rozhraní pracující na 5V hladině. Při spuštění Katany se vyšle krátká textová ASCII zpráva, která se dá využít jako kontrola úspěšně navázané komunikace. Pro další komunikaci je použit uživatelský protokol. Při komunikaci mezi PC a Katanou je PC vnímán jako master a Katana jako slave. Hostitelský PC může poslat kdykoliv pakety jakéhokoliv typu. Jestliže je komunikační kontrolér Katany zaměstnán, bude paket ignorovat a nepošle odpověď.(6) Kromě úvodní krátké textové zprávy je každá další odpověď, poslaná z Katany zpět do obslužného programu, vždy reakcí na pakety poslané masterem. Jelikož zpracování zprávy si zabere nějakou režii, je doporučené po odeslání paketu z řídícího PC počkat na kompletní odpověď a tuto dobu na port neposílat žádná další data. Doporučená doba čekání na odpověď je 0,1 vteřiny a více. Z důvodů zvýšení ochrany komunikace byl implementován 16-ti bitový CRC kontrolní součet. Implementace KNI zajišťuje, že pokud se objeví CRC chyba je příkaz automaticky po určité době opakován. Z důvodu zpětné kompatibility se starým Katana programem je výpočet CRC implementován na nízké úrovní rozhraní. Staré programy jsou vybaveny Serial-Zero protokolem namísto Serial-CRC protokolem. Synchronizace v CRC je prováděna hlavičkou paketu a master-slave konfigurací. Serial-Zero protokol obsahuje na začátku paketu 2 nulové bytey. Při navazování spojení pomocí KNI je možnost si zvolit mezi Serial-Zero nebo Serial-CRC protokolem v závislosti na použité třídě. Pro další práci se na použitý protokol nemusí brát zřetel, KNI vše obstarává samo.
2.4
Nástroje
Katana může obsahovat velké množství nejrůznějších nástrojů pro manipulaci s předměty.
2.4
13
Nástroje
Možnosti uchopení Při vypracovávání práce je k dispozici univerzální uchopovač. Tento se skládá z těla uchopovače a dvou čelistí. Čelisti obsahují infračervené snímače, snímače sily a popřípadě i snímače vodivosti. Signály jsou předzpracovány přímo mikrokontrolerem čelistí. Digitaliozované signály jsou poté poslány přes konektory k základní desce Katany. Existují různé druhy čelistí s různou konfigurací senzorů. Firmaware uchopovače musí být v souladu s typem čelistí.(6)
Obr. 3: Typ S03.02 převzato z (6)
Tab. 3: Snímače převzato z (6)
Číslo 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Druh IR odraz IR odraz Záložní CS vodivost IR odraz IR odraz Síla Síla IR odraz IR odraz Záložní IR odraz IR odraz IR odraz Síla Síla
Lokalizace Pravá čelist Pravá čelist Pravá čelist Obě čelisti Pravá čelist Pravá čelist Pravá čelist Pravá čelist Levá čelist Levá čelist Levá čelist Tělo čelistí Levá čelist Levá čelist Levá čelist Levá čelist
Pozice Vnitřní střední část Vnitřní přední část – Zadáno uživatelem Vnější strana Přední spodní strana Vzadu Vpředu Vnitřní střední část Vnitřní přední část – Střed Vnější strana Přední spodní strana Vzadu Vpředu
Mezi další nástroje, které je možné na Katanu připevnit, patří uchopovač s pasivním DOF. Jedná se o speciální uchopovač s pasivním stupněm volnosti. Na konci čelistí je pomocí ložisek uchycena hlavní uchopovací část. Takto je vždy uchopený
2.4
14
Nástroje
předmět ve vertikální poloze. Aby byl předmět ve správné poloze, musí být vždy paralelně s hlavní uchopovací částí. Standardní uchopovač s pasivním DOF obsahuje pouze centrální infračervený senzor. Místo čelistí může být na robot namontován tzv. univerzální diskový adaptér. Na tento adaptér mohou být poté připevněny různé další pracovní nástroje.(6) Senzory/Snímače Hodnoty ze snímačů jsou v rozmezí 0-255 (8 bitů). Všechny senzory by měly ukazovat nízké hodnoty, nejsou-li aktivní a vysoké hodnoty, jsou-li aktivní. (6) Infračervený snímač Na univerzálním uchopovači je k dispozici 9 infračervených senzorů. Dva na vnitřní straně každé čelisti, jeden vepředu dole a další na vnější straně. Poslední senzor, který se nachází ve středu těla čelistí je převážně používán k detekci předmětů. Snímač síly V čelisti S03.02 jsou integrovány dva snímací body, jeden vzadu a jeden vepředu. Každá síla působící na čelist aktivuje jeden nebo oba snímací body. Analýzou těchto dvou složek je možné získat víc informací o rozložení působící. Tento typ snímače dovoluje přesné měření, ale pokud se uchopované součásti podstatně odlišují kus od kusu, je nutná kalibrace na softwarové úrovni. Rozhraní Katana je dodávano pro základní(nekalibrované) hodnoty.(6) Snímač vodivosti Tento snímač je k dispozici u čelistí typu S01.01 formou červeného vodiče nebo u čelistí typu S03.02 jako pájený blok na desce pro levou a pravou čelist zvlášť. Proto nenípředem definováno umístění polohy měření a rozhoduje o něm uživatel. (6) Tab. 4: Význam hodnot snímače vodivosti převzato z (6)
Digitální hodnota 0-34 35-76 77-167 168-209 210-255
Význam Připojení k vnějšímu napětí (nežádoucí) Rozpojený obvod nebo vysoký odpor Uzavřený obvod, střední odpor Obvod nakrátko nebo nízký odpor Externí napětí nebo uzemnění
Obecně hodnota pod 76 znamená materiál s nízkou nebo žádnou vodivostí (nebo je předmět bez kontaktu). To se vztahuje k odporu 50 až 200 kΩ.(6)
2.5
2.5
15
Detekce kolize
Detekce kolize
Pro vlastní ochranu a ochranu okolí má Katana implementovánu detekci kolize. Ta se skládá ze dvou odlišných kontrol. Kontrola chyby pozice a kontrola chyby rychlosti. Pokud kontrola chyby pozice detekuje chybu, je aktivována kontrola chyby rychlosti. Pokud obě kontroly detekují odchylku Katana se okamžitě zastaví. Kontrola pozice Kontrola pozice porovnává rozdíl mezi požadovanou a okamžitou hodnotou s limitní hodnotou. limitposerror < posdesired –poscurrent Katana umožňuje křivočarý (běžný) nebo lineární pohyb. Pro každý pohyb existují vlastní limitní hodnoty. Pokud Katana pracuje s větší zátěží (400-500 g), je doporučeno nastavovat větší limity. Při vysoké hodnotě zrychlení chyba pozice rapidně vzrůstá na začátku pohybu díky příliš malému výkonu motoru. Abychom se tomuto vyhnuli, může být aktivována kontrola chyby rychlosti. (6) Kontrola chyby rychlosti Kontrola chyby rychlosti porovnává podíl současné rychlosti a rychlostí očekávanou s limitní hodnotou. limitvelerror >
vcurrent vdesired
limitvelerror ∈ [0, 100] Limitní hodnota je udávána v procentech. Pokud nastavíme limitní hodnotu například na 60 %, tak pokud rychlost klesne pod 60 % požadované rychlosti Katana zaznamená kolizi a robot se zastaví.
2.6 Pro • • •
Souřadný systém pohyb Katany jsou použity tři souřadné systémy: Kw - Světový souřadný systém Kb - Souřadný systém základny-podstavce KT ool - Souřadný systém nástroje
2.6
Souřadný systém
16
Obr. 4: Všechny souřadné systémy převzato z (6)
Všechny tři systémy se řídí podle pravidla pravé ruky. Světový souřadný systém Světový souřadný systém je systémem neměnným. Je nezávislý na pohybu robotu. Jeho počátek Ow může být zvolen uživatelem. Osa +zw je souběžná s gravitací, ale je orientována opačným směrem.(6) Souřadný systém základny Obslužný program Katana4D i C++ rozhraní KNI používá primárně souřadný systém základny. Počátek souřadnicového systému určuje sám výrobce a je závislý na robotu. Standardně je tento počátek OB umístěn v průsečíku rotačních os motoru 1 a 2, tj. uprostřed kloubu 2. Osa ZB je totožná jako osa motoru 1 a je orientována směrem od základny robotu. Osy XB a YB jsou dle pravidla pravé ruky orientovány tak jako na obrázku xy.
2.6
Souřadný systém
17
Obr. 5: Orientace os x a y převzato z (6)
Souřadný systém nástroje Jako další možnost lze použít souřadný systém nástroje. Počátek OT ool je definován pomocí TCP. Pro výpočet a orientaci souřadného systému je transformován a rotován souřadný systém základny. Pro orientaci jsou použity Eulerovy úhly. Osa +ztool vždy směřuje od robotu.
Obr. 6: Souřadný systém nástroje převzato z (6)
2.6
Souřadný systém
18
Eulerovy úhly Rotační pohyb je popsán vektorem úhlové rychlosti, který leží v ose rotace. Obecnou prostorovou rotaci je možné rozložit do tří směrů (tří vektorů). Výhodný rozklad prostorové rotace na tři dílčí zavedl již v polovině 18. století Leonard Euler a proto se příslušné úhly nazývají Eulerovy úhly. (11) Pohyb tělesa budeme popisovat v inerciální kartézské soustavě x, y, z. S tuhým 0 0 0 rotujícím tělesem spojíme soustavu x , y , z (ta není inerciální). Počátky obou soustav na začátku budou splývat a budou také splývat příslušné odpovídající si osy. (11) 0 První otočení provedeme kolem osy z o úhel ψ. Díky tomu přejde osa x (pů0 0 0 vodně totožná s osou x) do polohy x1 a osa y (původně totožná s y) do polohy y1 . (11) 0 0 0 Druhé otočení vykonáme kolem osy x1 o úhel ϑ. Osa y1 přejde do polohy y2 a 0 0 osa z (původně totožná s osou z) do konečné polohy z . (11) 0 0 Třetí otočení provedeme kolem této osy z o úhel ϕ, přičemž osa y2 přejde do 0 0 0 konečné polohy y a osa x1 do konečné polohy x . (11) Eulerovy úhly se nazývají: (11) • ϕ - úhel vlastní rotace • ψ - precesní úhel • ϑ - nutační úhel
Obr. 7: Ilustrace natočení pomocí Eulerových úhlů převzato z (11)
2.7
2.7
Síly
19
Síly
Zaručené zatížení pro všechny konfigurace a směry Katany jde maximálně 5 N. Avšak není to maximální síla, kterou Katana dokáže vyvinout. Následující ilustrace ukazují jaké síly při jakých pozicích je Katana schopna vyvinout.
Obr. 8: Tečná síla převzato z (6)
2.7
Síly
Obr. 9: Radiální a svislá síla převzato z (6)
20
3
DOSTUPNÉ NÁSTROJE NA SPRÁVU
3 3.1
21
Dostupné nástroje na správu Katana4D
Katana4D je uživatelský software od firmy Neuronics, který umožňuje snadné nastavení robotu bez znalosti komunikačního protokolu, firmwaru či programovacího jazyka. Umožňuje jednoduše vytvářet i složité programy pomocí posloupnosti základních příkazů. Katana4D je grafické rozhraní, kde se robot přímo neprogramuje, ale zadávají se různé sekvence příkazů, které určují manipulaci s robotem. Pomocí těchto příkazů umožňuje ovládat motory, čelisti, získávat data ze senzorů a další. Program pracuje ve dvou režimech. První režim je režim Administrátor. Administrátor definuje typ a připojení robotu, nastavuje parametry, vytváří programy, sekvence a projekty. Má umožněno také měnit firmware, definovat práva uživatelů nebo provádět další důležitá nastavení. Druhý režim je uživatelský. Uživatel v základním nastavení pouze spouští hotové aplikace a může robot zkalibrovat. Další nastavení mu může zpřístupnit administrátor pomocí nastavení práv. Katana4D umožňuje komunikaci přes různé druhy zařízení nebo různé protokoly. Umožňuje například spustit webový server, který zpracovává XML data, které řídí Katanu.
Obr. 10: Katana4D převzato z (10)
4
NAVRHOVANÁ ARCHITEKTURA
4 4.1
22
Navrhovaná architektura Metodika řešení
Metodika řešení definuje sled kroků, kterými se řídí bakalářská práce při dosahování daného cíle. • Seznámení se s robotem Katana 6M180 – Provedení robotu, způsob zapojení, základní parametry, manipulační možnosti, senzory. • Seznámení se s rozhraním KNI – Rozhraní dodávané k robotu, napsané v jazyce C++, které slouží k manipulaci s robotem. • Výběr nástrojů potřebných k realizaci – Programovací jazyk, aplikační framework a aplikace nezbytné k realizaci bakalářské práce. • Výběr vhodné architektury – Výběr architektury vhodné pro řešení zadaného problému. • Návrh klientské aplikace – Grafický návrh a návrh základních funkčních prvků. • Návrh serverové aplikace – Návrh základních prvku, způsobu komunikace a ovládání Katany 6M180. • Vytvoření protokolu pro komunikaci – Návrh textového protokolu ke komunikaci mezi klientem a serverem. • Programové řešení klientské aplikace – Řešení klíčových programových součástí. • Programové řešení KNI – Popis práce s rozhraním KNI a programové konstrukce základních operací s robotem Katana. • Programové řešení serverové aplikace – Řešení klíčových programových součástí. • Zhodnocení a závěr – Posouzení práce s rozhraním KNI při realizaci řešení, problémy, zhodnocení výsledné práce, možností rozšíření, vylepšení a dalšího možného využití.
4.2
Použité technologie
KNI (Katana Native Interface) Katana native Interface (KNI) je programová knihovna, umožňující vytvářet software pro roboty Katana od firmy Neuronics AG. KNI je postaveno na jazyce C++. Knihovna obsahuje třídy a struktury, které se starají o různé funkcionality při komunikaci vlastního programu s Katanou.
4.2
Použité technologie
23
Obr. 11: Diagram KNI překresleno z (12)
KNI se dělí na tři vrstvy: • První vrstvou je CLD vrstva (Communication Device Layer) starající se o sériový port a komunikaci přes něj. O tuto funkci se stára třída CcdlCOM. • Druhou vrstvou je CPL vrstva (Communication Protocol Layer), která definuje protokol, který Katana a KNI používají při vzájemné komunikaci. Existují dva protokoly. Serial-Zero protokol, který neobsahuje žádné kontrolní mechanismy a Serial-CRC protokol který implementuje jednoduchou CRC 1 kontrolu. • Poslední vrstvou je KML (Katana Robot Model Layer) definující programový model robotu. Obsahuje metody, které mohou zasílat robotu zprávy o změně jednotlivých parametrů ovládacích prvků, mohou nastavovat limitní hodnoty, rychlosti jednotlivých motorů a další. Zároveň také umožňuje přijímat zprávy o provedené změně, jednotlivých parametrech robotu nebo údaje ze senzorů. Základními prvky této vrstvy jsou třídy Ckatana, CkatBase, CmotBase a CscrBase, které poskytují pouze základní funkcionalitu. Pro potřeby bakalářské práce je používána KNI verze 3.9, která obsahuje další odvozené třídy od tříd základních, kde takto poskytuje rozšířenou funkcionalitu a jednodušší práci s robotickým systémem. Použití těchto tříd bude popsáno v kapitole zabývající se implementací. 1
Na základě definovaných údajů se vypočítá zabezpečovací údaj, ten je připojen ke zprávě. Při přijetí takového údaje druhá strana provede výpočet podle stejných pravidel. Pokud hodnota poslaná a hodnota nově vypočítaná souhlasí, dá se zpráva považovat za správnou
4.2
Použité technologie
24
Jazyk C++ Jazyk C++ byl vyvinut laboratořích firmy Bell začátkem 80tých let. Jazyk vyvinul Bjarne Soustrup. Dle vlastních slov „C++ byl původně navržen tak, abychom (mí přátelé a já) nemuseli programovat v assembleru nebo jiných moderních vyšších jazycích. Jeho hlavním účelem bylo udělat pro jednotlivého programátora jednodušší a příjemnější psaní dobrých programůÿ(2) Soustrup se více soustředil na vytvoření užitečného jazyka, než na prosazení určitých programovacích postupů nebo stylů. V určení jazykových rysů jsou skutečné programovací potřeby důležitější než teoretická čistota. Soustrup založil C++ na stručnosti C, jeho vhodnosti pro systémové programování, široce rozšířené dostupnosti a jeho úzké vazby na operační systém UNIX. Hledisko OOP v C++ bylo inspirováno počítačovým simulačním jazykem, který se nazýval Simula67. Soustrup přidal do C rysy OOP aniž by významně změnil složku C. (1) Tato vlastnost umožňuje že program napsaný v C je zároveň programem v C++ a programy napsané v C++ mohou používat knihovny 2 napsané v jazyce C. C++ nabízí veškeré výhody objektově orientovaného jazyka jako zapouzdření, polymorfizmus, dědičnost, šablony a další k rychlému a efektivnímu vývoji moderních aplikací. Pro C++ dnes existuje nespočetné množství programových knihoven na tvorbu GUI 3 , vektorovou grafiku, rastrovou grafiku, 3D, nejrůznější matematické výpočty, zpracování zvuku a další. QT4.6 Qt je multiplatformní aplikační a user interface framework od firmy Nokia. Existuje v LGPL nebo placené verzi. Použití Qt frameworku umožní napsanou aplikaci, pokud neobsahuje specifické závislosti na dané platformě, přeložit pro embeded linux, Mac OS X, Windows, Linux/X11, Windows CE/Mobile, Symbian nebo Maemo. Základem Qt frameworku je jazkyk C++. Qt značně rozšiřuje jeho možnosti definicí vlastních tříd, které nabízejí větší možnosti než standardní třídy jazyka C++. Například QString, QList a další, ale zároveň zachovává kompatibilitu se standardními třídami (String, List, . . . ) v obou směrech. Qt nabízí knihovny které nabízí funkcionalitu pro nejrůznější situace, ne jen na tvorbu GUI. Qt obsahuje knihovny pro pokročilé GUI, 3D grafiku s použití OpenGL, multithreading, embedded windowing systémy, interní objektovou komunikaci (signály), integrace WebKitu, síťové připojení, XML, skriptovací engine, práce s databází. Nokia také ke svému Qt frameworku vydává propracované integrované vývojové prostředí, které obsahuje editor kódu, grafický návrhář GUI programu, nástroj pro překlad textů programu do jiného jazyka, kontextově citlivý systém nápovědy, 2
Programové moduly, které řeší určitou problémovou doménu. Jejich použití umožní programátorovi efektivnější programování, protože nemusí implementovat něco co už implementováno bylo. 3 Graphic User Interface
4.3
Architektura klient-server
25
debugger a další užitečné nástroje. Qt SDK je kompletní vývojové prostředí pro tvorbu multiplatformních aplikací. XAMMP XAMMP je balíček nástrojů obsahující Apache webový server, MySQL databázi, PHP a Perl jazyk, phpMyAdmin aplikaci, FTP server a další nástroje. Tento balíček je pod správou projektu Apache Friends. Tento projekt založený Kaiem „Oswaldemÿ Seidlerem a Kayem Vogelgesangem, v roce 2002, je zaměřený na jednoduchou instalaci všech zmíněných komponent. Výsledný balík nástrojů je kompletně nakonfigurován a připraven na použití. Je dostupný pro platformy Linux, Windows, Mac OS X a Solaris. Balík pro operační systém Windows je dostupný v normální a Lite verzi. Jelikož je pro potřebu bakalářské práce nezbytný pouze webový server, je použita verze Lite obsahující pouze webový a databázový server. Pro jednoduchou správu všech aplikací je k dispozici konfigurační nástroj dodávan spolu s balíkem. WebCam Live 3.0 WebCam Live je jednoduchý program umožňující periodické zachytávání snímků z webové kamery do JPEG formátu a automatický upload na vybraný FTP server. Autorem programu je GetWare, dostupný na http://www.getware.com. Program je uvolněn pod licencí freeware.
4.3
Architektura klient-server
Pro zpracování obslužného programu v rámci bakalářské práce jsem se rozhodl použít architekturu klient-server. Jedná se o síťovou architekturu, která odděluje serverovou (zpravidla výpočetní) a klientskou (zpravidla grafické rozhraní) část, které spolu komunikují pomocí počítačové sítě. Architektura klient-server je vztah mezi dvěma programy, kdy klient hraje aktivní roli, posílá žádosti serveru a čeká na odpovědi. Klientský program je připojen k jednomu nebo více serveru a často komunikuje s koncovým uživatelem pomocí grafického uživatelského rozhraní, které obsahuje vstupní prvky pro komunikaci se serverem a algoritmy na zobrazení informací ze serveru poslaných. Naproti tomu server zastupuje většinou pasivní roli, naslouchá na určitém portu a reaguje na zprávy poslané klientský programem specifickou činností a posláním odpovědí. Na tomto principu funguje, dnes běžně, mnoho používaných služeb. Například služba WWW4 , kde webový server přijímá, na základě domluveného protokolu, požadavky od klientského programu a posílá zpět data, která klient graficky interpretuje do podoby požadované webové stránky. 4
World Wide Web
4.3
Architektura klient-server
26
Tuto architekturu jsem si zvolil také proto, že robot Katana 6M180 umožňuje komunikaci pouze přes sérové rozhraní. KNI API počítá se síťovou komunikací, ale hardwarová podpora je až u pozdější řady robotů Katana. Řešení zahrnuje serverovou aplikaci, která v sobě obsahuje KNI API a na základě textových zpráv od klienta provádí požadované manipulace s robotem. Zpět klientu posílá krátké potvrzovací zprávy, požadovaná data o stavu robotu nebo chybová hlášení. Výhodou tohoto přístupu je, že serverová část je odladěná a přizpůsobená pro potřeby robotu a klientská část je limitovaná pouze dohodnutým protokolem. Další specifika jako operační systém, programovací jazyk, grafické rozhraní nejsou už rozhodující.
Obr. 12: Architektura klient-server
4.4
4.4
Klient
27
Klient
Klient je konstruován jako jednoduchý program, který využíva knihovnu Qt. Umožňuje přihlášení k serveru na správu Katany a komunikaci s ním pomocí jednoduchého textového protokolu. Klient používá pro síťovou komunikaci spolehlivý protokol TCP. Klient neobsahuje žádnou programovou logiku pro řízení Katany, pouze přijímá, zobrazuje a posílá stavová data robotu.
Obr. 13: Grafické rozhraní 1
4.4
Klient
28
Obr. 14: Grafické rozhraní 2
Funkce Grafické uživatelské rozhraní se dělí na několik oblastí podle typu účelu. Část přihlášení zprostředkovává navázání spojení se serverem. Je nutné zadat adresu a port na kterém server běží. Dále je server chráněn na základě uživatelského jména a hesla. Po stlačení tlačítka připojit se program pokusí navázat spojení ze serverem. Stav připojení indikuje zelený nápis v pravé dolní části oblasti přihlášení. Pokud není klient připojen, je zobrazen nápis KO. Pokud má klient navázáno spojení se serverem, je zobrazen nápis OK. Po navázání spojení je nutné ověřit, jestli server řádně vytvořil spojení mezi ním a robotem. Pokud toto není otevřeno, jsou veškeré prvky, které manipulují s robotem, zakázány. Toto ověření se provádí v oblasti operace tlačítkem inicializace. Pokud inicializace proběhne v pořádku, všechny ovládací prvky se odemknou. Součástí sekce operace je také možnost provést kalibraci na robotu. Následující sekce umožňuje otevřít a zavřít uchopovací zařízení. Sekce nastavení umožňuje manipulovat s jednotlivými motory robotu. Nastavení probíhá v jednotkách encodérů robotu. Pro Katanu 6M180 je pro každý motor k dispozici rozsah -30000 až 30000. Sekce umožňuje získat a posílat nastavení motorů. Sekce Nastavení os umožňuje manipulovat s robotem na základě souřadnic kartézského systému a na základně polárních souřadnic. Pro pohyb robotu, na základě
4.4
Klient
29
trojrozměrného prostoru s počátkem souřadnic v ose motoru 0, je možno použít nastavení os X, Y a Z.
Obr. 15: Ilustrace kartezských souřadnic převzato z (6)
Nastavení Phi, Theta a Psi mění polární souřadnice Katany. Tyto souřadnice určují jednotlivé motory. Pro Phi to je motor 1, pro Theta motory 2,3,4 a pro Psi motor 5.
Obr. 16: Vliv polárních souřadnic převzato z (6)
Oblast Senzory slouží k získání aktuálních hodnot ze senzorů. Tyto hodnoty se pohybují v rozmezí 0-255. Program umožňuje získat data ze senzorů jednorázově nebo na základě zvoleného časového intervalu v milisekundách. V této části grafického rozhraní se také nachází tlačítko Freeze Robot, které v případě potřeby okamžitě zastaví pohyb Katany. Tato možnost je důležitá v případě, kdy jsou hodnoty nastaveny chybně a hrozí způsobení škody. Jelikož program zprostředkovává ovládaní Katany přes TCP/IP síť, je nutné aby byla zajištěná vizuální kontrola prováděných operací. Program proto umožňuje zobrazovat obraz zachycený webovou kamerou přímo na robotu nebo poblíž robotu. Pro to aby program mohl zobrazovat obraz z webové kamery, musí být splněny
4.5
Server
30
některé požadavky. Z důvodů kompatibility a nezávislosti na zobrazovacím zařízení je obraz získáván pomocí protokolu HTTP. Na počítači, ke kterému je připojena webová kamera, je nutné aby byl nainstalován webový server a program na snímaní obrazu z webové kamery. Obraz, který je získáván z webové kamery musí být ukládán do uložiště, které je zpřístupněno pomocí webového serveru. Poslední sekce na kartě Hlavní je sekce Komunikace. Tato část programu zobrazuje veškerou odchozí i příchozí komunikaci a stavové zprávy programu. V kartě Nastavení jsou zpřístupněny některé možnosti nastavení parametrů robotu. Pro každý motor lze nastavit akcelerační a rychlostní limit. Tyto limity ovlivňují rychlost provádění operací robotu. Dále je možné okamžitě daný motor zastavit pomocí tlačítka Freeze. V sekci Motory 2 je možné nastavit limitní hodnoty motorů, které souvisejí s detekcí kolizí jednotlivých motorů. Lze nastavit buď jednotlivé hodnoty motorů nebo limity úplně deaktivovat, případně aktivovat. V sekci robot uživatel může nastavit rychlostní a akcelerační limit celého robotu. Toto nastavení provádí stejné nastavení jako nastaveních jednotlivých motorů v sekci Motory s tím rozdílem, že provádí nastavení u všech motorů zároveň. V případě, že u robotu dojde k detekci kolize, je robot zablokován. Pomocí tlačítka Unblock lze zablokování zrušit. Karta nastavení obsahuje stejný výpis komunikace jako na kartě Hlavní. Grafické rozhraní si také pamatuje úspěšně provedené operace nastavení motorů nebo nastavení os. Zapamatované hodnoty lze zpřístupnit pomocí menu Možnosti položka Historie. V tomto dialogu jsou zobrazeny jednotlivé uložené hodnoty. Lze vybrat jednu z nich a tyto hodnoty nahrát do nastavení motorů či os. Veškerá nastavení programu jsou v konfigurančním ini souboru aplikace.
4.5
Server
Server poskytuje službu ve formě ovládání Katany pomocí textových zpráv zasílaných serveru. Server se dělí na dvě hlavní části. První část je založená na Qt aplikačním rozhraní a zajišťuje samotný provoz TCP serveru. Server umoňuje přihlášení uživatele a pomocí definovaného protokolu zprostředkovává ovládání Katany. K serveru se může být přihlášen pouze jeden uživatel. Toto omezení je zavedeno z důvodu bezpečnosti a správné funčnosti robotického systému. Je nežádoucí, aby Katanu v jednom okamžiku obsluhovali dva operátoři současně. Druhou částí je KNI rozhraní, které se používá přímo k ovládání Katany. Toto rozhraní pomocí sériového rozhraní a vlastního protokolu přímo komunikuje s robotickým systémem. Propojení obou částí nastává v případě, že přihlášený uživatel zašle správu serveru, kterou definuje úkon pro robotu. Server zprávu vyhodnotí a spustí potřebné metody z KNI rozhraní, které provedou požadovanou akci. Komunikace mezi klientem a severem probíhá následovně:
4.6
Komunikační protokol
31
• Klient vytvoří TCP spojení. • Server pošle výzvu k poslání přihlašovacích údajů. • Server vyhodnotí údaje o přihlášení a adekvátně odpoví. Pokud vše proběhlo v pořádku, klient je přihlášen a je mu zpřístupněno ovládání Katany. • Klient pošle požadavek. • Server zkontroluje platnost požadavku, pokusí se ho provést a posílá zpět zprávu o výsledku. Jsou možné dva stavy. Vše proběhlo v pořádku a server pošle zpět kladnou odpověď. Pokud nastal nějaký problém při vykonávání požadavku, server pošle zápornou opověď. Pokud se vyskytla chyba v průběhu metod KNI rozhraní je text vyhozené vyjímky připojen jako parametr k záporné odpovědi. • Pokud klient nepotřebuje s Katanou nadále pracovat přeruší TCP spojení. Server na tuto událost adekvátně zareaguje a ukončí korektně činnost katany. Všechny možnosti nastavení serveru jsou přístupny v konfiguračním textovém souboru.
4.6
Komunikační protokol
Mezi klientským a serverovým programem musí existovat ucelená forma komunikace. K tomuto účelu jsem navrhl jednoduchý textový protokol, který z velké části pokrývá funkcionalitu poskytovanou rozhraním KNI. Posílaná zpráva se dělí na dvě části. První část tvoří samotný příkaz pro vykonání definovaného úkonu a v druhé části jsou, mezerami oddělené, případné parametry. Obě tyto části jsou odděleny mezerou. Následující seznam ukazuje příkazy, které je možné posílat serveru a jejich kladnou nebo zápornou odpověď. Jediný příkaz, který posílá jako první server je příkaz LOGIN při přihlašování. Tato sekvence je vyobrazena na obrázku č. 17 a obrázku č. 18. • KATANAINIT – zjisti zda-li je možno s robotem pracovat – KATANAINITOK, KATANAINITFAIL • OPENGRIPPER – otevření uchopovacího zařízení – OPENGRIPPEROK, OPENGRIPPERFAIL • CLOSEGRIPPER – zavření uchopovacího zařízení – CLOSEGRIPPEROK, CLOSEGRIPPERFAIL • GETMOTSETTINGS – získání pozice motoru v jednotkách encoderu – GETMOTSETTINGSOK + 6 x INTEGER – číselné hodnoty pro jednotlivé motory – GETMOTSETTINGSFAIL • SETMOTSETTINGS + 6 x INTEGER – nastavení pro jednotlivé motory – SETMOTSETTINGSOK, SETMOTSETTINGSFAIL • GETCOORDS – získání souřadnic (x, y, z, phi, theta, psi) – GETCOORDSOK + 6 x DOUBLE – hodnoty jednotlivých souřadnic – GETCOORDSFAIL • SETCOORDS + 6 x DOUBLE – nastavení souřadnic – SETCOORDSOK, SETCOORDSFAIL
4.6
Komunikační protokol
32
• GETSENSORS — získání dat ze senzorů – GETSENSORSOK + 16 x UNSIGNED BYTE – parametry jednotlivých senzorů – GETSENSORSFAIL • CALIBRATE – provedení kalibrace Katany – CALIBRATEOK, CALIBRATEFAIL • GETMOTSUMMARY – nastavení akceleračního a rychlostního limitu pro každý motor – GETMOTSUMMARYOK + 6 x (SHORT + SHORT) – dvojce akcelerační a rychlostní limit pro každý motor robotu – GETMOTSUMMARYFAIL • SETMOTSUMMARY + 6 x (SHORT + SHORT) - dvojce akcelerační a rychlostní limit pro každý motor robotu – SETMOTSUMMARYOK, SETMOTSUMMARYFAIL • FREEZE + 1 x SHORT – zastavení požadovaného motoru – FREEZEOK, FEEZEFAIL • MSPCL + 1 x LONG + 1 x INTEGER – nastavení pozičního kolizního limitu pro jednotlivý motor (dvojce číslo motoru a limitní hodnota) – MSPCLOK, MSPCLFAIL • MSSCL + 1 x LONG + 1 x INTEGER – nastavení rychlostního kolizního limitu pro jednotlivý motor (dvojce číslo motoru a limitní hodnota) – MSSCLOK, MSSCLFAIL • ENABLECRASHLIMITS – zapnutí kolizních limitů – ENABLECRASHLIMITSOK, ENABLECRASHLIMITSFAIL • DISABLECRASHLIMITS – vypnutí kolizních limitů – DISABLECRASHLIMITSOK, DISABLECRASHLIMITSFAIL • SRVL + 1 x SHORT - nastavení rychlostního limitu robotu – SRVLOK, SRVLFAIL • SRAL + 1 x SHORT – nastavení akceleračního limitu robotu – SRALOK, SRALFAIL • UNBLOCK – odblokování Katany po zablokování, například po detekci kolize – UNBLOCKOK, UNBLOCKFAIL • FREEZEROBOT – kompletní zastavení katany – FREEZEROBOTOK, FREEZEROBOTFAIL
4.6
Komunikační protokol
Obr. 17: Přihlašovací sekvence 1
Obr. 18: Přihlašovací sekvence 2
33
5
ŘEŠENí
5 5.1
34
Řešení Klient
Pro vytvoření klientského programu je použit multiplatformní aplikační a UI framework Qt. Základem programu je uživatelské rozhraní vytvořené pomocí grafických nástrojů editoru Qt Creator. Protředky pro síťové spojení Základem síťového spojení je objekt třídy QTcpSocket. Tento objekt umožňuje vytvořit, udržovat a ukončit spojení se serverem. Tento objekt dokáže při jednotlivých událostech emitovat signály, na které lze následně reagovat. Pro vypracování práce bylo zapotřebí zpracovat tyto signály. Connected signál je emitován v případě, že spojení bylo úspěšně navázáno. Signál disconected při ukončení spojení. Signál error, v případě, kdy nastane kritická chyba a signál readyRead, který je emitován v případě příchozích dat z druhé strany spojení. Následující příklad demonstruje vytvoření QTcpSocketu, spojení signálů s obslužnými funkcemi a navázání spojení. QTcpSocket *socket = new QTcpSocket(this); connect(socket, SIGNAL(connected()), this, SLOT(gotConnected())); connect(socket, SIGNAL(disconnected()), this, SLOT(gotDisconnected())); connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this,SLOT(gotError(QAbstractSocket::SocketError))); connect(socket, SIGNAL(readyRead()), this, SLOT(handleReply())); QHostAddress ad; int port = 3666; ad.setAddress("192.168.1.1"); socket->connectToHost(ad,port); Zpracování příchozích zpráv Při příchodu nových dat je emitován signál readyRead a je zavolána obslužná funkce, která byla připojena k signálu pomocí funkce connect. Po té co je zavolána obslužná funkce je nutné zpracovat zprávu. V tomto případě se jedná o pole byteů, který obsahuje textový řetězec v kódování UTF-8. Řetězec obsahuje podřetězce oddělené mezerou. První podřetězec obsahuje příkaz k provedení, další podřetězce jsou parametry příkazu. Z řetězce zprávy se výjme podřetězec obsahující příkaz (první podřetězec) a vzniknou dvě datové struktury, příkaz a argumenty. Podle hodnoty
5.1
Klient
35
příkazu se zavolá obslužná funkce, které jsou v případě potřeby předány argumenty. Následující příklad demonstruje výše popsané zpracování příchozí zprávy. QByteArray rawdata = socket->readAll(); QList
args = rawdata.split(’ ’); QString command = args.takeFirst(); if(command == "KATANAINITOK"){ this->deactivateAll(false); ui->statusLabel->setText("OK"); } else if(command == "COORDS"){ this->setCoords(args); } Pro zasílání zpráv skrz navázané spojení slouží metoda objektu třídy QTcpSocket, ”write”. Tato metoda přijímá jako parametr pole typu QByteArray, které uloží do bufferu objektu. Po zavolání metody ”flush” jsou data okamžitě odeslána.
Obr. 19: Ilustrace formátu zasílané zprávy
Řešení cyklických operací Během vytváření programu bylo potřeba řešit situace, kdy je nutné cyklicky zasílat určité zprávy serveru, s žádostí o nová data. Takto je nutné získávat například data ze senzorů nebo získávání snímků z webové kamery. Pro tyto účely existuje v knihovně Qt třída QTimer. Tato třída umožňuje nastavit časový interval po kterém se spustí požadovaná akce a to následujícím způsobem. Nejprve je nutné vytvořit objekt třídi QTimer. Po té zaregistrovat pomocí funkce connect vyžadovanou funkci na signál ”timeout”, který je emitován objektem po vypršení nastaveného času. Dále je nutné zajistit aby se spustil či případně zastavil odpočet, po jehož vypršení objekt emituje signál ”timeout”. QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(funkce())); this->timer->start(1000);
5.2
Použití KNI
36
this->timer->stop(); Získávání obrazu Získání obrazu, který zobrazuje aktuální polohu robotu, je prováděno cyklickým získáváním jednotlivých snímků z webového uložiště. Na cílovém počítači, ke kterému je připojená webová kamera, je nainstalován software na periodické pořizování snímků z této kamery. Snímky jsou ukládány do webového uložiště, které následně zpřístupní obsah klientské aplikaci. Takto je eliminována závislost kódu na specifikách zobrazovacího zařízení. Pro přenos je použit standardní HTTP protokol. Qt framework disponuje řešením na získávání datových souborů přes HTTP protokol. Pro získání dat přes HTTP protokol je nutné v Qt spolupráce tří tříd. Jsou to třídy QUrl, QNetworkRequest a QNetworkAccessManager. Qurl třída poskytuje pohodlné rozhraní pro práci s URL. Umožňuje URL parsovat i stavět, encodovat, decodovat, validovat a mnoho dalších funkcí. Třída QNetworkRequest v zastřešuje požadavek, který bude odeslán. Třída QNetworkAccessManager přijímá tento požadavek, odesílá jej na vzdálený server a zpracovává jeho odpověď. Pokud je požadavek vyřízen, objekt třídy QNetworkAccessManager emituje signál finished na nějž reaguje obslužná funkce, která dokončí zpracování přijatých dat. Následující ukázka demonstruje vytvoření požadavku, jeho provedení a následné zpracování po dokončení. QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); manager->get(QNetworkRequest(QUrl("http://server.com/obraz.jpg"))); void MainWindow::replyFinished(QNetworkReply *reply){ QFile file(soubor.jpg); file.write(reply->readAll()); file.close(); }
5.2
Použití KNI
KNI je C++ rozhraní sloužící pro komunikaci s Katanou. Je navrženo tak, aby jej bylo možno použít pod systémy Windows i Unix. I když, dle dokumentace, je zaručeno, že jde KNI přeložit na kompilátoru GCC 3.4 a GCC 4.0, neobejde se kompilace bez problémů. Jelikož je KNI vyvíjeno pomocí nástroje Visual Studio od firmy Microsoft, jsou některé části závislé na knihovnách dodávaných tímto balíkem. Pro
5.2
Použití KNI
37
úspěšnou kompilaci a následný provoz je nutné, aby byly některé části zdrojového kódu mírně upraveny. KNI rozhraní umí zprostředkovat veškerou komunikaci. Bohužel je v současné době nedostatečně zdokumentováno. Výrobcem dodávaná dokumentace k verzi KNI 3.9 obsahuje jen základní informace o rozhraní a neobsahuje žádné další popisy ani návody pro manipulaci s robotem. Jediná možná dokumentace, kterou je možno získat, jde vygenerovat pomocí nástroje na tvorbu dokumentace přímo ze zdrojového kódu.5 Ale i tato dokumentace se jeví jako nedostatečná, jelikož nejsou popsány všechny struktury a metody. Kvalitnější dokumentace přichází až s verzí KNI 4.0 a vyšší, ale i tato dokumentace je stále nedostatečná. Z tohoto důvodu je jedním z cílů této bakalářské práce částečně popsat rozhraní KNI. Připojení k robotu Na začátku každého programu, který nějakým způsobem komunikuje s Katanou pomocí KNI je nutno dodržet několik kroků pro navázání spojení. Je nutné naplnit strukturu TCdlCOMdes, která reprezentuje vlastnosti COM portu. TCdlCOMDesc ccd = {1, 57600, 8, ’N’, 1, 300, 0}; Struktura TCdlCOMDesc je následující: struct TCdlCOMDesc { int port; int baud; int data; int parity; int stop; int rttc; int wttc; }; První parametr port definuje číslo portu. Pro systémy Windows je první použitelný COM port označován číslem 1. Naproti tomu, v unixových systémech je to číslo 0. Dalším parametrem baud je přenosová rychlost. Následuje parametr data, který definuje počet bitů pro každý znak. Parity pro nastavení detekce chyb při přenosu. Stop bit, který je posílán na konci každého posílaného znaku. Rttc a wttc pro natavení timeoutu čtení a zápisu dat. Pomocí struktury TCdlCOMDesc se vytvoří objekt třídy CCdlCOM, která přímo reprezentuje COM port zařízení a umožňuje přes něj posílat zprávy. CCdlCOM *device = new CCdlCOM(ccd); Dále je nutné vytvořit objekt třídy CCplSerialCRC, který reprezentuje protokol pro komunikaci s Katanou, s jednoduchou CRC kontrolou. A následně tento objekt inicializovat pro práci na COM zařízení. 5
Například Doxygen
5.2
Použití KNI
38
CCplSerialCRC *protocol = new CcplSerialCRC; protocol->init(device); Po inicializaci přenosového protokolu jde vytvořit instance třídy, která je softwarovou reprezentací Katany. Pro maximální možnou funkcionalitu je nutno vytvořit instanci Katany, pomocí třídy CLMBase. CLMBase je v hierarchii tříd definující Katanu jako poslední. Předkové této třídy jsou CikBase a CKatana. CKatana obsahuje objekt třídy CKatBase, který slouží jako základní objekt pro řízení celé Katany. Každá z těchto tříd může být použita pro provoz Katany, avšak CLMBase dědí vlastnosti obou tříd a přidává další funkcionalitu.
Obr. 20: Hierarchie tříd reprezentující Katanu
Samotné nastavení objektu třídy CMLBase se provádí pomocí metody create, tato metoda přijímá konfigurační soubor katany, který je dodáván spolu s KNI rozhraním. Tento konfigurační soubor obsahuje veškerá základní nastavení Katany. Toto nastavení jde provést i bez konfiguračního souboru, přímo prostřednictvím KNI rozhraní. Pro zajištění bezchybného chodu Katany je bezpečnější použít konfigurační model pro daný model robotu, dodávaný výrobcem. Druhým parametrem je vytvořený objekt protokolu třídy CCdlCOM. CLMBase* katana = new CLMBase; katana->create("katana6M180.cfg", protocol); V tomto stádiu je Katana připravena přijímat jednotlivé příkazy. Před samotným posíláním řídících příkazů je doporučováno provést kalibraci, aby se Katana dostala do výchozí polohy a zkontrolovala, zda jsou veškeré systémy pohybu funkční. katana->calibrate(); Po zkalibrování je možné bezpečně zasílat řídící příkazy. Příkazy zasílané pomocí KNI se dají rozdělit do tří skupin, na: • Příkazy pro nastavení • Příkazy pro zjištění jednotlivých parametrů • Příkazy manipulační
5.2
Použití KNI
39
Příkazy pro nastavení První skupina příkazů slouží k nastavení jednotlivých vlastností robotu. Mezi tyto příkazy patří: • void CKatana::setCrashLimit (long idx, int limit) – nastavuje limit pro jednotlivé motory, po jehož překročení Katana vyhodnotí situaci jako kolizi a robot se zastaví • void CKatana::setMotorVelocityLimit (short number, short velocity) - nastavení limitu rychlosti jednotlivých motorů • void Ckatana::unBlock () - odblokování motorů po kolizi • void CKatana::setMotorAccelerationLimit (short number, short acceleration) – nastavení limitu zrychlení motoru • a další Zjišťování parametrů Druhá skupina příkazů zjišťuje jednotlivé parametry robotu. Mezi příkazy této skupiny patří: • short Ckatana::getMotorVelocityLimit (short number) const – získání limitu rychlosti jednotlivého motoru • int CKatana::getMotorEncoders (short number, bool refreshEncoders = true) const – aktuálni hodnota jednotlivého motoru v jednotkách enkodéru • short Ckatana::getMotorAccelerationLimit (short number) const – zjištění limitu zrychlení motoru • short CKatana::getNumberOfMotors () const – návratovou hodnotou je počet motorů v robotu • double CLMBase::getMaximumLinearVelocity () const – získá maximální rychlost pro lineární posun Dosavadní příkazy druhé skupiny patří mezi triviální příkazy, které jdou volat přímo na objekt Katany. Mezi složitější konstrukce zjišťující jednotlivé hodnoty patří například získání dat ze senzorů nebo zjištění maximální a minimální hodnoty encoderu jednotlivých motorů. Pro zjištění těchto hodnot je potřeba lepší znalost struktury KNI. Maximální a minimální hodnota encoderu jednotlivých motoru je potřebná v případě, kdy potřebujeme manipulovat s Katanou na bázi jednotlivých motorů. Udává maximální a minimální pozici otočení krokového motoru. Hodnoty pro jednotlivé motory lze získat následujícím způsobem. Nejprve je nutné získat ukazatel na objekt třídy CKatBase. CKatBase *base = katana->GetBase(); Poté získat ukazatel na strukturu TKatMOT, ve která zprostředkovává informace o motorech robotu. Obsahuje počet motorů, pole objektů jednotlivých motorů a popis motorů. TKatMOT *mots = base->GetMot();
5.2
Použití KNI
40
Z této struktury následně získat objekty jednotlivých motorů a z těchto objektů požadovaná data. short mcount = katana->getNumberOfMotors(); for(short i=0 ; i < mcount ; i++){ std::cout << "Motor" << i << endl; std::cout << mots->arr[i].GetEncoderMaxPos() << endl; std::cout << mots->arr[i].GetEncoderMinPos() << endl; } V komplikovanějších případech je potřeba získávat data ze senzorů a podle toho se případně zachovat. Katana 6M180 s uchopovačem má standardně 16 senzorů. Z toho 14 aktivních a 2 záložní. Rozsah každého senzoru je reprezentován jedním bytem. Data z jednotlivých senzorů jdou získat následujícím způsobem. Získáme ukazatel na objekt třídy CKatBase. CKatBase *base = katana->GetBase(); Poté je nutné získat sensor controler. Ten je reprezentován objektem třídy CSctBase, který se nazí v atributu struktury TKatSCT. V této struktuře se nachází v poli objektů arr. Následující příklad demonstruje získání ukazatele na sensor controler. CSctBase *sensctrl = &base->GetSCT()->arr[0]; V dalším kroku je potřeba získat ukazatel na strukturu TSctDAT. Tato struktura je součástí CSctBase a je v ní obsažen počet senzorů a jednotlivé hodnoty senzorů. const TSctDAT *data = sensctrl->GetDAT(); Posledním krokem je naplnění struktury TSctDAT aktuálními hodnotami a jejich získání. Minimální interval získání hodnot ze senzorů je 25 milisekund. Při nastavení kratšího intervalu nemusí být Katana schopna kvůli zaneprázdnění odpovědět. while(!_kbhit()){ clock_t t = clock(); sensctrl->recvDAT(); for (int i=0; i < data->cnt; i++) { std::cout.width(5); std::cout << data->arr[i] << " "; } std::cout << "\n"; while (clock() - t < 25) {} }
5.2
Použití KNI
41
Příkazy pro manipulaci Třetí skupinou příkazů jsou příkazy, které manipulují s robotem dle definovaných hodnot. Manipulovat s robotem jde několika způsoby. První možností je hýbat s jednotlivými motory. Základní metody reprezentující pohyb jednotlivých motorů jsou metody třídy CMotBase. Které hýbou motorem na základě hodnot braných jako cílovou pozici, přírůstek nebo úbytek v jednotkách enkodéru motoru nebo na základě úhlových hodnot. void CmotBase::mov (int tar, bool wait = false, int tolerance = 100, long timeout = TM_ENDLESS) void CmotBase::movDegrees (double tar, bool wait = false, int tolerance = 100, long timeout = TM_ENDLESS) void CMotBase::inc (int dif, bool wait = false, int tolerance = 100, long timeout = TM_ENDLESS) void CMotBase::dec (...) void CMotBase::incDegrees (...) void CMotBase::decDegrees (...) Získávat pokaždé zdlouhavě objekt třídy CMotBase je nepraktické. Třída CKatana implementuje podobné metody, které umožňují nastavit pozici přímo nebo jako přírůstek s možností definování požadovaného motoru pomocí číselné hodnoty. void CKatana::mov (long idx, int tar, bool wait = false, int tolerance = 100, long timeout = TM_ENDLESS) void CKatana::movDegrees (...) void CKatana::moveMotorBy (...) void CKatana::moveMotorByEnc (...) void CKatana::moveMotorTo (...) void CKatana::moveMotorToEnc (...) Pro zjednodušení psaného kódu je implementována metoda moveRobotToEnc třídy CKatana, která umožňuje použít vektor nesoucí hodnoty pro každý motor zvlášť. Při použití této metody lze předat menší počet hodnot ve vektoru, než je samotných motorů. V případě menšího počtu hodnot se vezmou v potaz jen motory pro něž jsou hodnoty zadány. Tento způsob se výrazně hodí pokud je potřeba pohnout s celým robotem, ale například motor uchopovače má zůstat ve stejné pozici. Druhou možností jak manipulovat s robotem na základě kartézských a polárních souřadnic. Tyto metody umožňují pohyb dynamický nebo lineární. Při dynamickém pohybu se snaží Katana přizpůsobit rychlost dle možností jednotlivých motorů a dosáhnout definované rychlosti pohybu. Funkci obstarává metoda CikBase::moveRobotTo. Při lineárním pohybu robot okamžitě operuje v nastavené rychlosti. Tuto funkcionalitu umožňuje metoda CLMBase::moveRobotLinearTo. Tento pohyb sebou nese riziko, že nebude vykonán, je-li definovaná rychlost příliš vysoká a jediný motor, z důvodu obtížné pozice, tuto rychlost neumožní fyzicky vyvinout. Následující výpis kódu demonstruje použití obou metod pro pohyb.
5.3
Server
42
katana->getCoordinates(x,y,z,phi,theta,psi); katana->moveRobotTo(x+50,y+25,z10,phi,theta,psi); katana->moveRobotLinearTo(x,y,z,phi,theta,psi) Jednotlivé třídy také definují přetížené metody kterým je možno místo jednotlivých hodnot jako samostatného parametru předat vektor parametrů. V neposlední řadě mezi manipulační příkazy patří metody na otevření a zavření uchopovače. void CKatana::openGripper (...) void CKatana::closeGripper (...) Základní použití KNI je velice intuitivní, až na některé komplikovanější programové konstrukce, které vyžadují lepší vnitřní znalost rozhraní. Jednotlivé programové konstrukce, v konceptu bakalářské práce, využívá serverová část napsaná ve frameworku Qt.
5.3
Server
Serverová aplikace je jednoduchý TCP server naprogramovaný pomocí frameworku Qt a jeho síťových nástrojů. Server se dá používat pouze pokud je uživatel serveru přihlášen. Poté je uživateli zpřístupněno ovládání Katany. Inicializace Katany a spuštění serveru Při každém spuštění serveru je nutné vytvořit objekt, který softwarově reprezentuje Katanu 6M180. Tuto inicializaci robotu je nutné provádět před samotným spuštěním kódu, který se stará o provoz serveru. Při vytváření objektu Katany uvnitř serverového kódu se program z neznámých důvodu hroutí. Po vytvoření objektu vně serverovou část je serveru předán pomocí konstruktoru. Toto řešení se ukázalo jako stabilní a schopné bezproblémového provozu. Následující příklad ilustruje vytvoření objektu Katany, nastavení kódování řetězců na UTF-8 a předání objektu katany serveru při vytváření. QCoreApplication a(argc, argv); CCdlCOM *device; CCplSerialCRC *protocol; CLMBase* katana; try{ int port = 1; TCdlCOMDesc ccd = {port, 57600, 8, ’N’, 1, 300, 0}; device = new CCdlCOM(ccd); protocol = new CCplSerialCRC; protocol->init(device); katana = new CLMBase; katana->create("katana6M180.cfg", protocol); katana->calibrate();
5.3
Server
43
}catch(Exception e){ std::cout << \Objekt Katany nebyl vytvoren" << e.what(); } QHostAddress addr(QHostAddress::Any); QTextCodec::setCodecForCStrings( QTextCodec::codecForName("UTF-8")); TcpServer s(addr, 3666, katana); return a.exec(); Vytvoření serveru Framework Qt obsahuje hotová řešení pro síťovou komunikaci. Tcp server je tu reprezentován třídou QTcpServer. Tato třída vytváří možnost přijímat příchozí Tcp spojení. Standardně se nastavuje naslouchání na portu a adrese počítače, ale QTcpServer umožňuje tak naslouchat a všech adresách počítače. Pro zapnutí naslouchání serveru slouží metoda listen(), která přijímá jako parametry adresu a port pro naslouchání. Při vytváření serveru je také nutné propojit signál newConnection() s obslužnou funkcí. Tento signál je emitován v případě, kdy je navázáno nové spojení. Následující část kódu demonstruje vytvoření objektu server, základní nastavení, žádná proxy pro socket serveru a maximální počet čekajících spojení. Dále pak propojení signálu s obslužnou funkcí a samotné spuštění serveru. server = new QTcpServer(this); server->setProxy(QNetworkProxy::NoProxy); server->setMaxPendingConnections(1); connect(server, SIGNAL(newConnection()), this, SLOT(handleNewConnection())); bool listening = server->listen(addr, port); if(not listening){ QTimer::singleShot(0, qApp, SLOT(quit())); } Zpracování nového spojení Pokaždé, pokud je vytvořeno nové spojení na server je nutné udělat několik kroků, které umožní další práci se spojením. Jako první krok, ve funkci která se stará obsluhu nových spojení, je nutné získat socket tohoto spojení se seznamu čekajících spojení. QTcpSocket *socket = server->nextPendingConnection(); Druhým krokem je připojení obslužných funkcí na signály nově vytvořeného socketu. Tyto funkce zpracovávají nově příchozí data nebo odpojení socketu.
5.3
Server
44
connect(socket, SIGNAL(readyRead()), this, SLOT(processRequest())); connect(socket, SIGNAL(disconnected()), this, SLOT(gotDisconected())); Jako poslední krok v současné implementaci je poslání výzvy pro přihlášení. Server při každém novém připojení vyšle zprávu LOGIN, kterou vyžaduje aby se uživatel nového spojení autentizoval. Zpracování příchozích zpráv a přihlášení uživatele Zpracování příchozích dat se dělí na dvě části. První část je zpracování příchozího požadavku od uživatel serveru, který ještě není přihlášený. Tato skutečnost se zjišťuje prohledáním seznamu přihlášených uživatelů. Pokud uživatel v seznamu není nalezen je zkontrolováno jestli poslal přihlašovací zprávu ve správném formátu. Uživatel má dvě možnosti. Příkaz LOGIN s parametry jméno a heslo uživatele. Nebo příkaz FORCELOGIN se stejnými parametry jako předchozí příkaz. Při druhé variantě přihlašovacího příkazu uživatel říká, že pokud je přihlášen odjinud má se toto spojení ukončit a nahradit současným. Pokud přihlášený uživatel zašle zprávu LOGIN, existuje ještě možnost odpovědi ALREADYLOGGED, která informuje uživatele o tom, že už je na serveru přihlášen. V případě že nový uživatel spojení nepošle příkaz pro přihlášení, je spojení okamžitě přerušeno. Druhá část zpracování příchozích zpráv obstarává reakci pro přihlášené uživatele vyžadující ovládání Katany. Rozpoznání příkazu probíhá stejně jako u implementace klientské programu. Po té co je příkaz rozpoznán, je puštěna příslušná obslužná metoda. Tato metoda spouští kód ovládající Katanu, respektive provádí operace s objektem Katany vytvořeném při startu serverového programu. Jediným rozdílem ve zpracování příchozích zpráv oproti klientskému programu je ten, že klientský program pracuje s jedním vytvořeným socketem. Naproti tomu server musí zpracovávat několik socketů zároveň. (aktivní spojení, nově příchozí spojení) Z tohoto důvodu je nutné při přijímání zpráv rozpoznat který socket emitoval signál o příjmu nových dat. Následující kód demonstruje získání odkazu na socktet, který vyvolal signál readyRead(). QTcpSocket* socket; socket = qobject_cast(this->sender());
6
DISKUZE A ZÁVĚR
6 6.1
45
Diskuze a závěr Diskuze
Výše popsaný návrh a řešení se ukázal jako spolehlivě a plně funkční. Obě programové části, založené na frameworku Qt, spolu bez problémů komunikují a nenastaly při jejich vývoji žádné větší komplikace. Bohužel použité rozhraní KNI, která je zakomponováno do serverové aplikace se ukázalo jako problematické a uživatelsky méně přívětivé. Pro vývoj aplikace byla použita verze KNI 3.9, jelikož je standardně dodávána k verzi přístroje 6M180. Tuto verzi Katany je možno připojit k PC pouze přes sériový port. Základním nedostatkem rozhraní je naprosto nedostatečná dokumentace, která se výrazně nezlepšuje ani s následujícími verzemi KNI. Přiložená dokumentace je buď neaktuální a nekoresponduje s kódem použitým v příkladech, nebo se soustřeďuje jen na připojení k robotu bez většího vysvětlení a další práci už nepopisuje. Komentáře k jednotlivým třídám, metodám a strukturám rozhraní jsou taktéž nedostatečné. U některých jsou popsány podrobně parametry, funkce i možné výjimky, které se mohou naskytnout. Ale u velkého množství kódu toto chybí a uživatel rozhraní musí procházet řádek po řádku zdrojový kód a zjišťovat potřebné informace. Obdobná situace je i u přiložených příkladů, kde chybí popis souvislostí a jejich nalezení znamená opět procházení zdrojového kódu KNI. Částečné zpřehlednění situace může poskytnout nástroj Doxygen, který dokáže ze zdrojových kódů vygenerovat dokumentaci, která respektuje všechny závislosti a vytvoří i závislostní grafy. Použití nástroje Doxygen je doporučováno i v dokumentech přiložených k rozhraní KNI. V dokumentech přiložených k rozhraní verze 3.9 je prezentováno, že je možné zkompilovat KNI rozhraní za pomoci kompilátoru GCC verze 3 a 4. Bohužel toto neplatí úplně a bylo nutné do zdrojového kódu rozhraní zasahovat. KNI je vyvíjeno pomocí nástroje Visual Studio firmy Microsoft a konstruktor třídy, která se stará o obsluhu COM portu používá jednu funkci, která se v knihovnách ke kompilátoru GCC 3.5 nevyskytuje. Jedná se o funkci strncpy_s, která se používá na zkopírovaní požadovaného počtu znaku do pole znaků. V tomto případě bylo nutné tuto funkci nahradit standardní funkcí strncpy. Další obtíže s kompilací způsobilo použití kompilátoru GCC verze 4.5. Tuto verzi bylo nutné použít, jelikož serverová aplikace, do které je kód KNI zakomponován, používá framework Qt a tento framework využívá právě tento kompilátor. Problém nastal u funkce CreateFile která se stará o otevření souboru nebo vstupně-výstupního zařízení, v tomto případě COM portu a funkce BuildCommDCB, která naplňuje strukturu DCB informacemi o zařízení z řídícího řetězce. V knihovnách ke kompilátoru GCC 4.5 mají tyto funkce rozdílné vlastnosti vstupujícího řetězce. Ve verzi kompilátoru 3.5 vstupuje do funkcí řetězec typu multibyte, kde je jeden znak poskládán ze sekvence jednoho nebo více bytů. Naproti tomu ve verzi 4.5 vstupuje do funkcí řetězec typu wide-character, kde je každý znak prezentován dvěma byty. Řešení toho problému spočívá vytvoření náhradních proměnných typu WCHAR a pomocí funkce mbstowcs vytvořit kopie původních řetězců
6.2
Závěr
46
a tyto nově použít v požadovaných funkcích. Řešení těchto problémů, způsobených špatnou zpětnou kompatibilitou, je často velmi zdlouhavé a náročné.
6.2
Závěr
Výsledná aplikace je funkční a bezchybně plní svůj účel. Úspěšná realizace ukázala výborné vlastnosti frameworku Qt pro rychlé psaní aplikací různého druhu. Také ukázala, i když s problémy, že pomocí rozhraní KNI jde v reálném čase vytvořit program provádějící nejrůznější úkony s Katanou, a že toto rozhraní jde implementovat jako součást jiných větších celků. Aplikace vytvořená v rámci bakalářské práce umožňuje téměř plné ovládání Katany a využívá architektury klient-server zvláště z důvodu toho, že verze Katany 6M180 neumožňuje síťový přístup. Proto je toto řešení vhodné spíše pro tento a starší typ robotu. Avšak řešení v rámci bakalářské práce umožňuje platformní nezávislost klienta. TCP server zpřístupňuje velkou funkcionalitu Katany a má jasně definovaný a jednoduchý textový komunikační protokol, proto je možné při dodržení pravidel protokolu napsat klientský program prakticky na jakékoliv zařízení nebo platformu, která umožňuje síťovou komunikaci. Navrhované řešení serveru umožňuje jeho zprovoznění i pod systémy Linux. U Qt je to samozřejmostí a programový Qt kód serveru nevyužívá žádné speciální funkce dostupné pouze pro platformu Windows. U rozhraní KNI je také možná kompilace pod systémem Linux. Toto řešení nebylo v rámci bakalářské práce realizováno, ale jako hypotetická možnost určitě existuje a v některých případech by toto řešení bylo i výhodnější. Kdy by bylo ke Kataně připojeno nějaké nenáročné zařízení běžící na platformě Linux a skrze realizovaný TCP server by zpřístupňovalo funkcionalitu Katany. Klientská aplikace je vytvořená tak, aby nabízela široké možnosti ovládaní Katany. Avšak je koncipována spíše na studijní účely, kdy je nutné pochopit jakým způsobem robot pracuje, nebo pro jednorázové úlohy. Na úlohy, které vyžadují opakovanou činnost se lépe hodí program napsaný jen k tomu danému účelu. Implementované zobrazování obrazu je pro dané řešení naprosto nezbytné, provedená implementace se ukázala jako vyhovující, ale únosná míra snímkové frekvence se ukázala jako dva snímky za sekundu. Při větší frekvenci dochází k nárůstu zátěže PC a chybám při získávání požadovaného obrazu. Pro získání plynulého obrazu by byla lepší technologie streamovaného videa. K výše zmiňovaným studijním účelům je současné řešení vhodné zvláště tehdy, kdy není pro nedostatek prostředků možno zajistit výuku přímo u robotu a je nutný vzdálený přístup.
7
7
LITERATURA
47
Literatura
[1] PRATA, S. Mistrovství v C++ . Computer Press, 2007 1120 s. ISBN 978-80-2511749-1. [2] STROUSTRUP, S. The C++ Programming Language. Addison-Wesley Publishing Company, 1997 ISBN 978-0201889543. [3] NOVÁK, P. Mobilní roboty - pohony, senzory, řízení. BEN - technická literatura, 2005 256 s. ISBN 80-7300-141-1. [4] KARGER, A., KARGEROVÁ, M. Základy robotiky a prostorové kinematiky. ČVUT, 2008 265 s. ISBN 80-01-02183-1. [5] BLANCHETTE, J., SUMMERFIELD, M. C++ GUI Programming with Qt 4 (2nd Edition). Prentice Hall, 2008 752 s. ISBN 978-0132354165. [6] NEURONICS AG Návod k použití robotů Katana [online]. Neuronics AG, [cit. 4. 2010]. Dostupné na: http://katana.exactec.com/images/stories/pdf/katana_ manual_cz.pdf. [7] EXACTEC Software [online]. EXACTEC, [cit. 4. 2010]. Dostupné na: http://katana.exactec.com/index.php/katana/software. [8] EXACTEC Základní informace [online]. EXACTEC, [cit. 4. 2010]. Dostupné na: http://katana.exactec.com/index.php/katana/ zakladni-informace. [9] EXACTEC Aplikace [online]. EXACTEC, [cit. 4. 2010]. Dostupné na: http://katana.exactec.com/index.php/aplikace. [10] NEURONICS AG Katana4D Příručka pro uživatele [CD-ROM]. Neuronics AG, [cit. 4. 2010]. Soubor 4 Katana4D 4.3.4 Manuál.pdf přiložený na CD-ROM k robotu. [11] REICHL, J., VŠETIČKA, M. Eulerovy úhly [online]. Encyklopedie fyziky, [cit. 4. 2010]. Dostupné na: http://fyzika.jreichl.com/index.php?page=108&sekce= browse. [12] NEURONICS AG Katana Native Interface dokumentace [KNI] [online]. Neuronics AG, [cit. 4. 2010]. Dostupné na: http://katana.exactec.com/images/stories/pdf/kni_ dokumentace.pdf.