87
8.-12. julij 2013 Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali Kako vzgojiti ubogljivega robotka?

Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Embed Size (px)

Citation preview

Page 1: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

8.-12. julij 2013

Prosojnice iz poletne šole FRI

“Naredil bom kar želiš” aliKako vzgojiti ubogljivega robotka?

Page 2: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Lego Mindstorms NXT

2

Page 3: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Lego Mindstorms NXT

• Programirljiva kocka (brick)– Računalnik

• Procesor: 48 MHz, 32 bit (ARM7)• Pomnilnik: 256 kB flash, 64 kB RAM

– Uporabniški vmesnik• LCD zaslon 64 x 100 točk• 4 tipke• Zvočnik

– Vmesniki• USB, Bluetooth

– Baterije (6 x AA)– Vhodi in izhodi

• Motorji A, B, C• Senzorji 1, 2, 3, 4

3

Page 4: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Lego Mindstorms NXT

• Motorji– 2 načina upravljanja

• Nastavitev hitrosti• Nastavitev kota zasuka

– Merjenje položaja• 360 pulzov na obrat

4

Page 5: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Lego Mindstorms NXT

• Senzorji v paketu– Senzor dotika– Zvočni senzor (mikrofon)– Svetlobni senzor (črno-bel)– Ultrazvočni senzor (sonar)

• Dodatni – Kompas– Merilnik pospeška (žiroskop)– Svetlobni senzor (barvni) – Infrardeči senzor

5

Page 6: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Lego Mindstorms NXT

• Senzor dotika– Z njim robot otipa stvari– Vrača vrednosti

• 1 pritisnjen• 0 sproščen

6

Page 7: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Lego Mindstorms NXT

• Zvočni senzor – Robot z njim sliši– Meritev v decibelih– Vrača vrednosti od 0 do 100

• 4 – 5 mirno okolje• 5 – 10 govor iz razdalje• 10 – 30 normalni govor v bližini senzorja• 30 – 100 kričanje, glasna glasba

– Začetek izvajanja akcij na vašo zahtevo (plosk, vzklik)

7

Page 8: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Lego Mindstorms NXT

• Svetlobni senzor– Robot z njim loči temno in svetlo – Intenziteta svetlobe

• Barve, sivine– Vrača vrednosti od 0 do 100

• 0 temno• 100 svetlo

– Vgrajen vir svetlobe• Vklop po želji• Boljše meritve (manj senc)

8

Page 9: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Lego Mindstorms NXT

• Ultrazvočni senzor – Senzor za vid, z njim zazna objekte– Primeren za detekcijo ovir na poti– Kako deluje

• Netopir• Oddajnik in sprejemnik• Računanje razdalje iz časa med oddajanjem

zvoka in sprejemom odboja– Vrača razdaljo v centimetrih (zelo približno)

• 0 – 255 • 255 pomeni neskončno

9

Page 10: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Lego Mindstorms NXT

• Programiranje– Program se izvaja

na kocki• LEGO: NXT-G• Ostali programski jeziki

– C: RobotC, nxtOSEEK,Next Byte Codes & Not eXactly C, …

– Java: LeJOS NXJ (Java)– Ada, Lua, Ruby, URBI, …

• Prednosti: boljša odzivnost, robot je samostojen

– Komunikacija preko vmesnikov USB ali Bluetooth• Python, Matlab, …• Prednosti: poljubni programski jeziki, boljša razvojna okolja

10

Page 11: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Prijava v računalnik

• Zbudite/prižgite računalnik• Pritisnite Ctrl+Alt+Delete, da se pojavi prijavno

okence• Vnesite naslednje:

– Uporabniško ime FRI1\priprave00

– Geslostudij

11

Page 12: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

RobotC

12

Page 13: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

RobotC

• Zmogljivo razvojno okolje – Grafični vmesnik– Programiranje v jeziku C– Razhroščevalnik– MS Windows Vista, 7, 8– http://www.robotc.net– 30 dnevno preizkusno obdobje

• Posebna programska oprema– Firmware za programirljivo kocko– Gonilnik za operacijski sistem

• Programiranje preko vmesnikov USB ali Bluetooth13

Page 14: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

RobotC

• Nalaganje firmware-a– Povezava USB– Postopek

• Refresh Lists• Rename NXT• F/W

Download

14

Page 15: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

RobotC

• Prvi program– Glavni meni– Orodna vrstica– Levo okno – pomoč– Desno okno – urejevalnik programske kode

15

Page 16: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

RobotC

• Prenos programa na programirljivo kocko– Compile and Download Program – F5

16

Page 17: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

RobotC

• Vzpostavitev povezave Bluetooth– Communication Link Setup

17

Page 18: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

RobotC

• Spremljanje vrednosti na kocki– Poll Brick: motorji in senzorji

18

Page 19: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Lego Mindstorms NXT

• Težave ko se programirljiva kocka ne odziva več– Kratek pritisk na gumb, skrit v kocki,

jo resetira– Kocka mora biti prižgana

• Povezava Bluetooth– Omogočite povezavo preko vmesnika na kocki– Dela samo z Microsoftovimi Bluetooth gonilniki: če ima

vaš računalnik drugačnega, uporabite USB Bluetooth

19

Page 20: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Lego Mindstorms NXT

• Izgubljena brezžična povezava Bluetooth– Ugasnite kocko– Odstranite USB Bluetooth iz računalnika– Ponovno vstavite USB Bluetooth– Prižgite kocko

20

Page 21: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 1

• Vzemite programirljivo kocko • Priklopite vse senzorje in motorje • Naložite firmware• Prepišite “Prvi program” iz prosojnice 34

– Prevedite program – Prenesite ga na kocko in zaženite (USB)

• Oglejte si delovanje motorjev in senzorjev (Poll brick)

21

Page 22: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

8.-12. julij 2013

Osnove programiranja

v RobotC

Page 23: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Kako se programira?

• Programer in stroj (robot)– Roboti so namenjeni za opravljanje uporabnih nalog– Vsak je zgrajen za reševanje določenih nalog na

določen način

• Kako robot opravlja svoje delo?

Problem Cilj?

23

Page 24: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Kako se programira?

• Kako naj robot napiše številko 5?– Širina 20 cm– Višina 40 cm

• Rešitev:Pojdi naprej za 20 cmObrni se za pravi kot v levoPojdi naprej za 20 cmObrni se za pravi kot v levoPojdi naprej za 20 cmObrni se za pravi kot v desnoPojdi naprej za 20 cmObrni se za pravi kot v desnoPojdi naprej za 20 cm

24

Page 25: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Kako se programira?

• Dosežen cilj je skupno delo človeka in robota– Človek

• Določi problem • Določi postopek reševanja• Razloži postopek robotu

– Robot• Izvrši zadane ukaze

priprava rešitve

izdelava programa

sledenjeprogramuProblem Cilj

človek robot

25

Page 26: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Kako se programira?

• Težava: ljudje in stroji ne govorimoistega jezika!

• Za komunikacijo uporabljamo posebne (programske) jezike– Obstaja mnogo programskih

jezikov (Java, PHP, Python, C, …)

• Ukazi robotu, ki jih napišemo v programskem jeziku, so programi.

01000001

???

26

Page 27: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Kako se programira?

• Program je zaporedje akcij– Napišemo kot besedilo

v izbranem okolju (RobotC)– To besedilo imenujemo

programska koda– Kodo je potrebno pretvoriti v robotu

razumljivo obliko (prevajanje)• Prevajalnik prevede program

v strojni jezik, ki ga razumeračunalnik

• Zaporedje enic in ničel, 110101010101

27

Page 28: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

• Pri pisanju programa se moramo držati "slovničnih" pravil– Velike in male črke!– Ločila: ;,{},(),[]– Besede se vedno začnejo s črko– Presledki in prazne vrstice za

preglednost– Rezervirane besede so barvno

označene, na primer task main()

Kako se programira?

28

Page 29: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Kako se programira?

• Komentarji– Prevajalnik jih ignorira– Pomoč za programerja– Pomagajo pri berljivosti kode– Začasno izključijo del kode

– Dve vrsti• Enovrstični //• Večvrstični /* ... */

29

Page 30: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Kako se programira?

• Prevajanje– V meniju izberemo

Robot | Compile Program (tipka F7)

• Rdeč križ označuje napako– Pod programsko kodo so

opisane napake– Prevajalnik ne razume akcije naprej()

– Akcijo naprej() je potrebno definirati

30

Page 31: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Akcije

• Definiranje akcije naprej()– Združimo dva ukaza

• motor[oznaka] = hitrost;

• wait1Msec(število);

• Slovnična pravila– Z besedo void napovemo akcijo– V [] oklepajih navedemo želeni

motor (motorB, motorC)– V () oklepajih navedemo čas v

milisekundah

31

Page 32: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Akcije

• Ukazi motorjem in akcije robota– Naprej hitro– Naprej počasi– Nazaj hitro– Stop– Vrtenje okrog

središča– Vrtenje okrog

kolesa

32

Page 33: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Poimenovanje motorjev

• Ukazi s prejšnje strani delujejo samo, če sta– motorC levi motor– motorB desni motor

• Definiramo spomenke za motorC, motorB– #define motorLevi motorC– #define motorDesni motorB

• V nadaljevanju uporabljamo samo sopomenke– Namesto: motor[motorC] = 100;

– Raje: motor[motorLevi] = 100;

33

Page 34: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 2

• Prepišite program in ga zaženite

• Odstranite komentarje vtask main()

• Dopišite akciji– zavijLevo()

– zavijDesno()

• Preizkusite, če vaš robot napiše številko 5

34

Page 35: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 2 (rešitev)

35

Page 36: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Spremenljivke

• So deli spomina – "predalčki" za shranjevanje vrednosti (števil)

• Zakaj jih rabimo?– Večkrat moramo stvari shraniti za kasnejšo uporabo

• Izračunavanje vmesnih rezultatov• Shranjevanje starih vrednosti

• Definicija spremenljivke– Podatkovni tip in poljubno ime– Primer: int mojaStevilka;

36

Page 37: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

• Podatkovni tipi– Različni tipi zaradi različnih zapisov podatkov v

pomnilniku računalnika

• int cela števila• float decimalna števila• string niz znakov (besedilo)• bool logični vrednosti

• resnično (1, true)• neresnično (0, false)

Spremenljivke

37

Page 38: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Spremenljivke

• Področje delovanja

– Globalne spremenljivke• Definiramo jih nad task main()• Vidne so povsod

– Lokalne spremenljivke• Definiramo jih znotraj akcije • Vidne so samo v akciji, v kateri so

definirane

38

Page 39: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Spremenljivke

• Prirejanje vrednosti (dva načina)

– Deklaracija in priredbaint pot;

pot = 20;

– Oboje skupajint pot = 20;

39

Page 40: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

• Primer uporabe:– Robot gre naprej in nazaj za cas milisekund

Spremenljivke

40

Page 41: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 3

• Nalogo 2 popravite tako,da bo številka 5 velika:– 40 cm x 80 cm– 30 cm x 60 cm

• Uporabite spremenljivke

41

Page 42: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 3 (rešitev)

Različica 1

Različica 2

42

Page 43: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

• So akcije, sestavljene iz enega ali več ukazov• Proceduri: naprej() in naprejDalec()

– Dve različici akcije vožnja naprej– Razlikujeta se samo v času čakanja

Procedure

43

Page 44: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Procedure

• Deklaracija Parametra– Podatkovni tip– Ime, ki ga nato uporabljamo

znotraj procedure– void naprej(int razdalja)

– Premik za razdalja centimetrov

• Klic procedure– Določi se vrednost razdalja

44

Page 45: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

• Procedure samo izvršujejo ukaze– Ne vračajo vrednosti, zato pred imenom nastopa void

• Funkcije vračajo določeno vrednost– Primeri: abs(stevilo), sqrt(stevilo), sin(kot), …– Podatkovni tip vrednosti,

ki jo funkcija vrne,povemo pred imenom funkcije

– Vrednost iz funkcijevrnemo z ukazom return

Funkcije

45

Page 46: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

• V programu za pisanje številke 5– Uporabite proceduro naprej(int razdalja), v kateri

naj se robot vsakič premakne za razdalja centimetrov

– Napišite proceduri, s katerima se robot zavrti za poljuben kot (v stopinjah):

• zavijLevo(int kot)

• zavijDesno(int kot)

Naloga 4

46

Page 47: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 4 (rešitev)

47

Page 48: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Premikanje robota

• Merjenje razdalje

– Na podlagi časa• Kaj se zgodi, če spremenimo hitrost?

– S pomočjo merilnika položaja motorja (enkoder)• V enem obratu nameri 360 impulzov• Ne pozna začetnega položaja

48

Page 49: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Premikanje robota

• Merjenje razdalje– Nastavimo vrednost enkoderja na nič

• nMotorEncoder[motorC] = 0;

– Nastavimo ciljni premik v številu impulzov• nMotorEncoderTarget[motorC] = 1000;

– Gibanje motorjev sprožimo z željeno hitrostjo• motor[motorC] = hitrost;

– Počakamo, da se premik konča• wait1Msec(10000);

49

Page 50: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Premikanje robota

• Merjenje razdalje (primer)

50

Page 51: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Mali triki velikih mojstrov

• Ukaz wait1Msec(…) lahko nadomestimo z ukazom– while(nMotorRunState[motorLevi] != runStateIdle){}

• Motor ima pri hitrosti nič dva načina delovanja:– Lebdenje: bFloatDuringInactiveMotorPWM = 1;

– Zaviranje: bFloatDuringInactiveMotorPWM = 0;

– Z vklopljenim zaviranjem so premiki natančnejši– Ukaz začne veljati šele ob naslednji nastavitvi hitrosti

na 0!

51

Page 52: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Mali triki velikih mojstrov

• Razhroščevanje

– Spremljanje izvajanja programa, po korakih• Step Into

– Uporabno za iskanje napak v programu (hroščev)

52

Page 53: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 5

• Izboljšajte proceduro za premikanje naprej– Dopolnite jo s prvim trikom iz prosojnice 66– Kot parameter dodajte še hitrost (negativna hitrost je

premikanje nazaj)• Napišite proceduro zavij(int kot, int hitrost), s

katero robota obrnemo na mestu z dano hitrostjo za zahtevani kot– Negativna hitrost naj pomeni obračanje v nasprotno stran

• Robota čim bolj natančno umerite• Poskusite, kako sprememba hitrosti vpliva na izvajanje

ukazov naprej in zavij• Namig: premer kolesa je 5,4 cm, medosno razdaljo pa

izmerite

53

Page 54: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 5 (rešitev)

54

Page 55: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 6 – dodatna

• Robot naj z "eno potezo" nariše hišico s podano stranico a

a

55

Page 56: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 6 – dodatna (rešitev)

56

Page 57: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Pisanje na zaslon

• Pisanje besedila– nxtDisplayString(vrstica, "Pozdravljena Poldka!");

– Številka vrstice od 0 (zgornja) do 7 (spodnja)– Šumniki ne delujejo

• Brisanje zaslona– eraseDisplay();

57

Page 58: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Pisanje na zaslon

• Pisanje besedila in števil (primer)– float b = 3.14;

nxtDisplayString(0, "Stevilo %d ni enako %f", 3, b);

• Razlaga– nxtDisplayString(vrstica, format, p1, p2, p3, …);

– format lahko vsebuje oznake za parametre• %d celo število (int)• %f decimalno število (float)• %s niz znakov (string)

– p1, p2, p3 so vrednosti ali imena spremenljivk, katerih vrednosti želimo izpisati na zaslon.

• Ukaz, ki sproti pobriše neuporabljeni del vrstice:– nxtDisplayTextLine(vrstica, format, p1, p2, p3, …);

58

Page 59: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 7

• Preverite kaj naredi naslednji program

59

Page 60: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Piskanje

60

• Igranje vgrajenih zvokov– PlaySound(sound)

– sound je lahko soundBeepBeep , soundBlip, soundLowBuzz, soundFastUpwardTones, soundShortBlip,…

• Igranje poljubnih tonov– PlayImmediateTone(frekvenca, trajanje)

– Frekvenca v Hz– Trajanje v stotinkah sekunde

• Frekvence tonovTON C’ Cis’

Des’D’ Dis’

Es’E’ F’ Fis’

Ges’G’ Gis’

As’A’ Ais’

B’H’ C’’

FREK-VENCA

261.626

277.183

293.665

311.127

329.628

349.228

369.994

391.995

415.305

440.000

466.164

493.883

523.251

Page 61: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

• Preverite, če naslednji program pravilno zaigranapisane note

Naloga 8

61

Page 62: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Zaznavanje

• Lego Mindstorms kocka ima štiri vhode, na katere lahko priklopimo različne senzorje (S1, S2, S3, S4)

• Senzorje je pred uporabo potrebno pravilno nastaviti

62

Page 63: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Zaznavanje

• Delo s senzorji v programski kodi– #define oznakaSenzorja S1

• Poljubno ime senzorja povežemo z oznako senzorja S1, …, S4

– SensorType[oznakaSenzorja] = …• Programsko nastavi tip senzorja

sensorTouch, sensorLightActive, sensorLightInActive, sensorSONAR, sensorSoundDB, sensorSoundDBA, …

– SensorMode[oznakaSenzorja] = …• Programsko nastavi kakšne vrednosti naj senzor vrača

modeBoolean, modePercentage, modeRaw, …

– SensorValue(oznakaSenzorja) • Funkcija, ki vrne trenutno vrednost (stanje) senzorja

63

Page 64: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Izvajanje programa

• Enostaven program– Izvajanje ukazov od

začetka do konca

64

Začetek

Zvoni budilka

Splezaj iz postelje

Konec

Ugasni budilko

Page 65: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Vejitve

• Program se glede na pogoj nadaljuje po različnih poteh

• if (če)

65

Začetek

Zvoni budilka

Splezaj iz postelje

Konec

Počitnice?

Ugasni budilko

Da Ne

Spi še kako uro

Samo še pet

minutk…

Page 66: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Zanke

• Ponavljanje določenihukazov

• while (dokler)• for (za)

66

Začetek

Zvoni budilka

Splezaj iz postelje

Konec

Bi še malo

poležal/a?

Vključi dremež

Ne Da

Page 67: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Zanka WHILE

• Trije sestavni deli– Ključna (rezervirana) beseda

while

– Pogoj• Napisan mora biti v obliki logičnih izjav, na katere vedno

obstaja odgovor RESNIČNO ali NERESNIČNO• Primer: "Vrednost senzorja dotika je enaka 0"

» Izjava je RESNIČNA (1), če vrednost senzorja je 0» Izjava je NERESNIČNA (0), če vrednost senzorja ni 0

– Telo zanke – sestavljajo ga ukazi znotraj zavitih oklepajev ukaz1, … ukazN

• Telo zanke se izvaja dokler je pogoj izpolnjen

67

while( pogoj ){

ukaz1;…ukazN;

}

Page 68: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Pogoji

• Primerjalni operatorji== vrednost na levi in desni sta enaki

dvojni enačaj preverjanje enakostienojni enačaj prireditev vrednosti

!= vrednost na levi je različna od vrednosti na desni< vrednost na levi je manjša od vrednosti na desni<= vrednost na levi je manjša ali enaka vrednosti na desni> vrednost na levi je večja od vrednosti na desni>= vrednost na levi je večja ali enaka vrednosti na desni

• Primeri1 == 1 je 1 enako 1?, vedno resnično1 == 0 je 1 enako 0?, vedno neresnično

68

Page 69: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Pogoji

• Enostavni pogoji– senzorSvetlobe > 45

– sezorDotika == 1

• Sestavljeni pogoji– (senzorSvetlobe > 45) && (senzorDotika == 1)

– Enostavne pogoje zavijemo v oklepaje• Logični operatorji za povezovanje enostavnih

pogojev:

– ! negacija (not) – && in (and)– || ali (or)

69

Page 70: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Logični operatorji

• Negacija!Pogoj

• In(Pogoj1 ) && (Pogoj2)Sestavljeni pogoj JE RESNIČEN samo, če sta OBAenostavna pogoja RESNIČNA

• Ali(Pogoj1) || (Pogoj2)Sestavljeni pogoj JE RESNIČEN, če je VSAJ EDEN od enostavnih pogojev RESNIČEN

70

Pogoj !Pogoj

0 11 0

Pogoj 1 Pogoj 2 && ||0 0 0 00 1 0 11 0 0 11 1 1 1

Page 71: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Zanke (primer)

• Dokler se robot ne zaleti v steno naj se s polnohitrostjo premika naravnost naprej. Po trku naj vozi 0,5 sekunde vzvratno.

– Nastavitev senzorja– Branje senzorja– Zanka WHILE

71

Page 72: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 9

• Senzor dotika zamenjajte s svetlobnim senzorjem in ponovite prejšnji primer– Na mizo nalepite košček črnega lepilnega traku– Robot naj se ustavi, ko senzor zazna lepilni trak– Senzor ustrezno nastavite

• Luč v senzorju naj bo aktivna bolj natančno delovanje ob spremenljivih pogojih

• Senzor naj vrača vrednosti v odstotkih– Nizka vrednost senzor zaznava temno podlago– Visoka vrednost senzor zaznava svetlo podlago

• Glede na meritve na obeh podlagah nastavite prag za zaznavanje temne podlage

– Preverite delovanje programa

72

Page 73: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Zanke (primer)

• Robot naj se vozi naravnost naprej dokler se ne zaleti– Med vožnjo naj na svoj

zaslon izpisuje ali se vozi po temni ali po svetli podlagi

– Gnezdenje zank while– Rešitev ni najbolj

elegantna• Ukazi za premikanje

se ponavljajo v obeh zankah

73

Page 74: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Vejitve

• V prejšnjem primeru je primernejša uporaba vejitev• Stavek if-else

– Običajno programiramo tako, da v eno vrstico napišemo en ukaz

– Temu stilu bolj ustreza desniprikaz vejitve

74

Page 75: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Stavek if-else

• Če je pogoj izpolnjen, seizvršijo samo ukaziukazDA

• Če pogoj ni izpolnjen, se izvršijo samo ukaziukazNE

• Zamikanje povečapreglednost kode

75

if( pogoj ){

ukazDA1;…ukazDAn;

}else{

ukazNE1;…ukazNEn;

}

Page 76: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Stavek if

• Kadar je potrebnoukrepati samo obizpolnjenem pogoju, del else… izpustimo

76

if( pogoj ){

ukazDA1;…ukazDAn;

}

Page 77: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Vejitve (primer)

• Robot naj se vozi naravnost naprej dokler se ne zaleti– Med vožnjo naj na svoj

zaslon izpisuje ali se vozi po temni ali po svetli podlagi

– Izboljšava prejšnjegaprimera

77

Page 78: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Vejitve (primer)

• Robot naj se vozi dokler se ne zaleti– Pri vožnji po

temni podlagi naj piska

78

Page 79: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 10

• Robot naj se s pomočjo ultrazvočnega senzorja ali sonarja postavi na oddaljenost približno 20 cm od ovire– Če oviro oddaljimo, naj se ji približa– Če oviro približamo, naj se od nje ustrezno oddalji– Program zaključimo s pritiskom na senzor dotika

79

Page 80: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Zanke (štetje ponovitev)

• Kako bi s splošnimi proceduramiza premikanje in zavijanje narisali kvadrat?– Zaporedje funkcij naprej() in zavij() se ponovi štirikrat

– Boljša rešitev (psevdokoda)• Kako prepričati robota, da

ukaza 4-krat ponovi?

80

Page 81: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Zanke (štetje ponovitev)

• Ponavljanje ukazov lahkodosežemo z zanko while– Števec i– Kaj naredi i = i + 1?

81

Page 82: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 11

• Napišite proceduro, ki bo robota vozila po stranicah poljubnega enakostraničnega n-kotnika (n>2)

• Namigi– Robot se mora vrniti v isto točko. – Skupaj mora zaviti za 3600

– Procedura naj ima dva parametra:• Število kotov n in • Dolžino stranice a

82

Page 83: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 12

• Robot naj pri vožnji naravnost naprej šteje kolikokrat je prešel iz svetlega področja na temno področje– Uporabite

• Senzor za merjenje svetlosti podlage in• Senzor za dotik, da robota ustavite

– S črnim lepilnim trakom si na mizi naredite nekaj različno debelih črt

– Prehod zaznamo tako, da se stara vrednost in nova vrednost senzorja močno razlikujeta

83

Page 84: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Sledenje črti

• Uporaba enega senzorja• Robot naj sledi enemu od robov črte

84

Page 85: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Sledenje črti

• Sledimo levemu robu– Če vidi temno, je na črti, rob je levo

• Približa se mu z gibanjem naprej in v levo– Če vidi svetlo, ni na črti, rob je desno

• Približa se mu z gibanjem naprej in desno

85

Page 86: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 13

• Napišite program, ki bo z uporabo enega senzorja za svetlobo sledil črti– Sledite prej opisani ideji– Robot naj bo kar najhitrejši– Sledenje sprožite in prekinete

s pritiskom na senzor dotika

86

Page 87: Prosojnice iz poletne šole FRI “Naredil bom kar želiš” ali ...laspp.fri.uni-lj.si/roboliga/2014/files/RobosolaFRI2013-prosojnice.pdf · Lego Mindstorms NXT • Ultrazvočni

Naloga 14 - dodatna

• Sledenje črti – nadaljevanje– Zanesljivost robota in njegovo hitrost poskusite

izboljšati z dodatnim senzorjem za svetlobo

87