A RobotinoView programozása Írta: Bolla Dániel (BME-VIK) Lektorálta: Raj Levente (BME-MOGI) Átdolgozta: Slang Tamás (PTE-PMMIK) 2012
Mi az a Robotino? Oktatási és kutatási célokra fejlesztett autonóm robot Számos szenzorral és akár webkamerával is felszerelhető A szenzorok jeleit egy beágyazott PC-n futó valós idejű (real-time) Ubuntu Linux operációs rendszer dolgozza fel
Mit tud a Robotino? 2D mozgás bármely irányba Függőleges tengely menti forgás Web-kamera (képfeldolgozás) Vezeték nélküli programozás Távolság mérő szenzorok I/O portok (analóg/digitális) Opcionális kiegészítők: NorthStar Gyroscope Lézer-scanner Gripper (megfogó)
Mi az a RobotinoView? A Robotino programozásához fejlesztett vizuális programozási nyelv. A programokat programkód gépelése nélkül hozhatjuk létre A programozás módszertana gyorsan elsajátítható Vizuális programnyelv révén könnyen átláthatóak a programok Egyszerű hibakeresés
RobotinoView 2.6.3 - Függvényblokkok A programok legkisebb építőegysége a függvényblokk
Függvényblokkok A programok legkisebb építőegysége a függvényblokk A függvényblokkok közötti kapcsolatokat vezetékezéssel, a függvényblokkok ki- és bemeneteinek összekötésével alakíthatjuk ki Az így kialakított „hálózatok” az alprogramok Az alprogramok feldolgozása ciklikus végrehajtási módon történik Ez azt jelenti, hogy az alprogram kiértékelése az alprogram kilépési feltételének teljesüléséig újra és újra megtörténik
Alprogramok készítése: RobotinoView 2.6.3 Alprogramok készítése: Menüsor Eszközsor Alprogram fülek Munkaterület Függvény- Blokkok
Főprogram - Szekvenciális programvégrehajtás Az alprogramokból (a PLC programozásban használt) IEC 1131 szabványnak megfelelően, úgynevezett sorrendi folyamatábra – más nevén: állapotgráf – segítségével építhetjük fel a főprogramot.
Szekvenciális eszközök RobotinoView 2.6.3 Főprogram készítése: Menüsor Eszközsor Alprogram fülek Szekvenciális eszközök Munkaterület Globális változók
Globális változók használata: adatok átvitele programmodulok között alprogramok kilépési feltételei Globális változók Globális változó olvasása Globális változó írása
Főprogram - Szekvenciális programvégrehajtás Szekvenciális építőmodulok: Inicializáló rész, Ez indul el bekapcsoláskor. Alternatív ágak: Kilépési feltétel (lásd később) Alprogram blokkja. Kilépési feltétel (lásd később) Ugró utasítás (goto, jump) Szekvenciális eszközök: Párhuzamos ágak: Lépés beszúrása az aktuális fölé Lépés beszúrása az aktuális alá Alternatív ág beszúrása az aktuálistól balra Alternatív ág beszúrása az aktuálistól jobbra Párhuzamos ág beszúrása az aktuálistól balra Párhuzamos ág beszúrása az aktuálistól jobbra Ugrás a megadott lépésre
Főprogram - Szekvenciális programvégrehajtás Alternatív ágak tulajdonságai: Mindig csak az egyik ágban van programfutás Az ágak prioritás jobbra csökken (ha egyszerre két ágnál teljesül a kilépési feltétel, akkor a legbaloldalibb ágban lévő alprogram fut le) Ág beszúrása bonyolultabb szerkezetekben: Érdemes két kilépési feltétel vízszintes jelölő vonalát kijelölni (egyszerre több dolog kijelölése a shift gomb nyomva tartása mellett lehetséges), amikhez az alternatív ágat akarjuk kapcsolni, és ezután az új ág beszúrására kattintani. Egyes esetekben segéd lépéseket kell beiktatni, amit ezután ki lehet törölni. ?
Főprogram - Szekvenciális programvégrehajtás Párhuzamos ágak tulajdonságai: Mindegyik ágban lévő program fut Ág beszúrása bonyolultabb szerkezetekben: Párhuzamos ágak esetén lépéseket kell kijelölni. Több lépés kijelölése itt is a shift gombbal lehetséges. Az alábbi példánál a 9-es és 6-os lépést jelöltük ki, majd utána szúrtunk be balra egy új párhuzamos ágat, ami az összes többi alprogrammal párhuzamosan fog futni.
Főprogram - Szekvenciális programvégrehajtás Kilépési feltételek operátorai: Konstans feltételek: true (egyszer lefut, és kilép az alprogramból) false (sosem lép ki az alprogramból) Logikai feltételek (mint c-ben): És kapcsolat: && Vagy kapcsolat: II Negálás: ! Matematikai: Összeadás, kivonás, szorzás, osztás: +, -, *, / Kisebb, nagyobb, egyenlő, nem egyenlő: <, >, ==, != Összetettebb kifejezések is lehetségesek: Pl.: ( (a==1) && (b<=3) ) || c
Kapcsolódás a Robotino-hoz Robotino adatainak leolvasása: IP-cím: 172.26.1.1 Kapcsolódás: WLAN bekapcsolása Csatlakozás az AP-hoz Hálózati kártya IP címének beállítása (ha szükséges)
Program futtatása a PC-n 1. Kapcsolódás a Robotino Accespoint-jához 2. IP-cím beírása 3. Kapcsolódás 4.Szekvenciális program futtatása (4.) Aktuális alprogram futtatása (Kézi leállítás szükséges!)
A SIM-ben és a View-ban is át kell állítani! RobotinoSim használata Kijelölő eszköz Port Robotino (kijelölve) Ha lassú a kommuni- káció, próbáljunk meg portot váltani. Pl.: 8081-re A SIM-ben és a View-ban is át kell állítani! IP – cím (mindig ez kell) Port (ugyanaz, mint a SIM-ben) IP_cím:Port
Objektumok áttekintése Motor objektumok: Speed set-point beállítani kívánt forgási sebesség Reset position motor pozíció nullázása Brake fékezés Accelera-tion gyorsulás mértéke Actual velocity aktuális forgási sebesség Actual position motor aktuális pozíciója Current [A] motor aktuális áramfelvétele
Motorok közvetlen vezérlése Mozgás előre: Forgás jobbra:
Objektumok áttekintése OmniDrive objektum: Leegyszerűsíti a motorok vezérlését. Komplex mozgások is könnyen megvalósíthatóak vele. vx x-irányú sebesség vy y-irányú sebesség omega forgási sebesség m1 1-es motor fordulatszáma m2 2-es motor fordulatszáma m3 3-as motor fordulatszáma
OmniDrive objektum Mozgás előre: Mozgás átlósan: Forgás jobbra: Mozgás köríven:
Irányítás a Control Panel objektummal vx x-irányú sebesség vy y-irányú sebesség omega forgási sebesség Slider: value csúszka állapota
Irányítás a Joystick objektummal Joystick / Gamepad hozzáadása:
Irányítás a Joystick objektummal Joystick tengelyei: value tengely állapota Joystick gombjai: Minden tengelyhez és minden gombhoz külön objektum tartozik. value gomb értéke
Az alprogram futása előtt mindig célszerű inicializálni! Navigáció - Odometria Odometry: A megtett út mérése x A kezdő pozíció x koordinátája y A kezdő pozíció y koordinátája phi A kezdő pozíció phi koordinátája Set Ha true-t kötünk erre a bemenetre, a felveszi az x, y, phi bemeneteken megadott értékeket. (Inicializálás) x Az aktuális pozíció x koordinátája y Az aktuális pozíció y koordinátája phi Az aktuális pozíció phi koordinátája Az alprogram futása előtt mindig célszerű inicializálni!
Navigáció – Position driver Position driver: Adott pozícióba navigálás X set A cél pozíció x koordinátája Y set A cél pozíció y koordinátája Phi set A cél pozíció phi koordinátája X actual Az aktuális pozíció x koordinátája y actual Az aktuális pozíció y koordinátája phi actual Az aktuális pozíció phi koordinátája restart Ha true-t kötünk erre a bemenetre újra beolvassa a cél pozíció koordinátáit. vx A cél pozíció eléréséhez szükséges x irányú sebesség vy A cél pozíció eléréséhez szükséges y irányú sebesség omega A cél pozíció eléréséhez szükséges forgási sebesség Position reached True, ha a vx=vy=0 Orientation reached True, ha omega=0 Pose reached True, ha Postion reached és Orientation reached true Szinte mindig az Omnidrive blokk bemenete Szinte mindig az Odometry blokk kimenete
Navigáció – Position driver 1: Drive | Turn Holonomic 2: Drive & Turn Holonomic 3: Turn | Drive | Turn Nonholonomic 4: Drive & Turn | Turn Nonholonomic
Távolságmérő (infra) szenzorok Distance modul: Value Távolság arányos jel (minél közelebb van valami a szenzorhoz, annál nagyobb jelet ad ki) Heading szög, amely irányba a szenzor néz Bumper: value Bumper állapota
Távolságmérő (infra) szenzorok karakterisztikája
Távolságmérő (lézeres) szenzorok karakterisztikája
Objektumok áttekintése Scale: átskálázás be bemenet ki kimenet Transfer function x bemenet y kimenet
Objektumok áttekintése Oscilloscope: Channel # bemenet Mean filter Input bemenet Output kimenet
Objektumok áttekintése Lua script: Komplex számításokat valósíthatunk meg (http://www.lua.org/manual/5.1/ ) Bemenetek száma Kimenetek száma Globális változók (ha vannak) A megvalósítandó Funkció kódja
Vektor létrehozása x és y koordinátákkal Vektorműveletek Vektor létrehozása x és y koordinátákkal Vektor létrehozása polár koordinátákkal (hossz, szög) y Az x tengely hátulról előre, míg az y tengely jobbról balra irányuló tengelyek. x x-koordináta y y-koordináta Vector vektor x r +φ 0° az előrefelé irányt jelenti. A pozitív forgásirány az óramutató járásával ellentétes irányú. Length vektor hossza Phi vektor szöge Vector vektor
Vektorműveletek Vektor felbontása x és y, illetve polár koordinátákra Vektorkorok összegzése, kivonása Vektoriális szorzat, vektorhossz lekérdezése Vektor forgatása Vektorok és skalárok közötti műveletek
Vektorműveletek használata: x y Vektor 1 Vektor 2 Vektor 1+2 Eleforgatott vektor
PassiveAviod Feladat: Menekülés az esetleges ütközések elől. Az ellenkező irányba kell elmozdulni, mint amerre valami akadály van.
PassiveAviod értelmezése Minden infra szenzorra szükség van. Infra szenzorok
PassiveAviod értelmezése Vektorok létrehozása A továbbiakban vektorokkal szeretnénk dolgozni, így az infra-szenzorok jeleiből vektorokat hozunk létre. Infra szenzorok
PassiveAviod értelmezése Vektorok létrehozása Vektorok összegzése Infra szenzorok Minél hosszabb a vektor, annál közelebb van a fal.
PassiveAviod értelmezése Vektorok létrehozása Vektorok összegzése Egységvektor létrehozása Egyenlőre csak az akadály irányára van szükségünk. Infra szenzorok
PassiveAviod értelmezése Vektorok létrehozása Vektorok összegzése Egységvektor létrehozása Minél közelebb vannak az akadályok, annál hosszabb vektort hozunk létre. Vektorhossz meghatározása Infra szenzorok
PassiveAviod értelmezése Vektorok létrehozása Vektor elforgatása Vektorok összegzése Egységvektor létrehozása A vektor most az akadály irányába mutat. Nekünk ezzel a vektorral pont ellentétes irányba kell elmozdulnunk. Vektorhossz meghatározása Infra szenzorok
PassiveAviod értelmezése Vektorok létrehozása Vektor felbontása Vektor elforgatása Hirtelen mozdulatok kiszűrése Vektorok összegzése Egységvektor létrehozása Robotino vezérlése Ha a vektrot felbontjuk x és y összetevőre, akkor ezekkel az értékekkel közvetlenül vezérelhetjük az omnidrive-ot. Vektorhossz meghatározása Infra szenzorok
A webkamera képének megtekintése: Image Kép kimenet
Párhuzamosra álló blokk
Referencia felvétel
Képfeldolgozás Segmenter Modul: Az általunk kijelölt színekre (szegmensekre) bontja a kamera képét. Input bemeneti kép Output szegmentált kép Kép lefagyasztása Szín kijelölése Szín lementése
Képfeldolgozás Fagyasztás megszűntetése A kimeneten megjelenő kép
Segment extractor: Az adott színszegmens pozícióját adja meg. Képfeldolgozás Segment extractor: Az adott színszegmens pozícióját adja meg. Input kép bemenet Selected segment kereset szegmens száma Minimum area minimális terület, ami esetén észreveszi a szegmenst x szegmens súlypontjának x koordinátája y szegmens súlypontjának y koordinátája Area szegmens területe Segment found találtunk szegmenst? A (0;0) koordináta a kép bal-felső sarkában található.
Vonalkövetés szenzorokkal: Digitális bemenet (értéke: true vagy false) Analóg bemenet (értéke: 0..10) Digitális kimenet (értéke: true vagy false) Relés kimenet (értéke: true vagy false) RobotinoView help: 135. oldal Induktív Szenzor Analog input Optikai Szenzor Digital input
Vonalkövetés Vonalkövetés optikai szenzorokkal:
Szabályozó (Programunk) Egyszerű szabályozás Tartsuk a Robotino-t az előtte lévő faltól 5 cm-re! Szabályozó (Programunk) Robotino Ellenőrző jel Érzékelő + - Rendelkező jel Alapjel Alapjel Szabályozó (Programunk) Robotino Érzékelő
Menjen a Robotino 1 méterrel előre! Egyszerű szabályozás Menjen a Robotino 1 méterrel előre! (ne felejtsük el inicializálni az odometriát!) Szabályozó (Programunk) Robotino Ellenőrző jel Érzékelő + - Rendelkező jel Alapjel Alapjel Szabályozó (Programunk) Robotino Érzékelő
Köszönjük a figyelmet! Kérdések?