Difference between revisions of "Janko Hraško - Miroslav Cibula, Tomáš Búcsi, Juraj Gavura"
(Vytvorenie stranky a naplnenie textom) |
(Pridanie obrazkov) |
||
Line 20: | Line 20: | ||
K ním sme vytvorili zjednodušení terminálový interface, cez ktorý je možné ovládať základné funkcie robota aj volaním z Pythonu a iných jazykov. Na vrch sme postavili wrapper v jazyku Python, z ktorého sme pomocou knižnice ''pexpect'' <sup>[[#Referencie|[4]]]</sup> volali terminálový interface a nižšie úrovne. | K ním sme vytvorili zjednodušení terminálový interface, cez ktorý je možné ovládať základné funkcie robota aj volaním z Pythonu a iných jazykov. Na vrch sme postavili wrapper v jazyku Python, z ktorého sme pomocou knižnice ''pexpect'' <sup>[[#Referencie|[4]]]</sup> volali terminálový interface a nižšie úrovne. | ||
+ | |||
+ | |||
+ | |||
+ | <gallery mode="packed-hover" widths=200px heights=200px> | ||
+ | |||
+ | File:Jh circuit.jpg|Pôvodný riadiaci obvod bez batérií | ||
+ | File:Jh side.jpg|Robot zboku | ||
+ | File:Jh top.jpg|Robot zvrchu s ukladacím priestorom | ||
+ | File:Jh front arm.jpg|Rameno a stereokamera | ||
+ | File:Jh front realsense.jpg|Stereokamera Intel Realsense D435 | ||
+ | |||
+ | </gallery> | ||
+ | |||
+ | |||
=== Servery a webové rozhranie === | === Servery a webové rozhranie === | ||
Line 25: | Line 39: | ||
Na RPi sme vytvorili primárny server, ktorý prijíma inštrukcie od klienta a respektívne volá metódy Python wrappera, čím riadi robota. Server komunikuje cez TCP pomocou ''Socket API'' a pre každého pripojeného klienta dynamicky vytvára nové vlákno. Keďže niektoré inštrukcie vracajú stav robota, server komunikuje s klientom obojsmerne. | Na RPi sme vytvorili primárny server, ktorý prijíma inštrukcie od klienta a respektívne volá metódy Python wrappera, čím riadi robota. Server komunikuje cez TCP pomocou ''Socket API'' a pre každého pripojeného klienta dynamicky vytvára nové vlákno. Keďže niektoré inštrukcie vracajú stav robota, server komunikuje s klientom obojsmerne. | ||
− | RPi taktiež vysiela stream zo stereokamery, a to cez sekundárny video server využívajúci knižnicu ''Vidgear'' <sup>[[#Referencie|[5]]]</sup> komunikujúcu pomocou | + | RPi taktiež vysiela stream zo stereokamery, a to cez sekundárny video server využívajúci knižnicu ''Vidgear'' <sup>[[#Referencie|[5]]]</sup> komunikujúcu pomocou protokolu ''ZeroMQ'' <sup>[[#Referencie|[6]]]</sup>. Pre zvýšenie výkonu vysielame len v rozlíšení 240p pri 10 FPS a každý frame komprimujeme pomocou JPEG kompresie. |
Front-end webového rozhrania sme implementovali pomocou frameworku ''Streamlit''. Rozhranie posiela dáta na ovládanie robota na primárny server a prijíma a zobrazuje video stream z video servera. | Front-end webového rozhrania sme implementovali pomocou frameworku ''Streamlit''. Rozhranie posiela dáta na ovládanie robota na primárny server a prijíma a zobrazuje video stream z video servera. | ||
Line 34: | Line 48: | ||
Rozhranie umožňuje používateľovi pohybovať základňou robota, manipulovať s robotickou rukou umiestňovaním jej efektoru na zadané súradnice, zatvárať a otvárať gripper, ako aj spúšťať procedúru na zdvihnutie objektu zo zadaných súradníc a jeho uloženie do ukladacieho priestoru umiestneného na robotovi. | Rozhranie umožňuje používateľovi pohybovať základňou robota, manipulovať s robotickou rukou umiestňovaním jej efektoru na zadané súradnice, zatvárať a otvárať gripper, ako aj spúšťať procedúru na zdvihnutie objektu zo zadaných súradníc a jeho uloženie do ukladacieho priestoru umiestneného na robotovi. | ||
+ | |||
+ | |||
+ | |||
+ | <gallery mode="packed-hover" widths=200px heights=200px> | ||
+ | |||
+ | File:Jh full.png|Webové rozhranie v kompletnom stave | ||
+ | File:Jh brick.png|Rozhranie so streamom z farebnej kamery | ||
+ | File:Jh brick arm.png|Navigácia ramena na kocku | ||
+ | File:Jh brick grip.png|Zachytenie kocky gripperom | ||
+ | |||
+ | </gallery> | ||
+ | |||
+ | |||
== Záver == | == Záver == | ||
Line 41: | Line 68: | ||
Vďaka týmto zmenám sa budúce práce na robotovi môžu viac zamerať na vývoj softvérovej stránky robota a implementáciu funkcií, ktoré sme v rámci nášho projektu nestihli dokončiť, ako napríklad vizualizáciu robotického ramena na webovom rozhraní, plné využitie počítačového videnia pomocou obrazu zo stereokamery a zjemnenie pohybu robotickej ruky. | Vďaka týmto zmenám sa budúce práce na robotovi môžu viac zamerať na vývoj softvérovej stránky robota a implementáciu funkcií, ktoré sme v rámci nášho projektu nestihli dokončiť, ako napríklad vizualizáciu robotického ramena na webovom rozhraní, plné využitie počítačového videnia pomocou obrazu zo stereokamery a zjemnenie pohybu robotickej ruky. | ||
+ | |||
+ | <gallery mode="packed-hover" widths=300px heights=300px> | ||
+ | |||
+ | File:Jh overview.jpg|Finálna verzia robota s riadiacím terminálom | ||
+ | |||
+ | </gallery> | ||
== Referencie == | == Referencie == |
Revision as of 01:49, 12 February 2023
Contents
Ciele projektu
Cieľom nášho projektu bolo opraviť a zlepšiť funkcionalitu už vytvoreného robota Janko Hraško, ktorý vznikol ako bakalárska a diplomová práca Petra Pukančíka [1,2] a diplomová práca Mareka Tučániho [3].
Cieľmi bolo konkrétne vymeniť zastaralú stereokameru Surveyor Stereo Vision System a SBC počítač Gumstix Overo Air slúžiaci na spracovanie obrazu za modernejšiu stereokameru Intel RealSense D435i prepojenú s počítačom Raspberry Pi 4.
Ďalej sme chceli vytvoriť a sprevádzkovať kontrolný server na RPi 4, pomocou ktorého by bolo možné ovládať robota na diaľku.
Realizácia projektu
Hardvér a hardvérový interface
Do robota sme pridali počítač Raspberry Pi 4 s 8 GB RAM a 64 GB pamäte, ktorý komunikuje cez USB-TTL prevodník s mikrokontrolérovým riadiacim obvodom, ktorý riadi servá robotického ramena a motory. Keďže dokumentácia pôvodného riadiaceho obvodu nebola dostatočná na jeho replikáciu alebo obnovenie, rozhodli sme sa ho ponechať v pôvodnom stave.
Raspberry Pi bol spolu s kontrolným obvodom osadený do nami navrhnutého rámu vytlačeného v 3D tlačiarni. K RPi sme pripojili napäťový step-down menič pre potreby napájania z batérie. Stereokamera Intel RealSense D435i bola pripevnená na prednú stranu základne robota a prepojená cez USB kábel s RPi 4.
Iné výraznejšie zmeny v hardvéri alebo konštrukcii robota nebolo možné realizovať, keďže to jeho konštrukcia nedovoľovala.
Predchádzajúceho práce poskytovali funkčný kód pre nízkoúrovňové ovládanie robota, riešenie inverznej kinematiky ramena a detekciu kolízii medzi ním a telom robota. Tieto kódy sme upravili a prispôsobili pre naše použitie a zaobalili sme ich do formy C++ knižníc.
K ním sme vytvorili zjednodušení terminálový interface, cez ktorý je možné ovládať základné funkcie robota aj volaním z Pythonu a iných jazykov. Na vrch sme postavili wrapper v jazyku Python, z ktorého sme pomocou knižnice pexpect [4] volali terminálový interface a nižšie úrovne.
Servery a webové rozhranie
Na RPi sme vytvorili primárny server, ktorý prijíma inštrukcie od klienta a respektívne volá metódy Python wrappera, čím riadi robota. Server komunikuje cez TCP pomocou Socket API a pre každého pripojeného klienta dynamicky vytvára nové vlákno. Keďže niektoré inštrukcie vracajú stav robota, server komunikuje s klientom obojsmerne.
RPi taktiež vysiela stream zo stereokamery, a to cez sekundárny video server využívajúci knižnicu Vidgear [5] komunikujúcu pomocou protokolu ZeroMQ [6]. Pre zvýšenie výkonu vysielame len v rozlíšení 240p pri 10 FPS a každý frame komprimujeme pomocou JPEG kompresie.
Front-end webového rozhrania sme implementovali pomocou frameworku Streamlit. Rozhranie posiela dáta na ovládanie robota na primárny server a prijíma a zobrazuje video stream z video servera.
Webové rozhranie má taktiež implementovanú vizualizáciu robotického ramena, ktorú sme vytvorili pomocou knižnice Robotics Toolbox for Python [7]. Virtuálnu verziu ramena sme skonštruovali pomocou Denavit-Hartenberg parametrov nájdených v práci [2], ktoré sme kvôli nezrovnalostiam upravili. Primárny server potom odosiela do webového rozhrania konfiguráciu servomotorov, ktoré sú použité na vizualizáciu.
DH-parametre použité na konfiguráciu však zrejme nie sú korektné a je potrebné ich prerobiť. Z tohto dôvodu je táto časť vo finálnej implementácii skrytá.
Rozhranie umožňuje používateľovi pohybovať základňou robota, manipulovať s robotickou rukou umiestňovaním jej efektoru na zadané súradnice, zatvárať a otvárať gripper, ako aj spúšťať procedúru na zdvihnutie objektu zo zadaných súradníc a jeho uloženie do ukladacieho priestoru umiestneného na robotovi.
Záver
V rámci tohto projektu sa nám podarilo obnoviť robota Janko Hráško.
Aktualizovali sme hardvér tak, aby nebolo potrebné zasahovať do vnútornej elektroniky v nasledujúcich projektov. Taktiež sme pridali počítač Raspberry Pi a zaobalili sme staršie knižnice do skriptov, s ktorými sme zjednodušili používanie robota a aj vývoj ďalších funkcionalít.
Vďaka týmto zmenám sa budúce práce na robotovi môžu viac zamerať na vývoj softvérovej stránky robota a implementáciu funkcií, ktoré sme v rámci nášho projektu nestihli dokončiť, ako napríklad vizualizáciu robotického ramena na webovom rozhraní, plné využitie počítačového videnia pomocou obrazu zo stereokamery a zjemnenie pohybu robotickej ruky.
Referencie
- Pukančík, P. (2012). Riadiaci systém s inverznou kinematikou pre mobilné robotické rameno. Bakalárska práca, FMFI UK, Bratislava.
- Pukančík, P. (2015). Robotický systém pre hranie stolovej hry. Diplomová práca, FMFI UK, Bratislava
- Tučáni, M. (2015). Mobilný inteligentný robot s ramenom a stereovidením. Diplomová práca, FMFI UK, Bratislava
- https://github.com/pexpect/pexpect
- https://abhitronix.github.io/vidgear
- https://zeromq.org
- https://github.com/petercorke/robotics-toolbox-python