Page 58 - MATINF Nr. 9-10
P. 58
58 R.D. Albu
pasare.setBeak(0,100,0)
pasare.setTail(”all”,0,100,0)
sleep(3)
pasare.stopAll()
Pentru un comportament mai put , in previzibil, se pot ˆıncorpora unele variat , ii, astfel ˆıncˆat
robotul s˘a fac˘a ceva us , or diferit de fiecare dat˘a cˆand ruleaz˘a programul, putˆandu-se utiliza
un generator de numere aleatorii, care este o funct , ie care alege un num˘ar aleatoriu de fiecare
ˆ
dat˘a cˆand este apelat. In Python, se utilizeaz˘a randint() pentru a alege un ˆıntreg, aceasta
avˆand doi parametri care definesc intervalul de numere interesat (funct , ia trebuie importat˘a
din biblioteca random). Biblioteca random include s , i alte generatoare de numere aleatorii. De
a
exemplu, random.random() genereaz˘ un num˘ar aleator ˆıntre 0.0 s , i 1.0 (f˘ar˘ a include 1.0).
a
while (pasare.getLight(’L’)<prag) or while (pasare.getLight(’L’)<prag) or
(pasare.getLight(’R’)<prag): (pasare.getLight(’R’)<prag):
for i in range(4): #pornes , te fiecare dintre luminile cozii for i in range(4): #pornes , te fiecare dintre
la o culoare aleatoare diferit˘ a luminile cozii la o culoare aleatoare diferit˘a pa-
pasare.setTail(i+1,random.randint(0,100), sare.setTail(i+1,random.randint(0,100),
random.randint(0,100), random.randint(0,100)) random.randint(0,100), random.randint(0,100))
sleep(1) sleep(5*random.random())
pasare.stopAll() bird.stopAll()
while (pasare.getLight(’L’)>prag) or (pasare.getLight(’R’)>prag):
pasare.setBeak(100,0,0)
ˆ
bird.setMotors(-50,50) # Invˆartire
a
sleep(2*random.random()) #pentru o perioad˘ aleatoare de timp
pasare.setMotors(0,0) # Stop
pasare.setBeak(0,100,0)
sleep(1)
pasare.stopAll()
Finch cont , ine doi senzori de linie, care sunt senzori infraros , ii care emit radiat , ii infraros , ii s , i
a
a
a
m˘asoar˘ cantitatea reflectat˘ de suprafat , a de sub Finch. Metoda getLine() returneaz˘ valoarea
m˘asurat˘a de un senzor de linie de la 0 la 100 (f˘ar˘a unit˘at , i). Aceast˘a metod˘a necesit˘a un
a
parametru, un s , ir care indic˘ interesul pentru senzorul din dreapta sau stˆanga.
while not pasare.getButton(’A’): pasare.setMotors(30,30)
if (pasare.getLine(’L’)<prag) or while not (pasare.getLine(’L’)<prag or
(pasare.getLine(’R’)<prag): pasare.getLine(’R’)<prag):
print(”negru”) pass
else: pasare.stop()
print(”alb”)
Cea mai obis , nuit˘a utilizare a senzorilor de linie este de a urm˘ari o linie. Pentru a urm˘ari
partea dreapt˘a a unei linii negre cu senzorul de linie dreapt˘a, robotul ar trebui s˘a vireze la
a
dreapta atunci cˆand este peste linia neagr˘ (mai put , in˘ radiat , ie infraros , ie reflectat˘a) s , i la stˆanga
a
a
a
atunci cˆand este peste o suprafat , ˘ luminoas˘ (mai mult˘a radiat , ie infraros , ie reflectat˘a).