Robotino programozása v2.3.2 II. Robotino Olimpia 2010 II. Mobil Robot Kupa 2010 Írta: Bolla Dániel (BME-VIK) Lektorálta: Raj Levente (BME-MOGI) 2010 - F
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 Infra szenzorok I/O portok (analóg/digitális) Egyéb kiegészítők: NorthStar Gyroscope Lézer-scanner Gripper (megfogó)
Robotino View 2.3.2 Alprogramok készítése: Menüsor Eszközsor Alprogram fülek Munkaterület Modulok
Robotino View 2.3.2 Szekvencia megvalósítása: Menüsor Eszközsor Alprogram fülek Szekvenciális eszközök Munkaterület Globális változók
Robotino View 2.2.3 - Modulok
Motor objektumok Motor objektumok: Speed set-point Reset position Brake Acceleration beállítani kívánt forgási sebesség motor pozíció nullázása fékezés gyorsulás mértéke Actual velocity Actual position Current [A] aktuális forgási sebesség motor aktuális pozíciója motor aktuális áramfelvétele Minden motorhoz külön objektum tartozik. Ellentétben az 1.7-es verzióval.
Motorok közvetlen vezérlése Mozgás előre: VIDEO Forgás jobbra: VIDEO
OmniDrive objektum OmniDrive objektum: vx x-irányú sebesség m1 1-es motor fordulatszáma vy y-irányú sebesség m2 2-es motor fordulatszáma omega forgási sebesség m1 3-as motor fordulatszáma Leegyszerűsíti a motorok vezérlését. Komplex mozgások is könnyen megvalósíthatóak vele.
OmniDrive objektum Mozgás előre: VIDEO Forgás jobbra: VIDEO
OmniDrive objektum Mozgás más irányokba: VIDEO Mozgás köríven: VIDEO
Irányítás a ControlPanel objektummal ControlPanel objektum: vx vy omega x-irányú sebesség y-irányú sebesség forgási sebesség Slider objektum: 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. Ellentétben az 1.7-es verzióval. value gomb értéke
Vektorműveletek Vektorok megadása Vektor létrehozása x és y koordinátákkal x y x-koordináta y-koordináta y Az x tengely hátulról előre, míg az y tengely jobbról balra irányuló tengelyek. Vector vektor x Vektor létrehozása polár koordinátákkal (szög, hossz) Length Phi Vector vektor hossza vektor szöge vektor r + φ 0 az előrefelé irányt jelenti. A pozitív forgásirány az óramutató járásával ellentétes irányú.
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 Vektorműveletek használata: y Vektor 1 Vektor 2 Vektor 1+2 Eleforgatott vektor x
Infra szenzorok (Distance modul) Distance modul: Bumper: Value Heading Távolság arányos jel (minél közelebb van valami a szenzorhoz, annál nagyobb jelet ad ki) szög, amely irányba a szenzor néz Minden szenzorhoz külön objektum tartozik. Ellentétben az 1.7-es verzióval. value Bumper állapota
Jel kondicionálás Scale: átskálázás be ki bemenet kimenet Transfer function x y bemenet kimenet Mean filter Input Output bemenet kimenet
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 Infra szenzorok A továbbiakban vektorokkal szeretnénk dolgozni, így az infra-szenzorok jeleiből vektorokat hozunk létre.
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 Infra szenzorok Egyenlőre csak az akadály irányára van szükségünk.
PassiveAviod értelmezése Vektorok létrehozása Vektorok összegzése Egységvektor létrehozása Infra szenzorok Vektorhossz meghatározása Minél közelebb vannak az akadályok, annál hosszabb vektort hozunk létre.
PassiveAviod értelmezése Vektorok létrehozása Vektorok összegzése Egységvektor létrehozása Vektor elforgatása Infra szenzorok Vektorhossz meghatározása A vektor most az akadály irányába mutat. Nekünk ezzel a vektorral pont ellentétes irányba kell elmozdulnunk.
PassiveAviod értelmezése Vektorok létrehozása Vektor felbontása Vektorok összegzése Egységvektor létrehozása Vektor elforgatása Hirtelen mozdulatok kiszűrése Robotino vezérlése Infra szenzorok Vektorhossz meghatározása Ha a vektrot felbontjuk x és y összetevőre, akkor ezekkel az értékekkel közvetlenül vezérelhetjük az omnidrive-ot.
Web-kamera képe Webkamera képének megtekintése: Image Kép kimenet
Képfeldolgozás Segmenter Modul: Az állatalunk kijelölt színekre bontja a kamera képét. Input Output bemeneti kép szegmentált kép Kép lefagyasztása Szín kijelölése Szín lementése
Képfeldolgozás Piros összetevő állítása Zöld összetevő állítása Kék összetevő állítása Fagyasztás megszűntetése
Képfeldolgozás Segment extractor: Az adott színszegmensnek a pozícióját adja meg. Input Selected segment Minimum area kép bemenet kereset szegmens száma minimális terület, ami esetén észreveszi a szegmenst x y Area Segment found szegmens súlypontjának x koordinátája szegmens súlypontjának y koordinátája szegmens területe találtunk szegmenst? A (0;0) koordináta a kép bal-felső sarkában található. Ellentétben az 1.7-es verzióval.
Képfeldolgozás VIDEO VIDEO
Vonalkövetés LineDetector modul: Input kép bemenet Threshold Search start Search height vonalkereső érzékenysége Honnan kezdje a keresést? Vizsgált terület magassága x Line Found szegmens súlypontjának x koordinátája Találtunk vonalat? Az x=0 a kép baloldalán található. Ellentétben az 1.7-es verzióval.
Vonalkövetés VIDEO
Vonalkövetés Vonalkövetés kiegészítő szenzorokkal: Digitális bemenet Analóg bemenet Digitális kimenet Relés kimenet Induktív Szenzor AI Optikai Szenzor DI
Vonalkövetés Vonalkövetés optikai szenzorokkal:
Globális változók Globális változók használata: adatok átvitele programmodulok között alprogramok kilépési feltételei (lásd később) Globális változók Globális változó olvasása Globális változó írása
Szekvenciális programvégrehajtás Szekvenciális építőmodulok: Inicializáló rész, Ez indul el bekapcsoláskor. Kilépési feltétel (lásd később) Alternatív ágak: 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
Szekvenciális programvégrehajtás Kilépési feltételek globális változók alapján: 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
Szekvenciális programvégrehajtás Alternatív ágak különlegességei: Mindig csak az egyik ágban van programfutás Az ágak prioritás balra nő (ha egyszerre két ágnál teljesül a kilépési feltétel, akkor a leg baloldalabbi á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 (lásd: példa).?
Szekvenciális programvégrehajtás
Szekvenciális programvégrehajtás Párhuzamos ágak különlegességei: 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.
Szekvenciális programvégrehajtás Biztonsági program: bumper hatására leáll Elhelyezünk egy párhuzamos ágat, ami bumper hatására a bumper nevű globális változót 1-be állítja (Step7). A bumper változó hatására kilépünk a programokból. (minden kilépési feltételbe be kell rakni, hogy bumper! Step7:
Egyszerű szabályozás Tartsuk a Robotino-t az előtte lévő faltól 5 cm-re! Alapjel + - Rendelkező jel Szabályozó (Programunk) Robotino Ellenőrző jel Érzékelő Szabályozó (Programunk) Robotino Érzékelő Alapjel
Kapcsolódás a Robotino-hoz Robotino adatainak leolvasása: IP-cím: 172.26.1.1 SSID: Robotino.2.122 Kapcsolódás: WLAN bekapcsolása Csatlakozás az AP-hoz Windows XP Windows Vista / 7
Program futtatása a PC-n 1. Kapcsolódás a Robotino Accespoint-jához (Wifi szükséges) 3.Szekvenciális program futtatása (3.) Aktuális alprogram futtatása (Kézi leállítás szükséges!) 2. Kapcsolódás 1. IP-cím beírása
RobotinoSim használata Kijelölő eszköz Port Robotino (kijelölve) Ha lassú a kommuniká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
Köszönjük a figyelmet! Kérdések? Játékra fel!