Manuál pre robotickú platformu Q.bo

Všeobecne o platforme Q.bo

Q.bo je štandardná robotická platforma vyvinutá spoločnosťou TheCorpora. Q.bo obsahuje pokročilé technológie, ktoré umožňujú skúmať, experimentovať, vytvárať a rozvíjať množstvo zaujímavých projektov okolo tejto platformy.

Vznik

V roku 2008, Francisco a Carlos Paz založili spoločnosť TheCorpora, ktorá v súčasnosti združuje všetky roky osobitného vývoja spolu so skupinami odborníkov v oblasti robotiky, priemyselného dizajnu, elektroniky a programovania. Tým sa začal formovať projekt Q.bo.

Open source

Spoločnosť TheCorpora verí, že inovácie a budúcnosť robotiky iba prostredníctvom rozvoja, propagácie a vytvorenia open source komunít, ktoré umožňujú prijatie robotických technológií a pozitívneho sociálneho dopadu. To je dôvod, prečo sa v priebehu celého procesu vytvárania projektu Q.bo pracovalo s otvorenými platformami. Hlavné komponety predstavujú distribúcia Ubuntu operačného systému Linux, robotická vývojová platforma ROS (Robot Operating System) od spoločnosti Willow Garage a platforma Arduino ako nástroj pre navrhovanie a implementáciu elektroniky.

Q.bo vyhotovenia

Robot Q.bo sa štandardne vyrába v troch hlavných vyhotoveniach: Basic kit, Comlete Lite, Complete pro. Nazývajú sa taktiež aj Q.bo Basic Platform, Q.bo Lite Evo, Q.bo Pro Evo.

Q.bo Basic kit

Q.bo Basic Kit slúži ako montážna základňa. Táto sada obsahuje plastové kryty, oceľový rám, mechanické diely, webové kamery a wifi anténu. Je možné doplniť ho pomocou servomotorov, radičov dosiek (Q.boards), základných dosiek, mikroprocesorov alebo pamätí podľa vášho výberu, čím je možné vytvoriť úplne vlastného Q.ba. Podľa Assembling Instructions a Qbo Wires je možné postupovať pri montáži dielov. Aktuálna cena na stránkach výrobcu je 755.00 €.

Q.bo Complete Lite

Toto vyhotovenie predstavuje zostaveného robota Q.bo, ktorý však nezahŕňa mechanizmus pre viečka. Aktuálna cena na stránkach výrobcu je 2,845.00 €. Obsahuje:

  • základnú dosku Intel D2700MUD Mini ITX
  • procesor Intel atom D2700
  • 2 GB pamäte RAM
  • 64 GB SSD disk
  • Wi-Fi adaptér Intel 6200 IEEE 802.11n

Q.bo Complete Pro

Vyhotovenie Q.bo Complete Pro je plne zostavený robot Q.bo. Aktuálna cena na stránkach výrobcu je 3,795.00 €. Obsahuje:

  • základnú dosku DQ67EP Mini ITX
  • procesor Intel Core i3
  • 4 GB DDR3 pamät RAM
  • 128 GB SSD disk
  • Wi-Fi adaptér Intel 6200 IEEE 802.11n

Q.boards

Základom Q.bo robota je PC podľa jednotlivých vyhotovení ako bolo spomenuté vyššie. Ďalšie časti sú tzv. Q.boards1 - periférne zariadenia, ktoré umožňujú robotovi komunikovať s okolím. Predstavujú sady niekoľkých senzorov a akčných členov, ktoré sú navrhnuté tak, aby sprostredkovávali dáta pre PC. Na stránkach výrobcu sa nachádzajú podrobné zapojenia a zoznam súčiastok pre jednotlivé dosky.

Q.board1

Q.board1 je základným ovládacím panelom. Jeho hlavné funkcie sú nasledovné:

  • ovládanie dvoch jednosmerných motorov pre pohyb robota,
  • ovládanie audio zosilňovača,
  • ovládanie I²C zbernice pre komunikáciu s ostatnými Q.boards.

Doska je vybavená rýchlym mikroprocesorom ATmega1280, ktorý je kompatibilný s Arduino IDE. Hardvérový regulátor motora je integrovaný do dosky. Tento regulátor je schopný riadiť dva 12V/2A DC motory. Odporúčané motory sú EMG30.

Signály z enkóderov (z obidvoch motorov) sú pripojené na piny vnútorného prerušenia na ATmega1280, takže je možné vytvárať rôzne softvérové PID regulátory.

Konektor zbernice I²C je tiež vyvedený na doske, takže je možné pripojiť ďalšie senzory a zariadenia. Ultrazvukové snímače SRF10 sa používajú na detekciu prekážok v okolí. LCD03 doska sa používa na výpis informácií o stave robota. Štandardne sa zobrazuje meno robota v sieti, sieťová IP adresa a stav batérie. Na I²C zbernicu sa pripája Q.board4 ako inerciálna meracia jednotka (IMU) pre detekciu pádu robota a pre zlepšenie navigačného systému.

Na sériovú zbernicu ATmega1280 je pripojený prevodník Serial_to_USB. Vďaka Arduino bootloader-u je doska jednoducho naprogramovateľná a ovládaná počítačom. Program pre riadenie motorov a senzorov je kompletný, ale tiež je možné modifikovať ho, a tým zmeniť alebo prispôsobiť jeho funkčnosť vlastným potrebám.

Doska má taktiež integrovaný audio zosilňovač. Zvukový výstup pre tento zosilňovač má 3-pinový konektor na doske. Tieto signály musia byť analógové.

Q.board2

Q.board2 je umiestnená na čele Q.bo a je kompatibilný s Arduino Duemilanove. Má integrovaný posuvný register, ktorý riadi LED na doske Q.board5. Má 3 elektretové mikrofónne vstupy, ktoré pripojené na analógové piny mikroprocesora ATmega328. Doska má jeden prídavný analógový vstup. Tento vstup je pripojený na základný zvukový výstup počítača pre detekciu výstupu, ale môže byť použitý pre iné účely. Ďalej sú vyvedené štyri konektory, kde sú pripojené k servo motorom určeným na otáčanie a nakláňanie hlavy robota a očných viečok. Program pre ovládanie všetkých týchto zariadení je už dokončený, ale môže byť modifikovaný pre rozšírenie jeho funkčnosti.

Q.board3

Táto doska predstavuje napájací zdroj pre ostatné periférie a PC. Jej cieľom je dosiahnuť čo najlepšiu energetickú náročnosť pre Q.bo robota. Doska umožňuje úplne vypnúť PC a ďalšie periférie. Taktiež obsahuje elektroniku pre nabíjanie batérie. Základom dosky je mikroprocesor STM32f103 32bit Cortex-M3 od spoločnosti STMicroelectronics. Doska má konektor pre batériu a externé napájanie. Ak nie je pripojený žiadny napájací zdroj, doska začne automaticky využívať napájanie z batérie. Maximálny výkon dosky je 150W. Doska má tiež konektor I2C, takže je možné čítať úroveň nabitia batérie a stav napájania dosky inými mikroprocesory.

Q.board4 a Q.board5

Táto doska obsahuje gyroskop a akcelerometer. Oba sú prístupné prostredníctvom zbernice I²C.

Posledná doska tvorí ústa robota pomocou LED matice. Obsahuje 20 štandardných LED, ktorými je možné znázorniť rôzne výrazy tváre a trojfarebnú LED, ktorá predstavuje nos robota.

Open Q.bo

Open Q.bo1 je jedna z hlavných komunít okolo platformy Q.bo. Táto komunita sa venuje softvéru, hardvéru a rôznym aplikáciam pre Q.ba. O týchto a mnohých iných témach môžete diskutovať na zriadenom fóre2. Tiež je tu možné nájsť rôzne návody pre demo aplikácie s Q.bom, postupy pre kalibráciu kamier, IMU senzorov a rôzne ďalšie ukážky.

