pondělí 1. října 2012

Letní škola robotiky - Sedmý den a úvod do LabView for LEGO

Léta Páně 29. září 2012

Sobota.
Nic se nestalo.
Snad jen pár věcí...
Snídaně - Dobrá.
24 hodin - Dobrý.
Frisbee s nějakýma holkama z Ruska - Dobrý.
StarCraft a WarCraft s Danem - Dobrý.

A teďka si dáme malý úvod do LabView :-D. Nebudeme tady žvatlat nějaký kokotinky k čemu to je.. Já nevím :-D. Prostě se to všeci naučte a bude pokoj :-D.

1. Zapneme LV. Mělo by být na ploše. Pokud ho nemůžete najít, tak jste ikonku přesunuli na jinou část plochy.

2. 2x klikneme na ikonku LabVIEW for LEGO MINDSTORMS 2010. Ne moc rychle, ani ne moc pomalu. Prostě takový krásný dvouklik. Pokud nám to nejde, tak si v nastavení myši musíme změnit rychlost dvoukliku. Ovládací Panely - Myš.

3. Počkáme, až naše počítačka pochroustá nějaký data a zapne program.

4. Licenci nemáme, takže přeskočíme tabulku o zadávání klíče.

5. Čekáme. Pořád čekáme... Trvá to nějak dlouho. Už.

6. Klikneme na Create Program. Čekáme.

7. Vybereme Robot Project - Blank robot. Zadáme nějakou cestu (Třeba D1, nebo E55), vymyslíme si název (Třeba Kobra 11). Create.

8. New VI - VI for NXN target. Ňáký méno - třeba main.

9. Teďka budeme kreslit do teho bílého pole :-D. Functions si špendlíkem připchneme, aby se to nehejbalo, taky si zapneme Context help.

10. Vložíme While loop. While se ukončí, pokud na tu červenou fičuru dole vpravo donde jednička. Tak tam pro jistotu dáme nulu, aby nám program neutekl někde do pryč. Program - Numeric - Numeric Constant.

11. Hm, tohle nefunguje :-D. Potřebujeme BOOL hodnotu. Program - Boolean - False.

12. V Context helpu je napsaný, že podmínka ukončení WHILE jde změnit. Jde :-D. Klikneme pravým na ohraničení While a změníme to. Teda, pokud chcem. Já nechcu. Teda, asi nechcu. Já nevím. Zavolám svýmu cvokaři.

13. Teďka asi budeme chtít nějakou Case strukturu, aby jsme mohli řídit robota. Vrazme ji dovnitř While.

14. No, a jak budeme Case řídit? Tím, že na vstupu budeme přepínat hodnoty proměnných. Tzn tam dáme proměnnou typu Enum Constant, ale kvůli správné funkčnosti programu ji musíme dát až před While, takže Enum nebude v žádné struktuře. Pak pravým klikem na ni, Edit Items můžeme měnit hodnoty, které tato proměnná bude mít. Robot bude mít několik stavů.
Teďka je asi vhodný říct, jakýho robota budeme dělat :-D. Takže třeba... Bude to robot, který bude mít tři stavy. Napřed něco zazpívá. Potom se bude točit dokola. A jakmile najde ultrazvukovým senzorem něco před sebou, tak se zastaví a začne pískat.. How easy...
Protože hodnotu Enum budeme rozkopírovávat přes celý dokument, tak by jsme si v ní měli vytvořit všechny potřebné proměnné. Budou třeba tři (=tři stavy).
První - robota zapnem a on písnke a za pár sekund pojede. Takže "beep".
Druhá - robot se bude točit a hledat - "search".
Třetí - robot našel a dává znamení - "found"

15. Teď je třeba vytvořit návaznost programu. Výstup z Enum napojíme přes While až na vstup Case.
A protože cykly musí probíhat pořád dokola, tak je třeba v tu chvíli, kdy budeme mít výstupní proměnnou, tak ji natáhnout z Case až do obálky While.

16. Takže teďka robota donutíme pípnout, počkat a přejít do dalšího stavu. Stav Case si pojmenujeme "beep" (Vše je pod pravým tlačítkem na ohraničení Case). Vrazíme do Case z I/O Tone a mezi něj Time. Přes NXN vstupy je všechny propojíme a jako druhý vstup Time dáme Numeric Constant, jejíž hodnota bude 1 (=1s).

17. Musíme si vytvořit čekání, aby nám program neutekl pryč. Používáme bloky Tick. Pozor, to neurčuje čas od nuly do inf, ale je v tom zapsaný nějaký čas (Asi jako základní čas v PHP). Proto to musíme obejít tak, že jeden Tick dáme úplně ven z While a druhej dáme do našeho Case. V prvním tedy bude čas úplně od začátku a v druhým se bude čas počítat od tý doby, kdy probram vstoupí do Case.
Vezmeme tedy Numeric modul odčítání a odečtenou hodnotu (Vnitřní - vnější Tick) budeme porovnávat s hodnotou, jak dlouho chceme čekat. !!! Toto je pak jednoduchý časovač na čekání !!!
Při porovnávání a tak to platí vždy --->"horní" "operátor" "spodní" <---

18. Za výstup z porovnávače vrazíme Case. Tedy chceme, aby se při hodnotě True program přepl dále, při False zůstal kde je.

19. Do True Case tedy dáme Enum s dalším stavem ("search"). Je vhodo zpopírovat původní, aby byly ve všech Enumech stejný proměnný.

20. Teďka se přepneme do False. Chceme, aby program nedělal nic. Tak vezmeme to, co jsme přivedli na vstup Case. Přivedeme hodnotu do vnitřního Case, z něj pak ven až k While. !!!Pozor!!! Pokud je podmínka prázdná, tak program nefungoval. Je třeba tam dát něco. Tzn. třeba přesunout v "search" funkci motorů sem a nemít je v hlavním Case. Prostě a jednoduše tam vždycky musí něco být, nebo to půjde plnit tu druhou podmínku, která není prázdná.

21. Teďka máme na začátku a konci While dva čtverečky. Klikneme na jeden pravým a dáme "Shif register". Potom kliknem na druhým levým, on se taky změní. Super. How easy.

22. Ještě musíme dořešit True podmínku. Vezmeme výstup z Enum a přivedeme ho na výstup z Case. A je to.

23. Úplně stejným způsobem doplníme návaznost ostatních stavů s tím, že v posledním stavu povede hodnota rovnou ze vstupu Case na jeho výstup. Proč? Protože už se stejně nic nemění.

Tak, teďka umíme dělat v LV for LEGO. Awesome.

True story ;-)

1 komentář: