lunes, 1 de junio de 2015

Holodeck

Necesito una sala de entrenamiento para probar estrategias con Ambrosio. Algo así como la Sala de Hologramas de Star Trek, el Holodeck.


Acabo de encontrar un sencillísimo simulador robótico que me va a ir de perlas para planear algoritmos de movimiento para Ambrosio. Se trata de RobotBASIC.

Fácilmente introduzco el área del jardín y empiezo a jugar con un Ambrosio virtual para simular formas de moverse y de reaccionar ante los obstáculos.
Este el el jardín desde arriba...

Este es el simulador RobotBASIC con una estrategia de movimiento describiendo ochos...

lunes, 11 de mayo de 2015

Welcome to reality

Las pruebas de campo con Ambrosio me han devuelto a la cruda realidad. Las dificultades en maniobrar, las irregularidades del terreno y la particular distribución del jardín hacen que el comportamiento en movimiento del robot no sea el esperado.

He probado dos estrategias de control automático: el movimiento caótico (eligiendo aleatoriamente entre seguir recto, girar a derecha o girar a izquierda) y el movimiento en espiral (describiendo círculos en forma parecida a las pulidoras de hielo en pistas de patinaje)

Las conclusiones son las siguientes:

  • Movimiento caótico: esta estrategia es muy ineficiente. El robot llega rápidamente a los límites del terreno y se queda mucho tiempo cortando la misma zona de forma que tarda mucho en salir de las esquinas. Requeriría muchísimo tiempo garantizar que pasa y repasa la zona central (que es la que más me interesa) y no tengo autonomía suficiente (sólo dispongo de unos 50 minutos de batería)
  • Movimiento en espiral: esta estrategia corta mejor la zona central pero no gestiona bien la forma como encara los obstáculos. Los círculos reales que describe Ambrosio son imperfectos, siempre distintos y, debido al movimiento circular, llega a los obstáculos en ángulos muy diversos por lo que la estrategia de 'rebote' a veces le deja encallado.
Aquí os dejo un video de Ambrosio trabajando...(video a velocidad x3):

domingo, 1 de febrero de 2015

Bienvenidos al norte


El mapa de medidas obtenidas con el magnetómetro al girar 360 grados el robot tiene una distribución descentrada. Está claro que los componentes del robot provocan distorsiones en las medidas.

Tenemos que calibrar el sensor corrigiendo las medidas mediante el siguiente cálculo:

    X = Xmedida * Xf + Xoff
    Y = Ymedida * Yf + Yoff

siendo
  Xf = 1  ó
  Xf = (Ymax - Ymin) / (Xmax - Xmin)  si el resultado es  >1
  Yf = 1  ó
  Yf = (Xmax - Xmin) / (Ymax - Ymin)  si el resultado es  >1

  Xoff = ((Xmax - Xmin)/2 - Xmax) * Xf
  Yoff = ((Ymax - Ymin)/2 - Ymax) * Yf
 

Ahora sí. Una vez compensadas las medidas, el cálculo del ángulo con respecto al norte magnético ya es más fiable y coincide razonablemente con lo que nos indica una brújula tradicional. ¡Bienvenidos al norte!
   

viernes, 30 de enero de 2015

He perdido el norte

Aprovechando el parón invernal, que no me permite continuar con las pruebas de campo, he aprovechado para explorar las posibilidades de los sensores de navegación.
Es increíble. Por menos de 10 € existen en el mercado módulos que incorporan distintos tipos de sensores junto con la electrónica necesaria para su control y comunicación.

Me compro uno con 9 grados de libertad (acelerómetro, giróscopo y magnetómetro) que admite alimentación a 5 V y puede comunicarse por protocolo I2C al igual que mis sensores de ultrasonidos. Se trata de un MPU-9250

Una vez lo tengo acoplado a mi robot, lo primero que intento hacer es probar el magnetómetro que incorpora (un AK8975) para usarlo como brújula. La teoría es muy simple, con las medidas obtenidas en los ejes X e Y podemos calcular fácilmente el ángulo respecto al Norte magnético terrestre:

Pero la realidad es siempre más complicada. Las medidas que obtengo son muy extrañas y encima descubro que donde tengo mi 'laboratorio' hasta una brújula tradicional hace 'cosas raras'.

jueves, 20 de noviembre de 2014

Como pollo sin cabeza

He encontrado el siguiente estudio sobre Chaotic Autonomous Mobile Robot for Military Missions en el que concluyen que se puede cubrir el total de la superficie mediante un algoritmo de movimiento aleatorio del robot. Así que me pongo manos a la obra para probarlo.
Mediante la nueva plataforma de desarrollo Android Studio programo una aplicación para mi móvil que me permita controlar el movimiento del robot usando la Android-BluetoothSPPLibrary y probar las distintas estrategias de recorrido. De momento tiene un par de pantallas que me permiten monitorizar la comunicación y controlar el robot. Tienen este aspecto:





domingo, 2 de noviembre de 2014

¡ Ambrosio ya ha pisado la hierba por primera vez !

Ambrosio ha pisado la hierba por primera vez. Aquí os dejo un video de cómo se desenvuelve en movimiento mientras completo los ajustes de posicionamiento y giros a las nuevas distancias.

sábado, 25 de octubre de 2014

¡Me encanta que los planes salgan bien!



Mediante la aplicación para Android Bluetooth SPP Pro podemos establecer comunicación con el robot y seleccionando el modo Keyboard podemos programar los botones para mandar las distintas órdenes que deberá obedecer.





miércoles, 15 de octubre de 2014

Eureka


¡Lo encontré!

Me estaba volviendo loco. Al ensamblar todo el conjunto el relé se quedaba siempre conectado. El pin 12 estaba siempre HIGH y no sabía ver porqué. 
Finalmente me he dado cuenta de mi error. En la documentación de la Proto Shield dice claramente que:

The ICSP connector available on the shield has his connections wired directly to the SPI pins of Arduino
MISO connected to D12

Y eso era. Para sacar los 5 V que necesitaba para el relé y el bus I2C de los sensores de ultrasonidos, me estaba apoyando justo en el acceso del conector ICSP que está al lado, el del pin 12.

¡Era yo el que lo estaba poniendo a HIGH por hardware!
En fin. Errare humanum est


martes, 7 de octubre de 2014

Recomponiendo el puzzle

El nuevo montaje del robot quedará como sigue:

Ya que necesito rehacer un nuevo circuito para el robot, me planteo utilizar una placa proto shield que se acople al Arduino Uno y así lo tendré todo ensamblado de forma más compacta. Elijo una básica (PCB Proto Shield UNO for Arduino de Microbot) y le iré incorporando los componentes que me interesen.


jueves, 2 de octubre de 2014

Nuevo impulso

Pensando en la incorporación del control remoto por Bluetooth y en volver a la idea inicial de montar una cortadora manual de césped al robot, le doy un nuevo impulso al proyecto.

Ahora podré controlar el encendido y apagado remoto de la cortadora. Para ello necesitaré acoplar un relé al Arduino. El circuito a montar será el siguiente:

Y he encontrado un relé que tenía por ahí que me podrá valer 
  










Y, buscando, buscando, he encontrado en la web una cortadora manual baratita que me va a venir fenomenal para trastear con ella (de marca desconocida originaria de Polonia, parece ser)


lunes, 22 de septiembre de 2014

Problemas de comunicación

¡Vaya! Como siempre, todo es más difícil de lo esperado. No consigo comunicar con el Seeedstudio Bluetooth Shield. Sigo todos los pasos que vienen en los ejemplos que publican en su web y no hay forma.


Después de leerme todos los foros y probar combinaciones de todo tipo descubro el gazapo.

Deberemos colocar los jumpers
del siguiente modo:
Pin 2 - BT_TX
Pin 3 - BT_RX
El truco está en poner los jumpers que permiten seleccionar los pines de transmisión y recepción justo al revés de lo que parece.

Si en el código para Arduino queremos establecer los pines del siguiente modo:
#include <SoftwareSerial.h>

#define RxD 2
#define TxD 3

SoftwareSerial BTSerial(RxD,TxD);


Si todo está correcto, al subir el código Arduino de ejemplo, el Seeedstudio Bluetooth Shield se quedará esperando conexiones indicándolo con el parpadeo de las dos luces (verde y roja):

jueves, 18 de septiembre de 2014

Cantidubidubidubi

El robot no sabe moverse él solito por todo el jardín así que habrá que darle indicaciones como hacían los niños con el monstruo Luis Ricardo en aquel programa infantil de finales de los 70.


Para comunicarnos con él a distancias de unos pocos metros y con visibilidad directa pienso que lo más fácil será utilizar el protocolo inalámbrico Bluetooth usando el móvil como 'mando' (descarto WiFi por ser más caro, ZigBee a pesar de ser el más adecuado para consumir poca batería requiere circuitería adicional para el mando, al igual que la clásica comunicación por radiofrecuencia RF a 433 MHz



Elijo el Seeedstudio Bluetooth Shield y con una sola compra lo tendré todo listo para disponer de comunicación inalámbrica bidireccional.

Por cierto, este shield se vende desmontado y hay que soldar todos los conectores a la placa.


lunes, 15 de septiembre de 2014

Hava Nagila

¡Alegraos! Después de unos años de silencio he vuelto a la carga.

La imposibilidad de solucionar de forma fácil que el robot recorriera el jardín de forma autónoma y las dificultades en acoplarle un sencillo mecanismo de corte detuvieron en seco el proyecto.

Pero un inesperado suceso me brinda la oportunidad de retomarlo. No sé hasta dónde llegaré esta vez pero lo importante es el camino...y lo iré anotando todo aquí.

De momento, os pego una escena de una de mis películas preferidas que le viene al pelo a este momento histórico:



jueves, 14 de junio de 2012

Video de recorrido

Acabo de encontrar este video promocional del próximo robot cortacésped de Bosch, el Indego.
Se trata de un robot que detecta el contorno de la superficie a recorrer mediante hilo perimetral; en el video se centran en comparar dos estrategias de recorrido en entornos ideales: la aleatoria frente a la de zig-zag.
Aquí os lo dejo. Es muy ilustrativo de los problemas que estoy enfrentando.
  

viernes, 1 de junio de 2012

Cambio de estrategia

El algoritmo de recorrido se complica.

El problema básico es la dificultad en detectar el contorno de la superficie a recorrer.
Tengo demasiados tipos de obstáculos distintos que delimitan el borde; tengo paredes, tengo plantas en la valla, tengo un árbol con su alcorque y además tengo un escalón. El escalón, para más inri, obliga a un giro a derechas cuando la estrategia de giros es siempre hacia la izquierda.

Un caos para el pobre robot de sólo tres sensores.
Por eso algunos robots comerciales requieren de un hilo perimetral para posicionarse.

En fin, cambiaré de estrategia y usaré sólo los sensores para evitar obstáculos imprevistos y el recorrido tendrá que ir 'pregrabado' de algún modo.

viernes, 17 de febrero de 2012

El ojo tuno

Para evitar que el robot se caiga por los escalones voy a tener que añadirle al montaje un sensor adicional para 'mirar' el suelo. Vamos, que voy a tener que instalarle un 'ojo tuno'.


El sensor sólo deberá mirar que haya suelo bajo el robot. Decido utilizar un sensor de proximidad por infrarrojos, que será más asequible que los de ultrasonidos y además el rango de distancias a medir es más cortito.


El Sharp GP2D120 tiene un rango de medida de 4 a 30 centímetros. Yo creo que servirá.
Lo colocaré en la parte delantera, enfocando al suelo y midiendo cada vez que se mire si hay obstáculos delanteros. Si la distancia al suelo aumenta por encima de un umbral consideraré que hay obstáculo y haré que el robot reaccione deteniendo el avance y forzando una maniobra de giro.

martes, 7 de febrero de 2012

Estrategia del caracol

Los giros serán maniobras sucesivas de alejamiento y aproximación al obstáculo en ángulos de unos 8 o 10 grados.
En el vídeo de la entrada anterior se puede ver cómo se enfrenta el robot a un obstáculo:
  1. Detecta el obstáculo mediante el sensor frontal.
  2. Lo intenta esquivar con una primera maniobra.
  3. El sensor frontal sigue detectando el obstáculo por lo que realiza otra maniobra.
  4. Un vez superados los 15 grados, el sensor frontal deja de detectar el obtáculo (ver diagrama de sensibilidad del sensor )  El sensor lateral todavía está lejos por lo que se reanuda el avance.
  5. El sensor lateral detecta el obstáculo. Realiza otra maniobra.
  6. En el siguiente avance, el sensor lateral vuelve a detectar el obstáculo y repite la maniobra hasta que supera el obstáculo.


El recorrido óptimo para economizar en los giros y no hacer pasadas innecesarias es el recorrido en espiral.

Voy a intentar implementar un algoritmo que detecte el contorno de la zona a recorrer y luego lo recorra en espiral. Mi área de trabajo no será tan compleja como la del dibujo así que no me complicaré en exceso. 

martes, 17 de enero de 2012

Problemas de vista


A pesar de la precisión de los sensores de ultrasonidos SRF08 de Devantech, la posición de los mismos en el robot hace que el alcance real sea limitado. De los teóricos 6 metros de alcance, pasamos a unos 50 cm por el efecto de la cercanía del suelo. Y no tiene sentido levantarlos más porque entonces no vería los obstáculos en su trayectoria.

En fin, el robot no es capaz de ver los límites del área a recorrer por lo que la estrategia de recorrido deberá cambiar de forma radical. ¡Ah! Y además tenemos el problema añadido de no disponer de un 'ojo' mirando al suelo para detectar escaleras, ¡claro!

Todo esto me recuerda la famosa escena de El Jovencito Frankestein con el ciego...