2014.05.15.
Operációs rendszer szintek • Kernel
Robot Operációs Rendszer Usman Qayyum usman.qayyum @ anu.edu.au Előadásának fordítása 2013.04 DE-Villamosmérnöki és Mechatronikai Tanszék
Operációs rendszer szintek • Grafikus kezelői felület, GUI – Ablakkezelő felület (alap GUI) – Grafikus elemeket megjelentő rendszer (pl. Ikonok megjelenése, betűtípusok, színkombinációk) – 3D és más vizuális gyorsító könyvtárak
• Alkalmazások – Beépített vagy alapvető alkalmazások: filekezelés, email, naptár, internet böngésző, stb... – Általános alkalmazások: szövegszerkesztés, táblázatkezelés. Bevett gyakorlatok elektronikus megfelelője. – Speciális alkalamzások: CAD, 3D CAD, matematikai szoftverek, adatbázis kezelés, stb...
Robotok a Múltban
– Monolitikus (pl. Win NT, Win XP , W7, Linux): a kernel összes funkciója egy alkalmazásban érhető el. – Mikro (OS X, real-time oprendszer), a kernel funkciói dinamikusan betölthető modulokból áll.
• Programkönyvtárak – Run time library – Grafikus elemek könyvtára – Matematikai műveleteket megvalósító könyvtár
Tartalom • ROS Alap struktúrák, Parancsok stb. • Szimulátor • Kinect (mozgás érzékelő beviteli eszköz) • TurtleBot (egy alacsony költségű, nyílt forráskódú, személyes robot) • Programozási fogalmak • OpenCV és PCL • Összegzés
Robotok Napjainkban
1
2014.05.15.
ROS: Robot Operating System ROS: egy nyílt forráskódú programkeret, amelyet robot szoftverek fejlesztőkörnyezeteként alkalmaznak. Gyakorlatilag operációs rendszerként funkcionál egy heterogén (különböző részekből álló) számítógép csoportban. OS-ként működve: hardver absztrakció(elkülönítés), alacsony szintű eszköz ellenőrzés, gyakran használt funkciók végrehajtása, üzenet küldés munkafolyamatok között, fejlett csomagkezelés. Grafikus architektúra alapú rendszer, ahol a munkafolyamatok csomópontokban helyezkednek el A ROS két felhasználói oldallal rendelkezik: - Operációs Rendszer oldal - Felhasználó által készített csomagok
Támogatott Operációs Rendszerek • Támogatott: • Részlegesen támogatott: • Nem támogatott:
Robot Alkalmazások ROS Hardware
ROS Disztribúciók A ROS fejlesztése 2007-ben indult (eredetileg Switchyard elnevezéssel) és a Standford Egyetem Mesterséges Intelligencia központjában alkották meg. 2008-tól a fejlesztések tovább folytak és ennek eredményeként több disztribúció jelent meg.
Miért épp a ROS? • Alkalmas a kódok újrafelhasználására • Kész, használható fejlesztői környezet, sokrétű eszközök és kliens API könyvtárak (C + +, Python, Lisp, Java, ...) • Független a nyelvtől • Skálázható (folyamatok elosztott hálózata lazán csatolva) • Nagy közösség és folyamatos támogatás
Ajánlott Disztribúció: ROS Electric Ajánlott OS: Ubuntu 10.04-től
Alapelv: Ne találjuk fel újra a kereket! • • • • • •
OpenCV - Computer Vision Eigen - Mátrix Algebra Gazebo - Robot Simulator KDL - Kinematika és Dinamika TREX - Magas Szintű Tervezés PCL - Point Cloud Library
Célkitűzések • A ROS a folyamatok elosztott keretrendszere (más néven csomópontok) • Lehetővé tesz több munkafolyamatot egy időben • A folyamatok Csomagokba és Vermekbe csoportosíthatók • Skálázhatóság: ROS lehetőséget biztosít hosszú futásidejű és nagy fejlesztőrendszerek futtatására • Alkalmas magas szintű fejlesztésekre • Minden ROS alapkód („mag kód”) engedélyezett BSD, így könnyen integrálható más projektekbe • Több perifériameghajtó és algoritmus is rendelkezésre áll
2
2014.05.15.
Fogalmak: Fájlrendszer Szint ROS forráskódok, melyek megtalálhatók egy lemezen: • Csomagok: a szervezés fő egységei - szoftver a ROS-ban, pl. ROS futásidő folyamatok (csomópontok), ROS-függő könyvtár, adatkészletek, konfigurációs fájlok • Manifeszts: (manifest.xml) metaadatot (adat az adatról) szolgáltat egy csomagról (pl. függőségek, fordító zászlók(complier flag) stb.) – a metaadattal összekötött tartalmat tartalomcsomagnak nevezzük. • Vermek (Stacks): csomagok egysége, melyek lehetővé tesznek összetett alkalmazásokat, pl. navigációs verem • Verem Manifesztek: (stack.xml) adatot szolgáltat a veremről (pl. más vermektől való függőség)
Csomagok és Vermek • A csomag (package) egy könyvtár egy manifest.xml fájllal • A verem (stack) egy könyvtár egy stack.xml fájllal • Egy verem könyvtárában lévő csomag a verem része
Mi a Verem(Stack)? • Verem: LIFO adatszerkezet, amelyben általában véges számú azonos típusú (méretű) adatot lehet tárolni Hagyományosan két alapműveletet értelmezünk rá: • push (rárak): A verem tetejére helyez egy új adatot. Ha a verem betelt, akkor túlcsordulásos állapotba kerül. • pop (levesz): A verem legfelső elemét leveszi és visszaadja. Ha a verem már üres, akkor alulcsordulásos állapotba kerül.
Fogalmak: Számítási Gráf szint Számítási Gráf(Computation Graph): ROS folyamatok pontpont hálózata - az adatokat egyszerre dolgozza fel. A ROS Számítási Grafikon alapelvei a következők: • • • • •
csomópontok master paraméter szerver szolgáltatások üzenetek és témák
Kulcsfogalmak
Csomópontok(Nodes)
• roscore: név és paraméter szerver – önálló egység
• Olyan folyamatok, amelyek végrehajtják a számításokat. • A ROS-t arra tervezték, hogy elemekre bontható legyen egy jól elosztott rendszerben, hiszen a legtöbb robot vezérlése rengeteg csomópontot tartalmaz. • Pl. egy csomópont felel a képfeldolgozásért és egy másik csomópont végzi az objektum felismerését. • A ROS csomópontjait egy ROS Kliens Könyvtár (Client Library) segítségével írják meg pl. roscpp vagy rospy.
• Csomópont: egy ROS-sal kommunikáló ügynök • Csomópontokon keresztül való kommunikáció • Témák (közzététel/ jegyzés) gépelt üzeneteket felhasználva • Szolgáltatások: Kérés/Válaszolás minta (módszer/művelet) gépelt üzeneten keresztül
3
2014.05.15.
Mester
Üzenetek
• Nevet regisztrál és a kikeres a Számítási Gráfban. • A Mester nélkül a csomópontok nem tudnák megtalálni egymást, üzenet váltani vagy szolgáltatásokat lehívni. • A Mester tárolja a témákat és szolgáltatásokat, illetve a regisztrációs információkat a ROS csomópontok számára
• Üzenetek: Csomópontok kommunikációja egymással áthaladó üzenetek révén. • Az üzenet egyszerűen gépelt mezők adatstruktúrája • Standard primitív típusok (egész szám, lebegőpontos, logikai, stb.) is támogatottak, mint a primitív típusok tömbjei. • Az üzenetek tartalmazhatnak tetszőlegesen beágyazott struktúrákat és tömböket is (hasonlóan a C struktúrához).
Témák
Szolgáltatások
• Egy csomópont üzenetet küld, közzé téve azt egy adott témában. • Téma: egy név, amely az üzenet azonosítására szolgál. • A csomópont, ami érdekelt egy témában, több, az adott témába tartozóra feliratkozhat. • A témákat tekinthetjük gépelt üzenet buszoknak. Minden busznak van neve, bárki tud a buszhoz csatlakozni, hogy üzeneteket küldjön/fogadjon mindaddig, amíg azok a megfelelő típusúak.
• Közzététel/feliratkozás modell: sok-a-soknak (üzenetek) • Kérés/válasz: szolgáltatások • Az üzenet struktúrákat párokban használja: egyet kérésre, és egyet válaszra. • A biztosító csomópont biztosít egy szolgáltatást, mely névvel rendelkezik és egy klienst, ami a szolgáltatást használja azáltal, hogy elküldi az üzenetet és vár a válaszra.
Üzenetek vs. Szolgáltatások
Telepítés és beállítás
Üzenet 1:n Kommunikáció Nem blokkol
Szolgáltatások 1:1 Kommunikáció Blokkol
• A telepítéssel kapcsolatos információk: www.ros.org/wiki/electric/lnstallation/Ubuntu • Környezeti beállítások (”/.bashrc hozzáadása): source /opt/ros/electric/setup.bash • Továbbá hozzá kell adni: export ROS_PACKAGE_PATH = $ ROS_PACKAGE_PATH:your-ROSpath • Ellenőrizd az útvonalat: echo $ ROS_PACKAGE_PATH • Az kimenet ez legyen: /opt /ros/electric/stacks: your-ROS-path
4
2014.05.15.
Navigálás a ROS Fájlrendszerben
ROS csomag létrehozása
Fájlrendszer eszközök: • rospack helyreállítja a ROS csomagok információit, melyek a fájlrendszerben elérhetőek.
• roscreate-pkg: létrehoz egy új ROS csomagot. • Egy csomag fáljai: manifesztek, CMakelists.txt, mainpage.dox és Makefájlok.
– Rospack megkeresi a roscpp
• roscd megengedi, hogy könyvtárat közvetlenül csomaggá vagy veremmé váltson – – – –
roscd roscpp roscd roscpp/include roscd log roscd
• ROS parancsokat ad Tab-kibővítéssel – roscd tur TAB key
• rosls: közvetlenül listáz csomagba, verembe vagy közös helyre név alapján. – rosls roscpp_tutorials – rosls roscpp_tutorials/srv
– roscreate-pkg [csomag_neve]
• Függőség más csomagoktól: – roscreate-pkg [csomag_neve] [depend1] [depend2] [depend3]
• Csomag létrehozása: – roscreate-pkg beginner_tutorials std_msgs rospy roscpp
• Frissítse a ROS_PACKAGE_PATH környezeti változót: export ROS_PACKAGE_PATH = YOUR_PCK_PATH: $ ROS_PACKAGE_PATH
Az új ROS csomag ellenőrzése
ROS Csomag függőségek
Vessünk egy pillantást a csomagra: • Tartalom:
• Mi a teendő, ha a rendszer függőségek hiányoznak?
•
Tartalom (nincs még ott):
• Itt van egy rendszer függőség:
A TurtleBot működése során két számítógép is érintett. • Az első egy netbook, ami fizikailag csatlakozik a TurtleBot-hoz. • A második egy munkaállomás PC, ami távolról irányítja a TurtleBot-ot.
TurtleBot beállítása
A TurtleBot távoli elérése
TurtleBot beállítása:
• Csatlakozás az ssh-hoz hogy működjön a TurtleBot a munkaállomás computerről: • Meg kell határozni az IP_OF_TURTLEBOT -ot, ezt az ipconfig parancsal lehet lekérdezni • Használja az ssh –t a TurtleBot-hoz való csatlakozáshoz
Munkaállomás beállítása: • A ROS mester a TurtleBot laptopján fut, tehát a munkaállomáson állítsa be : ROS_MASTER_URI to point TurtleBot laptop
– – – –
ssh turtlebot @IP_OF_TURTLEBOT ssh
[email protected] Jelszó kérése: turtlebot Távolról való bejelentkezés a TurtleBotba (netbook)
8
2014.05.15.
TurtleBot Indítása
TurtleBot Helyváltoztatása
• A bekapcsolást követően: két mód van az elindításra: – 1. módszer: sudo service turtlebot start – 2. módszer: roslaunch turtlebot_bringup minimal.launch – Megjegyzés: Ha nem áll rendelkezésre fizikailag TurtleBot, akkkor a szimulátort is használhatjuk. • roslaunch turtlebot_gazebo turtlebot_empty_world.launch
Dashboard • Ahhoz hogy lássuk, hogy mi történik éppen a TurtleBottal, szükség lesz a dashboard parancsra.
A TurtleBot helyváltoztatása billentyűzet, joystick, vagy rviz segítségével: – roslaunch turtlebot_teleop keyboard_teleop. Lunch
• A terminálban lévő gombokkal irányítható a robot – Megjegyzés: Ha új parancsot nem kap elég hosszan, akkor a TurtleBot megáll.
Bemutató 1
Bemutató 2: (Camera View)
• http://www.voutube.com/mrusmanqavvum
Konkrét példa (Case Study)
Bemutató 3
Csomag létrehozása Forrás fájl szerkesztése Egy egyszerű megjelenítő írása Watch-dog-kód C + + programozás A program fordítása(compiling) ROS csomag útjának beállítása (a fejlesztői csomagnak fontos) • A csomópont kód futtatása (előtte roscore vagy szimulátor vagy netbook-turtlebot indítása)
• www.youtubexom/mrusmanqavvum
• • • • • • •
9
2014.05.15.
Képfeldolgozása a ROS-ban
• •
Feliratkozás kamera témákra
Fénykép témák közzététele
www.ros.org/wiki/cv_bridge www.ros.org/wiki/image_geometry
ROS kép -> OpenCV
3D-s feldolgozás • A világ nem csak 2D-ból áll • A 2D látás hibás eredményeket hozhat • A 3D feldolgozás megérkezett! • Kinect, 3D zsebkamerák • n-D érzékelés: • legkevesebb n = 3: x, yz. • + RGB = 4D • + normál információ = 7D • + görbületi felület = 8D • + ... = n-D
10
2014.05.15.
Point Cloud Library (PCL) •
• • • • •
Példa PCL Szegmentációra
Kisebb moduláris könyvtárak gyűjteménye: – libpcl_features: 3D funkciók (pl. normál és görbületi, határ pontok, (PFH), Fast PFH, Narf, RSD – Iibpcl_surface:felszíni rekonstrukció (pl. illeszkedő, konvex testek,mintavétel,kiugró értékekeeltávolítása,előrejelzések. – libpcl_registration: Összehangolási módszerek (optimalizálás,nem lináris) 3D funkciók Szegmentálás Felületi rekonstrukció Regisztráció Kulcspontok
Következtetés • Betekintést nyertünk a ROS alapjaiba, felépítésébe és a különböző csomagokba ☺ • Megismertük a TurtleBot felépítését és vezérlését, valamint a Kinectet • OpenCV és PCL
• Fordította: Erdei Timotei • Szerkesztés: Dr. Szemes Péter Tamás
11