Názov aplikácie Autor Dátum vytvorenia Krátky popis
qbo_arduqbo Miguel Angel Julian Aguilar 2012-04-09 Komunikácia s Q.boards
qbo_audio_control Sergio Merino 2012-02-17 Ovládanie audio podsystému
qbo_brain Arturo Bajuelos, Sergio Merino 2012-02-28 Demo qbo_brain
qbo_camera Miguel Angel Julian Aguilar 22012-04-10 Spúšťanie a kalibrácia kamier
qbo_cereal_port Gonçalo Cabrita, Miguel Angel Julian Aguilar 2012-04-10 Komunikácia cez sériový port
qbo_face_following Arturo Bajuelos 2012-02-22 Detekcia a sledovanie tváre
qbo_face_msgs Arturo Bajuelos 2012-03-26 Msgs pre qbo_face_vision stack
qbo_face_recognition Arturo Bajuelos 2012-02-23 Rozpoznávanie tváre
qbo_face_tracking Arturo Bajuelos 2011-11-24 Detekcia a sledovanie tváre
qbo_internet_service Sergio Merino 2013-01-02 Demo internet_service
qbo_joy_ctrl Martin Zidek 2013-05-09 Ovládanie joystikom
qbo_launchers Miguel Angel Julian 2012-12-04 Spúšťače ROS skriptov
qbo_linphone Sergio Merino 2012-02-20 Demo qbo_linphone
qbo_listen Sergio Merino 2011-12-12 Rozpoznávanie hlasu
qbo_music_player Arturo Bajuelos 2012-02-28 Rozpoznávanie gest a ovládanie prehrávača hudby
qbo_object_recognition Arturo Bajuelos 2012-02-28 Rozpoznávanie objektov
qbo_pymouth Miguel Angel Julian Aguilar 2012-04-10 Ovládanie výrazov tváre
qbo_questions Sergio Merino, Arturo Bajuelos 2012-02-20 Jednoduché otázky a odpovede
qbo_random_move Miguel Angel Julian Aguilar, Arturo Bajuelos 2012-04-10 Detekcia prekážok a náhodný pohyb
qbo_self_recognizer Arturo Bajuelos 2012-02-28 Rozpoznávanie iného Q.ba v zrkadle
qbo_stereo_selector Arturo Bajuelos 2012-02-28 Demo qbo_stereo_selector
qbo_system_info Sergio Merino 2012-02-16 Poskytovanie systémových informácií
qbo_talk Miguel Angel Julian Aguilar 2012-04-10 Syntetizácia reči cez Festival
qbo_webi Sergio Merino, Daniel Cuadrado, Miguel Julián, Arturo Bajuelos, Daniel Julián 2012-11-20 Webové rozhranie qbo_webi
qbo_face_vision Arturo Bajuelos 2012-02-20 Rozpoznávanie a sledovanie tváre

Všeobecne o frameworku ROS

ROS (Robot Operating System) je flexibilný framework pre písanie softvér určeného pre robotiku. Ide o súbor nástrojov, knižníc a konvencií, ktoré majú za cieľ zjednodušiť úlohu vytvárania komplexného a robustného správanie robota v širokej škále robotických platforiem.

Vzhľadom na to, že vytváranie robustného a všeobecne použiteľného robotického softvéru je náročné, sa ROS využíva ako middlevér medzi hardvérovou vrstvou a aplikačnou vrstvou. Poskytuje hardvérovú abstrakciu, ovládače zariadení, knižnice, vizualizéry, odovzdávanie správ, správu balíčkov a ďalšie. V nasledujúcich častiach sú popísané niektoré z hlavných rysov ROS platformy.

Distribuovaný framework

ROS je distribuovaný framework, ktorý môže byť spustený na viac počítačov, takže výpočtový výkon robota môže byť rozdelený na rôzne stroje, pričom jednotlivé počítače spolu komunikujú. Výhodou je zníženie výpočtových nárokov priamo na robotovi.

Znovupoužiteľnosť softvéru

Opätovné použitie kódu umožňuje nový výskum a vývoj komunity po celom svete. Spustiteľné súbory v ROS-e sa nazývajú uzly (nodes). Tieto spustiteľné súbory sa zlučujú do ROS balíčkov (packages). Skupina balíčkov je volaná stack. Tieto stacky môžu byť zdieľané alebo ďalej distribuované.

