#test.py. Programa bàsic amb reconeixement de cara
from microbit import *
import xgo
#import radio
import music
i2c.init(freq=100000) # inicialitza I2C (HuskyLens)
xgo.set_algorithm(xgo.FACE) # posa huskylens en mode reconeixement de cares
def executar():
blk = xgo.get_block()
if blk and blk["id"] == 1: # si veu una cara i reconeix ID1 ...
music.pitch (880, 150) # confirmació
# xgo.caminar(0xA0)
# else:
# xgo.stop()
while True:
executar()
sleep(100)
Si aquest codi funciona podem fer que el robot camini en reconèixer la cara i s'aturi quan no la trobi.
GPT: com que enviem les ordes continuament pot haver “tremolors” perquè cada 100 ms el robot comprova si veu la cara correcta i decideix què fer.
Per evitar tremolors podem fer caminar només quan canvia l’estat (de parar a caminar).
Proposta:
El robot només pot estar en dos estats: aturat o caminant.
Només el farem canviar d’estat quan canvia el que veu.
from microbit import *
import xgo
i2c.init(freq=100000)
xgo.set_algorithm(xgo.FACE)
estat = "aturat" # estat inicial. possibles valors: aturat - caminant
def executar():
global estat
blk = xgo.get_block()
# CAS 1: veu la cara correcta
if blk and blk["id"] == 1:
if estat == "aturat":
xgo.caminar(0xA0)
estat = "caminant"
# CAS 2: no veu la cara correcta
else:
if estat == "caminant":
xgo.stop()
estat = "aturat"
while True:
executar()
sleep(100)
Si vulem mantenir l'estructura inicial de test.py:
mode = "" # varuable buida
estat = "aturat" # estat del robot
def executar():
global mode
xgo.posicio_inicial_estable() # deixa el robot en estat neutre i estable inicial
while True: # accions condicionades a la recepció de missatges de ràdio
pkt = radio.receive_full()
if pkt:
data = pkt[0]
if data and (b"XGO:C" in data):
mode = 'C'
elif data and (b"XGO:D" in data):
mode = 'D'
elif data and (b"XGO:E" in data):
mode = 'E'
elif data and (b"XGO:F" in data):
mode = 'F'
elif data and (b"XGO:STOP" in data):
mode = 'STOP'
if mode = 'C':
accio_1()
elif mode = 'D':
accio_2()
elif mode = 'E':
accio_3()
elif mode = 'F':
accio_4()
elif mode = 'STOP':
return
sleep(30)
def accio_1():
global estat
blk = xgo.get_block()
# CAS 1: veu la cara correcta
if blk and blk["id"] == 1:
if estat == "aturat":
xgo.caminar(0xA0)
estat = "caminant"
# CAS 2: no veu la cara correcta
else:
if estat == "caminant":
xgo.stop()
estat = "aturat"
#husky.py. Comprova que es reconeix la HuskyLens
from microbit import *
import xgo
i2c.init (freq=100000) # inicialitza I2C (HuskyLens)
def executar(): # comprova que la HuskyLens hi és i respon
if xgo.knock():
display.scroll("YES")
else:
display.scroll("NO")
while True:
executar()
sleep(100)
#husky.py. Comprova que la HuskyLens es posa en mode reconeixement de cares
from microbit import *
import xgo
i2c.init (freq=100000) # inicialitza I2C (HuskyLens)
def executar():
if xgo.knock(): # comprova que la HuskyLens hi és i respon
display.scroll("YES")
else:
display.scroll("NO")
sleep(500)
if xgo.set_algorithm(xgo.FACE): # comprova que la HuskyLens es posa en el mode demanat
display.scroll("ALG")
else:
display.scroll("X")
while True:
executar()
sleep(100)
#husky.py. Comprova que la HuskyLens veu algo
from microbit import *
import xgo
i2c.init (freq=100000) # inicialitza I2C (HuskyLens)
def executar():
if xgo.knock(): # comprova que la HuskyLens hi és i respon
display.scroll("YES")
else:
display.scroll("NO")
sleep(500)
if xgo.set_algorithm(xgo.FACE): # comprova que la HuskyLens es posa en el mode demanat
display.scroll("ALG")
else:
display.scroll("X")
sleep(500)
if xgo.get_block(): # comprova que la HuskyLens veu algo
display.show (1)
else:
display.show (0) # és molt probable que encara no tinguis cap cara entrenada (o no està “locked”/confirmada)
sleep(500)
while True:
executar()
sleep(100)