Diferència entre revisions de la pàgina «Robot versió 6»

De binefa.com
Salta a la navegació Salta a la cerca
 
(Hi ha 24 revisions intermèdies del mateix usuari que no es mostren)
Línia 4: Línia 4:
 
Aquest robot està pensat per a funcionar amb un [https://store.arduino.cc/arduino-nano Arduino Nano] o una [https://www.raspberrypi.org/products/raspberry-pi-zero-w/ Raspberry Pi Zero W].
 
Aquest robot està pensat per a funcionar amb un [https://store.arduino.cc/arduino-nano Arduino Nano] o una [https://www.raspberrypi.org/products/raspberry-pi-zero-w/ Raspberry Pi Zero W].
  
La darrera versió dels codis per a fer-lo funcionar són al [https://github.com/edcodisseny/Robot-Arduino dipòsit d'Arduino] i al [https://github.com/edcodisseny/Robot-Arduino dipòsit de la Raspberry Pi], realitzats per [https://twitter.com/franmesasc Fran Mesas].  
+
La darrera versió dels codis per a fer-lo funcionar són al [https://github.com/edcodisseny/Robot-Arduino dipòsit d'Arduino] i al [https://github.com/edcodisseny/Robot-Arduino dipòsit de la Raspberry Pi], realitzats per [https://twitter.com/fmesasc Fran Mesas].  
  
 
[[Image:ConnexionsRobot.png|center|Robot v6]]
 
[[Image:ConnexionsRobot.png|center|Robot v6]]
  
= Connexions =
+
[[Connexions i esquema electrònic del robot versió 6]]
[[Image:ConnexionsRobotZoom.png|center|Connexions del Robot v6]]
 
  
[https://binefa.cat/training/robot_v6/esquemaRobot.pdf Esborrany de l'esquema electrònic]
+
= Control fent servir un Arduino Nano =
 +
La darrera versió dels codis per a fer-lo funcionar són al [https://github.com/edcodisseny/Robot-Arduino dipòsit d'Arduino] d'[http://www.edcodisseny.com/ca/index.html Edco] desenvolupat per en [https://twitter.com/fmesasc Fran Mesas].
  
= Control des del NodeRED i MQTT =
+
= Control fent servir una Raspberry Pi Zero W =
== NodeRED ==
+
[[Control des del NodeRED i MQTT  fent servir una Raspberry Pi Zero W]]
[[Image:Test00Robot6.nodered.png|center|Interacció del maquinari amb el NodeRED]]
 
  
[https://binefa.cat/training/robot_v6/Test00Robot6.nodered.txt Aquest flux del NodeRED]
+
[[Control del robot des de Snap i sòcols web fent servir una Raspberry Pi Zero W]]
  
== Python ==
+
= Exercicis =
[https://binefa.cat/training/robot_v6/codiRobot_v6_00.zip Codis d'interacció en Python]
+
0) Programeu en NodeRED la següent lògica:
  
== Interacció amb el maquinari ==
+
- Si es detecta '''B''' a '''bCC''' llavors s'aturen tots els motors
=== Inici i aturada del procés al rerefons ===
 
Per a fer la comunicació entre el maquinari i el NodeRED cal executar:
 
/home/pi/code/robot/robot_01.py
 
  
Altrament, també es pot executar des dels nodes del NodeRED:
+
- Si es detecta '''B''' a '''bCL''' llavors el motor de l'esquerra tindrà un cicle de treball del 50% cap endavant. Si es detecta '''B''' a '''bCR''' llavors el motor de la dreta tindrà un cicle de treball del 50% cap endavant.
  
[[Image:CridaExec.nodered.png|center|Interacció del maquinari amb el NodeRED]]
+
- Si es detecta '''B''' a '''bFL''' llavors el motor de l'esquerra tindrà un cicle de treball del 100% cap endavant. Si es detecta '''B''' a '''bFR''' llavors el motor de la dreta tindrà un cicle de treball del 100% cap endavant.
  
Anomenem l'execució del codi com a ''procesUnic'':
+
- Si es detecta '''B''' a '''bL''' llavors el motor de l'esquerra tindrà un cicle de treball del 50% cap enrere. Si es detecta '''B''' a '''bR''' llavors el motor de la dreta tindrà un cicle de treball del 50% cap enrere.
bash -c "exec -a procesUnic /usr/bin/python3 /home/pi/code/robot/robot_01.py"
 
 
 
I per a matar el procés pel nom ''procesUnic'':
 
pkill -f procesUnic
 
 
 
''robot_01.py'' és l'encarregat de comunicar el maquinari i el NodeRED. Per tant, quan no està en marxa no hi ha comunicació entre el maquinari i el NodeRED.
 
 
 
=== Recepció de les dades dels sensors ===
 
Objecte JSON amb les dades del sensor:
 
[[Image:JsonSensors01.png|center|JsonSensors01.png]]
 
 
 
'''us''': distància en centímetres del sensor d'ultrasons.
 
 
 
'''bL''' i '''bR''': Sensors infrarojos (IR) darrere esquerre (''back left'') i darrere dret (''back right''). L'estat '''W''' és la detecció d'un color blanc (''white'') quan rebota el llum i l'estat '''B''' és la detecció d'una absorció de llum, normalment la detecció del color negre (''black'').
 
 
 
'''bFL''', '''bCL''', '''bCC''', '''bCR''' i '''bFR''': Sensors infarojos (IR) frontals (''far left'', ''center left'', ''center'', ''center right'' i ''far right''). L'estat '''W''' és la detecció d'un color blanc (''white'') quan rebota el llum i l'estat '''B''' és la detecció d'una absorció de llum, normalment la detecció del color negre (''black'').
 
 
 
'''button''': El botó entre els sensors ultarsònics i la Raspberry Pi. L'estat '''N''' és de no premut (''not pressed'') i '''P''' és premut (''pressed'').
 
 
 
 
 
Objecte JSON en format de cadena de caràcters:
 
[[Image:JsonSensors02.png|center|JsonSensors02.png]]
 
 
 
=== Transmissió de dades als actuadors ===
 
Es fa mitjançant un JSON amb els camps ''left'' i ''right'' que controlen les rodes de la dreta i les de l'esquerra. Els valors corresponen al cicle de treball (''duty cicle'') del sistema de modulació per amplada de pols (''PWM: Pulse Width Modulation''). Els valors entre -255 i 0 corresponen al 100% i 0% del cicle de treball amb els motors en marxa enrere, i els valors entre 0 i 255 corresponen al 0% i 100% del cicle de treball amb els motors en marxa endavant.
 
 
 
[[Image:ActuadorsRobot.png|center|ActuadorsRobot.png]]
 
 
 
En aquest exemple els motors de l'esquerra del robot van enrere amb un cicle de treball del 50% (el 100% és 255) i els motors de la dreta van endavant amb un cicle de treball del 50%:
 
 
 
{"left":-127,"right":127}
 
 
 
=== Activació dels actuadors en funció dels sensors ===
 
==== Exemple ====
 
Aquesta és la implementació d'un exemple amb aquest comportament:
 
 
 
- Quan es detecta '''B''' a '''bCC''' s'aturen els motors i quan es detecta '''W''' els dos motors van cap a endavant amb un cicle de treball del 50%.
 
 
 
[[Image:ExRobot_v6_01.png|center|ExRobot_v6_01.png]]
 
 
 
[https://binefa.cat/training/robot_v6/ExRobot_v6_01.nodered.txt Codi de NodeRED de l'exemple]
 
 
 
La funció '''Robot Brain''':
 
 
 
flow.set("bCC",msg.payload.ir.bCC);
 
if(msg.payload.ir.bCC == "B"){
 
    flow.set("left",0);
 
    flow.set("right",0);   
 
    msg.payload = {"left":0,"right":0};
 
}else{
 
    flow.set("left",127);
 
    flow.set("right",127);   
 
    msg.payload = {"left":127,"right":127};
 
}
 
return msg;
 
 
 
==== Exercicis ====
 
0)
 
 
 
- Quan es detecta '''B''' a '''bCC''' s'aturen tots els motors
 
 
 
- Quan es detecta '''B''' a '''bCL''' el motor de l'esquerra tindrà un cicle de treball del 50% cap endavant. Si es detecta '''B''' a '''bCR''' el motor de la dreta tindrà un cicle de treball del 50% cap endavant.
 
 
 
- Quan es detecta '''B''' a '''bFL''' el motor de l'esquerra tindrà un cicle de treball del 100% cap endavant. Si es detecta '''B''' a '''bFR''' el motor de la dreta tindrà un cicle de treball del 100% cap endavant.
 
 
 
- Quan es detecta '''B''' a '''bL''' el motor de l'esquerra tindrà un cicle de treball del 50% cap enrere. Si es detecta '''B''' a '''bR''' el motor de la dreta tindrà un cicle de treball del 50% cap enrere.
 
  
 
El criteri per evitar paradoxes (fer dues coses contràries a l'hora) és que la prioritat sigui sempre la condició superior a la llista.
 
El criteri per evitar paradoxes (fer dues coses contràries a l'hora) és que la prioritat sigui sempre la condició superior a la llista.
Línia 105: Línia 35:
 
1) Feu que el robot vagi cap endavant fins que detecti un obstacle (per exemple una paret) a 10 cm de distància. Caldrà posar una histèresi per a evitar una oscil·lació. Si la distància és superior a 12 cm el robot haurà d'avançar, entre 10cm i 12 cm haurà d'estar aturat i si detecta menys de 10cm haurà d'anar cap enrere.
 
1) Feu que el robot vagi cap endavant fins que detecti un obstacle (per exemple una paret) a 10 cm de distància. Caldrà posar una histèresi per a evitar una oscil·lació. Si la distància és superior a 12 cm el robot haurà d'avançar, entre 10cm i 12 cm haurà d'estar aturat i si detecta menys de 10cm haurà d'anar cap enrere.
  
2) Implementeu un AGV (''automated Guided Vehicle''') capaç de seguir una línia negra (cinta aïllant al terra), sense revolts molt pronunciats.
+
2) Implementeu un AGV (''Automated Guided Vehicle''') capaç de seguir una línia negra (cinta aïllant al terra), sense revolts molt pronunciats. [https://youtu.be/je3OM16BCS4 Exemple d'AGV]
  
3) Feu que el vostre robot sigui capaç de treure una capsa de sabates d'un tatami de sumo. El tatami és de color blanc amb una frontera en forma de cercle de color negre. Haureu de fer que el robot comenci a cercar un obstacle (la capsa) després de cinc segons d'haver deixat de prémer el botó que està darrera dels sensors ultrasònics. Quan es detecti l'obstacle (la capsa), s'ha de fer fora del tatami. El robot no pot sortir completament de la frontera de color negre.  
+
3) Feu que el vostre robot sigui capaç de treure un objecte (per exemple una capsa de sabates) d'una zona circular (semblant a un tatami de sumo). La zona circular és de color blanc amb una frontera en forma de cercle de color negre. Haureu de fer que el robot comenci a cercar un obstacle (la capsa) després de cinc segons d'haver deixat de prémer el botó que està darrera dels sensors ultrasònics. Quan es detecti l'obstacle (la capsa), s'ha de fer fora del cercle. El robot no pot sortir completament de la frontera de color negre.
  
4) Implementeu un AGV (''automated Guided Vehicle''') capaç de seguir una línia negra (cinta aïllant al terra) amb revolts molt pronunciats.
+
4) Implementeu un AGV (''Automated Guided Vehicle''') capaç de seguir una línia negra (cinta aïllant al terra) amb revolts molt pronunciats.
  
5) Implementeu un AGV (''automated Guided Vehicle''') fent servir un PID.
+
5) Implementeu un AGV (''Automated Guided Vehicle''') fent servir un PID (''Proportional–Integral–Derivative controller'').

Revisió de 15:02, 21 feb 2020

Robot

Aquesta és la sisena versió del robot educatiu dissenyat conjuntament per Edco i els professors Carles Olivé i Jordi Binefa de l'Escola del Clot - Jesuïtes El Clot.

Aquest robot està pensat per a funcionar amb un Arduino Nano o una Raspberry Pi Zero W.

La darrera versió dels codis per a fer-lo funcionar són al dipòsit d'Arduino i al dipòsit de la Raspberry Pi, realitzats per Fran Mesas.

Robot v6

Connexions i esquema electrònic del robot versió 6

Control fent servir un Arduino Nano

La darrera versió dels codis per a fer-lo funcionar són al dipòsit d'Arduino d'Edco desenvolupat per en Fran Mesas.

Control fent servir una Raspberry Pi Zero W

Control des del NodeRED i MQTT fent servir una Raspberry Pi Zero W

Control del robot des de Snap i sòcols web fent servir una Raspberry Pi Zero W

Exercicis

0) Programeu en NodeRED la següent lògica:

- Si es detecta B a bCC llavors s'aturen tots els motors

- Si es detecta B a bCL llavors el motor de l'esquerra tindrà un cicle de treball del 50% cap endavant. Si es detecta B a bCR llavors el motor de la dreta tindrà un cicle de treball del 50% cap endavant.

- Si es detecta B a bFL llavors el motor de l'esquerra tindrà un cicle de treball del 100% cap endavant. Si es detecta B a bFR llavors el motor de la dreta tindrà un cicle de treball del 100% cap endavant.

- Si es detecta B a bL llavors el motor de l'esquerra tindrà un cicle de treball del 50% cap enrere. Si es detecta B a bR llavors el motor de la dreta tindrà un cicle de treball del 50% cap enrere.

El criteri per evitar paradoxes (fer dues coses contràries a l'hora) és que la prioritat sigui sempre la condició superior a la llista.

Farem servir variables de flux per a determinar la velocitat i sentit dels motors.

1) Feu que el robot vagi cap endavant fins que detecti un obstacle (per exemple una paret) a 10 cm de distància. Caldrà posar una histèresi per a evitar una oscil·lació. Si la distància és superior a 12 cm el robot haurà d'avançar, entre 10cm i 12 cm haurà d'estar aturat i si detecta menys de 10cm haurà d'anar cap enrere.

2) Implementeu un AGV (Automated Guided Vehicle') capaç de seguir una línia negra (cinta aïllant al terra), sense revolts molt pronunciats. Exemple d'AGV

3) Feu que el vostre robot sigui capaç de treure un objecte (per exemple una capsa de sabates) d'una zona circular (semblant a un tatami de sumo). La zona circular és de color blanc amb una frontera en forma de cercle de color negre. Haureu de fer que el robot comenci a cercar un obstacle (la capsa) després de cinc segons d'haver deixat de prémer el botó que està darrera dels sensors ultrasònics. Quan es detecti l'obstacle (la capsa), s'ha de fer fora del cercle. El robot no pot sortir completament de la frontera de color negre.

4) Implementeu un AGV (Automated Guided Vehicle') capaç de seguir una línia negra (cinta aïllant al terra) amb revolts molt pronunciats.

5) Implementeu un AGV (Automated Guided Vehicle') fent servir un PID (Proportional–Integral–Derivative controller).