Jazyková nezávislosť

Framework ROS je možné naprogramovať pomocou rôznych populárnych jazykov (ako sú Python, C++ a Lisp). Uzly môžu byť napísané v akomkoľvek z týchto jazykov a môžu komunikovať prostredníctvom ROS správ (messages) bez akýchkoľvek problémov.

Jednoduché testovanie

ROS má rôzne vstavané jednotky a integračné testy, ktoré sa nazývajú rostest. Tie umožňujú testovať ROS balíčky a ich správne funkcionality. rostest je rozšírením roslaunch, ktorý umožňujú launch súbory(spúšťače), ktoré sa v tomto prípade používajú na skúšobné účely. V plne funkčnom systéme vám umožní vykonať kompletné integrácie naprieč rôznymi uzlami.

Škálovateľnosť

ROS je efektívny na single machine rovnako ako aj pre veľké runtime systémy, vývojové procesy alebo rozsiahle priemyselné použitie.

Free a open source

Zdrojový kód ROS je otvorený a je to úplne zadarmo na použitie. Ústrednou časťou ROS je licencovaný pod BSD licenciou, a to môže byť opätovne použité v komerčných a uzavretých produktov. Hlavným cieľom spoločnosti Willow Garage je umožniť vývojárom vytvárať ďalších schopných robotov a aplikácie ľahko a rýchlo na spoločnej platforme.

Spolupráca a vývoj

ROS bol postavený od základu tak, aby podporoval spoluprácu pri vývoji robotiky a robotického softvéru. Napríklad jedno laboratórium môže mať odborníkov na zmapovanie vnútorného prostredia, a môže prispieť systémom pre vytváranie máp. Ďalšia skupina môže mať odborníkov na využitie máp pre navigáciu, a ešte jedna skupina by mohla riešiť prístup počítačového videnia, ktorý spoľahlivo rozpoznáva malé objekty v okolitom prostredí. ROS bol navrhnutý špeciálne pre takéto výskumné skupiny, ktoré môžu spolupracovať a nadväzovať na dielo inej skupiny.

S pomocou medzinárodných komunít v oblasti vývoja robotiky sa v súčasnosti pracuje na rozvíjaní jadrového softvéru ROS-u pre ďalšie platformy. To zahŕňa nové ovládače a algoritmy, rovnako aj integráciu mnohých populárnych open source knižníc v tejto oblasti ako sú napríklad OpenCV, OpenNI.

ROS distribúcie

ROS distribúcia je sada ROS balíčkov. Účelom distribúcií je umožniť vývojárom pracovať na relatívne stabilnom codebase, kým nie sú pripravení presunúť všetko na vyššiu verziu. V súčasnosti vychádza nová distribúcia každý rok v máji.

Názov distribúcie Release dátum EOL dátum
ROS Kinetic Kame (Odporúčaná) 23. máj 2016 máj 2021
ROS Jade Turtle 23. máj 2015 máj 2017
ROS Indigo Igloo 22. júl 2014 apríl 2019 (Trusty EOL)
ROS Hydro Medusa 4. september 2013 máj 2015
ROS Groovy Galapagos 31. december 2012 júl 2014
ROS Fuerte Turtle 23. apríl 2012 ---
ROS Electric Emys 30. august 2011 ---
ROS Diamondback 2. marec 2011 ---
ROS C Turtle 2. august 2010 ---
ROS Box Turtle 2. marec 2010 ---

ROS platformy

Nasledujúce robotické hardvérové platformy využívajú ROS alebo je v nich možné použiť ROS softvér.

Zoznam vybraných ROS platforiem

Všeobecné robotické manipulátory Mobilné robotické manipulátory Mobilné roboty Humanoidné roboty
Baxter Mobility base pre robota Baxter Austrobotics Outdoor Robot Aldebaran NAO
Open Unit Robot (OUR) Care-O-Bot 4 Crab (Hexapod robot) Aldebaran Pepper
Kuka youbot iRobot B21r Aldebaran Romeo
Q.bo Pal Robotics REEM Pal Robotics REEM-C

Koncept ROS súborového systému

  • Balíček (package): Balíčky sú najnižšou úrovňou ROS softvér organizácie. Môžu obsahovať čokoľvek: knižnice, nástroje, spustiteľné súbory atď. Balíček je adresár so súborom manifest.xml
  • Manifest balíčku: Manifest je popis balíčka. Jeho najdôležitejšou úlohou je definovať závislosti (dependencies) medzi balíčkami
  • Stack (Stoh): Kolekcie balíčkov, ktoré tvoria knižnicu vyššej úrovne. Stack je adresár so súborom stack.xml
  • Manifest stacku: Jedná sa o bežný manifest súbor, ale pre stack. Taktiež definuje závislosti
  • Správa (Message): Popisuje dátovú štruktúru pre odosielanie dát cez ROS. Definície správy sú uložené priečinku msg v súbore s príponou .msg
  • Služba (Service): Popisuje dátovú štruktúru požiadavky a odpovede na volanie služby. Sú uložené v priečinku s srv v súbore s príponou .srv

ROS komponenty

  • Uzol (Node): Je to spustiteľný súbor (C++/Python) v balíčku. ROS uzly používajú knižnice ROS klienta (roscpp/rospy), aby mohli komunikovať s ostatnými uzlami. Uzly môžu publikovať (publisher node) alebo zbierať(subscribers node) dáta z témy(topic). Uzly môžu tiež poskytovať alebo využívať služby
  • ROS master: Master je hlavným uzlom, cez ktorý sa vymieňajú správy medzi ostatnými uzlami. Bez spustenia ROS master nie je možné preposielať správy
  • Server parametrov: Umožňuje nastavovať a čítať parametre, ktoré sú uložené na jednom centrálnom mieste
  • Téma (Topic): Uzly si vymieňajú dáta v podobe správ cez výmenný ROS systém pod určitým názvom. Názov témy sa používa na identifikáciu obsahu správy. Všeobecne platí, že publisher a subscriber si nie sú vedomý existencie toho druhého. Hlavným cieľom tejto myšlienky je oddeliť tvorbu informácie od jej spracovania
  • Záznamy (Bags): Jedná sa o komponenty pre ukladanie a prehrávanie ROS správy. Je možné použiť ich napr. pre ukladanie dát z rôznych snímačov, ktoré ktoré sa budú spracúvať neskôr

Ukážky programovania vo frameworku ROS

Tvorba balíčkov (packages)

Príkaz roscreate-pkg slúži na vytvorenie kostry nového ROS balíčku podľa vopred definovanej súborovej štruktúry. Názov balíčka musí byť jedinečný, aby bolo možné jednoznačne pristupovať k jeho uzlom. Všetky ROS balíčky sa skladajú z niekoľkých podobných súborov: manifest.xml, CMakeLists.txt, mainpage.dox a makefiles. Tento nástroj eliminuje bežné chyby spôsobené ručným písaním konfiguračných súborov a manifestov.

Pre vytvorenie nového balíčka v aktuálnom adresári použijeme nasledujúci zápis:

$ roscreate-pkg [package_name]

Taktiež môžeme už pri vytváraní balíčka definovať ďalšie závislosti, ako sú knižnice klienta (roscpp/rospy), iné balíčky potrebné pre správne fungovanie(std_msgs) a ďalšie prídavné knižnice (napr. open-cv):

$ roscreate-pkg [package_name] [depend1] [depend2] [depend3]

V dalších ukážkach budeme používať balíček simple_ros_demo, ktorý vytvoríme nasledovné:

$ roscreate-pkg simple_ros_demo rospy roscpp std_msgs

Nasledujúcim zápisom si vieme zobraziť závislosti daného balíčka:

$ rospack depends [package_name]

Tvorba uzlov (nodes)

V tejto ukážke si vytvoríme dva jednoduché uzly talker.py a listener.py, ktoré si budú vymieňať informácie cez tému /chatter. Ako prvý si vytvoríme adresár scripts, kde budú uložené naše python skripty.

$ mkdir scripts

V tomto adresári vytvoríme súbory talker.py a listener.py s obsahom podľa prílohy v adresári ROS/simple_ros_demo/scripts. Následne zmeníme atribúty týchto súborom, tak, aby boli spustiteľné.

$ chmod +x talker.py
$ chmod +x listener.py

Na to, aby sme mohli spustiť uzly, potrebujeme mať spustený ROS master príkazom roscore. Ak už je spustený predošlý ROS master, tak nový sa spúšťať nebude.

Posledným krokom je spustenie uzlov v dvoch samostatných oknách pomocou príkazu rosrun podľa nasledovného zápisu. Vidíme ako talker.py publikuje správy a listener.py ich prijíma.

$ rosrun [package_name] [node_name]

Využitie správ (messages)

V predchádzajúcej ukážke sme si ukázali ako sa dajú vymieňať informácie cez tému /chatter. Ďalej môžeme vidieť, že s témami sa dá manipulovať aj priamo cez príkaz rostopic.

Spustíme uzol talker.py a následne zadáme tento príkaz:

$ rostopic echo /chatter

Vidíme, ako dostávame informácie , ktoré zverejňuje talker.py. Podobným spôsobom vieme do témy zapisovať. Spustíme uzol listener.py a následne zadáme tento príkaz:

$ rostopic pub -r 10 /chatter std_msgs/String 'test'

Vidíme ako v listener.py zbierame informácie s -r 10 (rate 10 Hz). Tieto spôsoby výmeny informácií sú mimoriadne užitočné pri jednoduchom testovaní.

Využitie služieb (services)

ROS služby definované v srv súboroch sa používajú podobne ako ROS správy na komunikáciu medzi uzlami. Odlišnosť je v tom, že správa obsahuje definíciu žiadosti a definíciu odpovede. Knižnica rospy prevedie tieto srv súbory na python kód a vytvorí tri triedy podľa nasledovného štandardu:

  • my_package / srv / Foo.srv → my_package.srv.Foo
  • my_package / srv / Foo.srv → my_package.srv.FooRequest
  • my_package / srv / Foo.srv → my_package.srv.FooResponse

Pre použitie v rospy je možné definovať uzol pre server a pre klienta. V prípade servera je potrebné importovať srv súbor a zavolať inicializačnú funkciu:

import my_package.srv
s = rospy.Service('service_name', my_package.srv.Foo)

Na strane klienta sa taktiež importuje srv súbor a zavolá inicializačná funkcia:

import my_package.srv
s = rospy.ServiceProxy('service_name', my_package.srv.Foo)

Rqt_graph

Rqt_graph je GUI nástroj, ktorý sa používa na monitorovanie ROS komponentov. Na nasledujúcom obrázku vidíme ako talker.py zverejňuje informácie do témy /chatter a následne ich odtiaľ číta listener.py. Taktiež sa často používa pri testovaní a debuggovaní.

Rqt_plot

Rqt_plot1 je GUI nástroj, ktorý sa používa pre vizualizáciu číselných hodnôt v 2D sústave s použitím rôznych vykresľovacích techník.

Ukážky práce s platformou Q.bo a prídavnými knižnicami

Jednoduchý pohyb robota Q.bo

Pre pohyb robota je potrebné zapísať objekt Twist z geometry_msgs do témy /cmd_vel. Je možné použiť príkaz rostopic s atribútom pub podľa nasledovného príkladu:

$ rostopic pub -1 /cmd_vel geometry_msgs/Twist [2,0,0] [0,0,0.5]

Taktiež sa dá použiť knižnica rospy:

import rospy
from geometry_msgs.msg import Twist
def move_base(publisher,linear,angular):
	rospy.loginfo("Moving base at [%f , %f]", linear, angular)
	speed_command=Twist()
	speed_command.linear.x=linear
	speed_command.linear.y=0
	speed_command.linear.z=0
	speed_command.angular.x=0
	speed_command.angular.y=0
	speed_command.angular.z=angular
	publisher.publish(speed_command)
