Robot Reflexivo o Reactivo

FunCostaRica
4 min readApr 28, 2017

Una forma de hacer que los robots funcionen de manera natural, es hacer que sus acciones sean simplemente un reflejo o reacción de lo que perciben. Sabemos que esto funciona, pues los seres vivos funcionan de esa manera. Nosotros, por ejemplo, no tenemos que estar conscientes de muchas de nuestras acciones, pues actúan de manera refleja, así si corremos, de forma automática el corazón palpita más fuerte, como un reflejo de la necesidad acelerada de oxigenar la sangre.

Bajo esta idea, muchas de las acciones de movimiento de un robot, no necesitan planearse, sino simplemente que sean reactivas, y el robot tiene autonomía gracias a un conjunto de acciones reflejas basado en percepción del medio, y de la condición interna del robot.

El robot percibe, y reacciona como una función de lo que percibe. El robot puede tener un conjunto de reacciones acciones de este tipo, y su comportamiento es el resultado de combinaciones.

Hagamos un ejemplo de un robot que reaccione a la cantidad de luz presente en el medio, para entender como funcionan los robots de manera refleja.

Reaccionando a la luz

Programemos el RobotKit para que llegue a la luz de manera refleja. Hay dos cosas que debemos considerara:

  1. Los movimientos son un resultado que es un reflejo de la cantidad de luz que incide en el sensor
  2. Cuando la luz sea alta, que le movimiento tienda a ser hacia adelante
  3. Cuando haya poca luz que tienda a pivotear de manera más frecuente
  4. El pivoteo tenga algo de aleatoriedad.

Direccionalidad

Para el primer punto, debemos leer la cantidad de luz con el sensor y almacenarla en una variable. La lectura del sensor es un valor de 0–1023 (10 bits). Si la cantidad de luz es alta, entonces la lectura se acerca a 0, y viceversa.

Para el punto 2, queremos que el robot se mueva hacia adelante más tiempo si hay más luz, para eso entonces, si la cantidad de luz es la variable val, entonces el tiempo de movimiento podría ser 1023-val, es decir, si hay mucha luz el tiempo de movimiento será alto, y si hay poca luz el tiempo de movimiento hacia adelante será bajo.

De la misma manera queremos que la potencia de movimiento cambie con la luz. Mientras menos luz exista, mayor será la actividad de los motores. Como ven hay una reacción positiva con la luz en términos de la dirección de movimiento, pero una reacción negativa en términos de la potencia de los motores.

Búsqueda de luz

La búsqueda de la luz ocurre como resultado del punto 3, es decir, el robot tiende a pivotear mucho cuando hay poca luz, y a moverse mucho más direccional cuando hay mas luz. El pivoteo permite que de manera aleatoria el robot quede en posición de alta luz como resultado de los giros, en ese momento el robot reacciona direccionalmente por lo que explicamos anteriormente.

En resúmen, si hay MUCHA luz:

  1. Mayor movimiento hacia adelante
  2. Menor potencia de motores
  3. Poco pivoteo

Si hay POCA luz:

  1. Mucho pivoteo por largo tiempo
  2. Movimiento direccional de poca duración

Código

Todo estas cosas están incluidas en el siguiente código (ejemplo RobotKit_ReflexLight):

#include <RobotKit.h>void setup() {
// put your setup code here, to run once:
setMotors();
setSensor(A0);
}
void loop() {
// put your main code here, to run repeatedly:
int val = readSensor(A0);
int pot = map(val,0,1023,0,255);
forward(pot, pot, 1023-val);// movimiento direccionado
pivotLeft(200,random(val)); //girar por tiempo aleatorio
}

En el código la línea,

int val = readSensor(A0);

lee el sensor de luz y almacena la información en la variable val. luego la línea,

int pot = map(val,0,1023,0,255);

lo que hace es cambiar las coordendas de un valor de 0 a 1023, a un valor de 0 a 255, y o almacena en la variable pot. Ahora las dos líneas que ejecutan la parte importante del algoritmo,

forward(pot, pot, 1023-val);// movimiento direccionado
pivotLeft(200,random(val)); //girar por tiempo aleatorio

Noten como la primera línea utiliza la potencia de la variable pot, y or un tiempo que es 1023-val, es decir mientras más oscuro menos tiempo se mueve hacia adelante. La segunda línea, noten como pivotea por el tiempo dado por la función random(val), es decir puede girar de forma aleatoria por un tiempo cualquiera entre 0 y val, y en promedo tiene mayor rotación a menor luz.

Retos

  • Agregue más sensores al robot, y construya más relaciones entre lo que percibe y comportamientos para mejorar la respuesta del robot.
  • servirá e algoritmo para que navegue por una ruta de luz?

--

--

FunCostaRica

Somos una fundación open source que promueve el desarrollo de una ciudadanía capás de construir sus propias soluciones tecnológicas y generar innovación