Bemutató előadás

Download Report

Transcript Bemutató előadás

A RobotinoView programozása
v2.6.3
Í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ű (realtime) 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
RobotinoView 2.6.3
• Alprogramok készítése:
Menüsor
Eszközsor
Alprogram fülek
Munkaterület
FüggvényBlokkok
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.
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
• 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:
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
Párhuzamos ágak:
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!)
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
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
Acceleration
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
m1
1-es motor fordulatszáma
vy
y-irányú sebesség
m2
2-es motor fordulatszáma
omega
forgási sebesség
m3
3-as motor fordulatszáma
OmniDrive objektum
• Mozgás előre:
• Forgás jobbra:
• Mozgás átlósan:
• Mozgás köríven:
Irányítás a Control Panel objektummal
• Control Panel:
• Slider:
value
csúszka állapota
vx
x-irányú sebesség
vy
y-irányú sebesség
omega
forgási sebesség
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:
value
gomb értéke
Minden tengelyhez és
minden gombhoz külön
objektum tartozik.
Navigáció - Odometria
• Odometry: A megtett út mérése
x
A kezdő pozíció x
koordinátája
x
Az aktuális pozíció x
koordinátája
y
A kezdő pozíció y
koordinátája
y
Az aktuális pozíció y
koordinátája
phi
A kezdő pozíció phi
koordinátája
phi
Az aktuális 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)
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
Szinte mindig az
Omnidrive blokk
bemenete
A cél pozíció
eléréséhez
szükséges y
irányú sebesség
omega
Szinte mindig az
Odometry blokk
kimenete
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
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:
• Bumper:
value
Bumper állapota
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
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
Vektorműveletek
• Vektor létrehozása x és y koordinátákkal
x
x-koordináta
y
y-koordináta
Vector
vektor
Az x tengely hátulról előre, míg
az y tengely jobbról balra
irányuló tengelyek.
y
x
• Vektor létrehozása polár koordinátákkal (hossz, szög)
Length
vektor hossza
Phi
vektor szöge
Vector
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
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
Vektor
elforgatása
Egységvektor
létrehozá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
Vektorok
összegzése
Vektor
felbontása
Vektor
elforgatása
Egységvektor
létrehozása
Infra szenzorok
Vektorhossz
meghatározása
Hirtelen
mozdulatok
kiszűrése
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.
Webkamera
• 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.
Kép lefagyasztása
Input
bemeneti kép
Output
szegmentált kép
Szín kijelölése
Szín lementése
Képfeldolgozás
Fagyasztás megszűntetése
A kimeneten megjelenő kép
Képfeldolgozás
• Segment extractor: Az adott színszegmens
pozícióját adja meg.
Input
kép bemenet
x
Selected
segment
kereset
szegmens
száma
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?
Minimum
area
minimális
terület, ami
esetén
észreveszi a
szegmenst
A (0;0) koordináta
a kép bal-felső
sarkában található.
Vonalkövetés
• 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
Optikai Szenzor
 Analog input
 Digital input
Vonalkövetés
• Vonalkövetés optikai szenzorokkal:
Egyszerű szabályozás
• Tartsuk a Robotino-t az előtte lévő faltól 5 cm-re!
Alapjel
Rendelkező jel
+
Ellenőrző jel
Szabályozó
(Programunk)
Robotino
Érzékelő
Szabályozó (Programunk)
Alapjel
Robotino
Érzékelő
Egyszerű szabályozás
• Menjen a Robotino 1 méterrel előre!
(ne felejtsük el inicializálni az odometriát!)
Alapjel
Rendelkező jel
+
-
Szabályozó
(Programunk)
Ellenőrző jel
Érzékelő
Szabályozó
(Programunk)
Alapjel
Robotino
Robotino
Érzékelő
Köszönjük a
figyelmet!
Kérdések?