if __name__ == "__main__":
	move_base_pub=rospy.Publisher('/cmd_vel', Twist)
	move_base_pub.queue_size=10
	move_base(move_base_pub,2, 0.5)

Nakláňanie a otáčania hlavy a viečok Q.ba

Pre pohyb servo motorov na hlave robota je potrebné zapísať objekt JointStatesensor_msgs do témy /cmd_joints. Je možné použiť príkaz rostopic s atribútom pub podľa nasledovného príkladu:

$ rostopic pub /cmd_joints sensor_msgs/JointState [0,0,'test'] ['head_pan_joint','head_tilt_joint'] [0.5,-0.3] [] []

Taktiež sa dá použiť knižnica rospy:

import rospy
from sensor_msgs.msg import JointState
def move_head(publisher,pan_joint,tilt_joint):
	rospy.loginfo("Moving head at [%f , %f]", pan_joint, tilt_joint)
	position_command=JointState()
	position_command.header.seq=1
	position_command.header.stamp = rospy.get_rostime()
	position_command.header.frame_id='test'
	position_command.name=['head_pan_joint','head_tilt_joint']
	position_command.position=[pan_joint, tilt_joint]
	position_command.velocity=[]
	position_command.effort=[]
	rate = rospy.Rate(10) # 10hz
	publisher.publish(position_command)
	rate.sleep()
def move_eyes(publisher,left_eye,right_eye):
	rospy.loginfo("Moving eyes at [%f , %f]", left_eye,right_eye)
	position_command=JointState()
	position_command.header.seq=1
	position_command.header.stamp = rospy.get_rostime()
	position_command.header.frame_id='test'
	position_command.name=['left_eyelid_joint', 'right_eyelid_joint']
	position_command.position=[left_eye,right_eye]
	position_command.velocity=[]
	position_command.effort=[]
	rate = rospy.Rate(10) # 10hz
	publisher.publish(position_command)
	rate.sleep()
if __name__ == "__main__":
	move_joints_pub=rospy.Publisher('/cmd_joints', JointState)
	move_joints_pub.queue_size=10
	move_head(move_joints_pub, 0,5,-0.3)
	move_eyes(move_joints_pub,-0.5,-0.5)

Čítanie z ultrazvukových senzorov Q.ba

import rospy
from sensor_msgs.msg import PointCloud
def initSensors():
	rospy.Subscriber('/distance_sensors_state/front_left_srf10', PointCloud, leftSensorCallback)
	rospy.Subscriber('/distance_sensors_state/front_right_srf10', PointCloud, rightSensorCallback)
	rospy.Subscriber('/distance_sensors_state/floor_sensor', PointCloud, floorSensorCallback)
def leftSensorCallback(data):
	print data.points[0].x
def rightSensorCallback(data):
	print data.points[0].x
def floorSensorCallback(data):
	print data.points[0].x
if __name__ == "__main__":
	initSensors()

Využitie knižnice OpenCV

OpenCV1 (Open Source Computer Vision Library) je knižnica, ktorá obsahuje niekoľko stoviek algoritmov počítačového videnia. Knižnica je voľne dostupná pod licenciou BSD. OpenCV vytvoril Gary Bradsky v spoločnosti Intel v roku 1999 a prvé vydanie vyšlo už v roku 2000. Neskôr jeho aktívny vývoj pokračoval za podpory Willow Garage, pričom Gary Bradsky a Vadim Pisarevsky boli vedúci projektu. V súčasnej dobe je v podpore celý rad algoritmov týkajúcich sa počítačového videnia a strojového učenia, ktorý sa každým dňom rozširuje.

V nasledujúcom príklade môžeme vidieť jednoduchý príklad zachytávania obrazu a jeho vykresľovania. V prvom rade sa importuje OpenCV verzie 2 a knižnica pre prácu s maticami. Následne sa vyberie kamera pre zachytávanie obrazu a v cykle sa vyberajú jednotlivé obrázky zo streamu.

import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(True):
    # Capture frame-by-frame
    frame = cap.read()
    # Display the resulting frame
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

S takto pripraveným objektom frame je možné robiť rôzne úpravy, kedže už pracujeme s bitovou mapou v podobe matice. Napríklad odfarbenie alebo vyhľadávanie hrán objektov pomocou gradientných filtrov, ktoré využívajú funkcie laplacian a sobel.

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
laplacian = cv2.Laplacian(frame,cv2.CV_64F)
sobelx = cv2.Sobel(frame,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(frame,cv2.CV_64F,0,1,ksize=5)

Výsledkom je bitová mapa, ktorá má jasne určené hrany objektu ako je vidno na obrázku:

Syntetizácia hlasu pomocou nástrojov Festival a Espeak

Festival je slobodný softvér pod licenciou, ktorá umožňuje neobmedzené komerčné i nekomerčné použitie. Systém je napísaný v jazyku C ++ a používa Edinburgh Speech Tools knižnicu. Umožňuje syntetizovanie ľudskej reči v angličtine (britskej aj americkej) a španielčine. Je to štandardný nástroj pre syntetizáciu hlasu na platforme Q.bo.

Ďalšou možnosťou je použiť nástroj espeak, ktorý podporuje vyšší počet jazykov a medzi nimi aj slovenčinu. Syntetizácia reči je postačujúca a môže byť použitá aj pri vysokých rýchlostiach, ale nie je tak prirodzená alebo hladká ako pri väčších syntetizátoroch, ktoré sú založené na nahrávkach ľudskej reči.

V prílohách môžete nájsť ROS balíček espeak, ktorý zbiera String data z témy /espeak a zabezpečuje syntetizácia hlasu.

Rozpoznávanie hlasu pomocou Julius, Pocketsphinx a Google Cloud speech API

V oblasti rozpoznávania hlasu máme na výber z mnohých druhov softvéru. Ako prvý spomenieme Julius.

Julius je vysoko výkonný nástroj malého rozmeru s veľkým slovníkom pre rozpoznávanie súvislej reči (LVCSR) pre účely výskumníkov a vývojárov. Vďaka svojej technike rozpoznania v reálnom čase je vhodný pre rôzne počítače a tiež je možné použiť zariadenia v podobe mikropočítačov v klientskom móde a cloud v móde serverovom. Najnovšia verzia podporuje Hlbokú Neurónovú Sieť (DNN) pre dekódovania v reálnom čase.

PocketSphinx je jeden z open source nástrojov s veľkým slovníkom na rozpoznávanie súvislej reči vyvíjanej na Carnegie Mellon University. PocketSphinx sa najčastejšie používa v kombinácii s modulom GStreamer pre streamovanie médií. To znamená, že PocketSphinx možno považovať za koncový element pre dekodér zvuku do textu a GStreamer ako spracovateľské médium.

Google Cloud Speech API umožňuje vývojárom previesť audio na text za použitia výkonných modelov neurónových sietí v ľahko použiteľnej API. API podporuje viac ako 80 jazykov a variantov, medzi nimi aj slovenčinu. Je možné použiť priamo vstup z mikrofónu danej aplikácie alebo dekódovať vopred pripravenú zvukovú vzorku. Rozpoznanie zvuku začína hneď po nahratí žiadosti na úložisko v Google Cloud Storage. Rovnakú technológiu je možné použiť v kombinácii s ďalšími Google Cloud platformami a napájať ich na vlastné produkty.

Zoznam použitej literatúry

[1] ROS dokumentácia .: http://wiki.ros.org/

[2] Open Q.bo dokumentácia .: http://openqbo.org/wiki/doku.php

[3] Oficiálne stránky platformy Q.bo .: http://thecorpora.com/

[4] Learning Robotics Using Python .: Lentin Joseph : PACKT publishing

[5] ROS answers .: http://answers.ros.org/

[6] OpenCV .: http://opencv.org/

[7] Festival .: http://www.cstr.ed.ac.uk/projects/festival/

[8] Espeak .: http://espeak.sourceforge.net/

[9] PyJulius .: https://pypi.python.org/pypi/pyjulius

[10] PocketSphinx .: https://pypi.python.org/pypi/pocketsphinx

[11] Google speech API .: https://cloud.google.com/speech/