Sumo Plus
Contenido
Introducción
Los robots de Sumo son desarrollos bastante accesibles para personas que se empiezan a incorporar al tema de la robótica, es un acercamiento muy interesante para los jóvenes, además de que al poderse competir permite que las habilidades se vallan perfeccionando y uno puede darle tanto en calidad de software como de hardware que uno quiera. Posiblemente sea de las plataformas más entretenidas para los jóvenes y algunos adultos, ya que les da la posibilidad de comparar su desarrollo directamente con otros.
La elección del proyecto surge de una tormenta de ideas donde se procuro aprovechar al máximo la capacidad instalada de la placa Butiá a la vez de procurar la integración con otros dispositivos y sensores de manera de enriquecer la experiencia del desarrollo, procurando dejar una puerta abierta para otros posibles desarrollos e integraciones.
Dada la orientación que se le termino dando al proyecto, se considera recomendable para personas de ciclo básico, ya que si bien se puede desarrollar la parte básica enteramente en TurtleBots, quedan algunos conceptos (como la modularización, el manejo de variables,etc) que no son recomendables para edades más tempranas.
Ademas se considera importante el trato de una serie de ejemplos de integración y manejo de archivos que sin duda serian mejor aprovechados por jóvenes que despierten cierto interés en el desarrollo.
Datos Generales
Repositorio Git | Repositorio |
Contacto - Sugerencias | mario12111988@gmail.com |
Entorno de Desarrollo | UBUNTU 16.04 |
Versión ARDUINO IDE | 1.8.13 |
Version TurtleBots | turtlebots_32_all.deb Instalar con udo dpkg -i turtlebots_32_all.deb |
Version PYTHON | 2.17 |
MATERIALES | KIT ROBOTICO EDUCATIVO BUTIA 2.0 |
CAJA DE SENSORES | |
Placa ARDUINO | ARDUINO UNO R3 |
HardWare | HP-Pavilion-dv6 con Procesador AMD 64 Bits |
Especificación del entorno de Desarrollo
Instalacion Arduino AMD 64 Bits
Descargar de la pagina de ARDUINO y de la carpeta de descargas descomprimir y realizar en terminal la seleccionar el siguiente comando
cuando estamos ubicados en la carpeta descargas.
$cd arduino-1.8.13/ $[ls-l] $./arduino-linux-setup.sh Run the script with command ./arduino-linux-setup.sh $USER $./arduino-linux-setup.sh $USER
Actividades Propuestas
Ejemplo:
La idea es teniendo la implementacion básica ya cargada los alumnos realicen las modificaciones sobre la estructura que consideren adecuadas para mejorar el desempeño, seria recomendable la agrupación en equipos de forma de que entre ellos puedan complementarse ademas de que tengan mas de un kit por equipo o sensores y motores extra de forma de mejorar los diseños. Las idea es que en las primeras clase ya se tenga un modelo armado y funcional y después ellos lo vallan adaptando a medida que la competición avanza.
También seria recomendable darles algunas nociones sobre como dividir el trabajo, como ir guardando ir guardando las diversas versiones de software, la documentación del mismo proyecto, etc.
Puede opcionalmente presentarse un proyecto final en conjunto, con alguna funcionalidad distinta al Sumo,aprovechando la posibilidad de modificar fácilmente el software.
Implementación
Planteo Básico
El planteo básico, orientado a estudiantes de Liceo, busca incluir el uso de las herramientas de desarrollo
para que los estudiantes puedan darle el aire que consideren mas adecuado. En esta etapa se ven tres grandes
focos que son :
Por un lado la calibración de los distintos sensores para ayudar a interpretar su medición y como ellos las lecturas
que los mismos toman varían por condiciones del medio.
Por otra parte el diseño y la solución de problemas de hardware, ya sea la creación de nuevas piezas como la parrilla
para empujar o la ubicación de los soportes para sensores.
Finalmente el diseño del software, las decisiones de diseño que se tomaron y una pequeña explicación que permita que
aquellos interesados puedan modificar el código para usos distintos al ya especificado.
Actividades introductorias
Dentro de las actividades introductorias una primer tarea que resultara interesante es encargar a los alumnos a que resuelvan en el TurtleBots que la tortuga no salga del circulo area de prueba, de forma que ellos puedan ir entendiendo algunos aspectos del problema. Es muy importante la participación en grupos. En el directorio del proyecto ya se encuentra un modelo de Plataforma con un un ejemplo de resolucion.
Calibración de Sensores
Se recomienda ver el siguiente documento para profundizar el conocimiento sobre los sensores de distancia y de variación de color:
Archivo:MARIO IBANEZ 48008660 TALLER DE ROBOTICA LABORATORIO 1.pdf
Después de haber realizado un análisis sobre el comportamiento de los sensores se concluyo que las variaciones de luz ambiente generaban efecto
sobre las lecturas, es decir, el robot tenia un comportamiento distinto si el área de juego disponía de luz ambiente o no, posteriormente también
se comprobó que las sobras que la misma silueta del robot proyectaba lo inducían a error, con lo cual la dificultad del proyecto escalo si se quería
poder utilizar en cualquier ambiente que tuviera un pista delimitada sobre una superficie.
La solución que se opto fue una mezcla de manualidades y programación.
El primer problema se detecto desde la calibración de los sensores, al enfrentar variaciones de luz los sensores no estaban identificando bien cuando
el robot salia de la pista y cuando estaba adentro, lo que ocasionaba que se saliera o que quedara dando vueltas. Para remediar esto se decidió
ingresar un paso previo a la ejecución del programa principal que lo que hacia es tomar 100 lecturas con cada uno de los tres sensores y guardar el mínimo
con lo cual al encontrar una linea blanca el valor contrastaría claramente con el suelo y el robot optaría por volver y dar la vuelta.
Adicionalmente se agrego una tolerancia, la cual es variable, que permitía dar espacio para mejoras en la calibración. De esta forma conseguimos
aprovechar el tiempo del arranque de las partidas de sumo.
El siguiente paso fue adaptar la parrilla, la cual permitía el traspaso de la luz por los costados cuando la luz provenía de un ventanal o similar,
lo que ocasionaba que el butia al encontrase enfrentando el ventanal o dándole la espalda generara sombra sobre los sensores y dificultara la medición.
Se opto por poner dos paletas laterales que evitaran que la luz bajo el robot cambiara abruptamente. Debe de tenerse en cuenta que en las partidas de sumo
profesional los robots casi estan adheridos al piso, con lo cual los sensores no reciben cambios en la sombra que el robot proyecta.
En el caso de los sensores de distancia no se encontraron mayores problemas con la luz ambiente, por lo cual se mantuvo con la primera versión ajustada
a unos 55000 en el valor minimo de recepcion, ya menos de eso ( aproximadamente 25 cm) se interpretaría que el oponente esta en frente y el robot arremeteria
contra él.
Diseño de la Parrilla y Distribución de Sensores
La parrilla es un diseño de forma simple, básicamente es un rectángulo de 28 cm por 8 cm de alto, que cuenta en su parte central con una abertura de 7 cm por 4cm para que el sensor de distancia pueda sobresalir. Es importante que el sensor de distancia no haga contacto con los bordes porque de lo contrario la lectura puede verse afectada. Para mejorar la resistencia se agregaron varias capas de carton , de forma de dar robuztes y siempre evitando el contacto con el suelo.
con el suelo.
Posteriormente se agregaron dos aletas laterales para impedir la entrada de luz. Se puede agregar algún tipo de decoración o modificar el diseño, no obstante no vamos a ahondar en este tema. Los materiales también son variables.
Es muy importante que la parrilla no roce contra el suelo, impidiendo el avance del Robot.
Para la distribución de los sensores se opto por dos sensores frontales, izquierdo y derecho ubicados a la misma altura, ademas de un sensor
trasero, también de variación de color del suelo, para medir si se esta saliendo del área de juego.
En la practica con los dos primeros ha sido suficiente, ya que el oponente al que se ha enfrentado no puede empujar a nuestro robot fuera de la pista y al ser una pista circular (una vez calibrado el retroceso máximo ). De todas formas frente a un oponente real siempre es importante evitar que nuesto robot sea empujado en un anguno que no le permita darse cuenta de que va a ser sacado de la pista
Explicación General del Software
Para el desarrollo del software partimos de la base de una serie de pruebas realizadas en el TurtleBots, como en realidad queríamos resolver una buena cantidad de casos y utilizar al máximo nuestros sensores nativos optamos por pasarnos a programar en Python, con lo cual se marca también el perfil de estudiante liceal, con un pensamiento conceptual mas avanzado, lo que no quita que el montaje no deba de aprovecharse para algún proyecto de primaria, ya que incentivar a la creatividad es parte del fin de este proyecto.
Como optamos por usar Python decidimos modelar un ejemplo de programa que los jóvenes pudieran cargar en sus respectivos equipos y empezar a jugar, dicho programa tiene toda la documentación pertinente, por lo cual hacer modificaciones y adaptarlo a las necesidades concretas de las personas que lo utilicen no debería ser una complicación.
Nuestro Programa consiste de Cuatro Modulos:
Principal: Ecargado de las ejecución acciones sobre los motores, inicializacion de las variables necesarias.
lectorPuertosJson: encargado de toda la comunicación con ARDUINO, que por motivos de comodidad se ha dejado activado, pero que perfectamente se puede dejar grabado en el código valores por defecto para operar sin tener esta placa.
arbolDeDecision': Es el que proporciona la inteligencia al butia, si bien el modulo Principal puede tomar alguna serie de decisiones por su cuenta ( mas que nada cuando se encuentra realizando una acción y los sensores cambian abruptamente ) el árbol de decisiones es el que establece todas las decisiones generales para elegir los movimientos correctos según sean los registros que vienen del butia.
utils: Son unsa serie de funcionalidades para el desarrollo, logs y demás, que se han ido dejando presentes hasta su salida a producción.
Planteo Avanzado
Comentarios Preliminares
En esta parte, que es opcional, la idea es trabajar muy de cerca con el alumno, porque la posibilidad de atascarse, en si ya le estamos dando un modelo ya armado, por lo cual al replicarlo no debería tener mayores problemas. La idea es que ya dispone con una plataforma que puede reciclar para hacer otro tipo de proyectos por ejemplo revirtiendo algunas variables puede armar un robot que se desplaze esquivando obstáculos, o que siga un determinado recorrido establecido de antemano. Al tener la integración con ARDUINO adaptando el modulo Principal y el árbol de decisiones puede integrar nuevos sensores o utilizar los ya existentes. El en repositorio ya se encuentra disponible una programa para cargar en la tarjeta de arduino y que este presente los datos mediante un formato Pre-establecido.
Mejoras en la programación
Desde el inicio de la puesta en practica se encontraron diversos problemas , los cuales mediante mejoras en la programación lograron resolverse. Dos de los mas importantes fueron: en la ejecución de el árbol de decisiones el robot quedaba trancado en un rincón, retrocedía y volvía al mismo lugar, la solución que implementamos es poner las variables de giro y retroceso no como fijas, sino como levemente aleatorias, permitiendo que el robot no se trabe, aunque con una mejor calibración se hubiera obtenido un muy buen resultado.
La incorporación del control remoto acarreo diversos problemas , debido a que es necesario apuntar directamente al sensor y este a veces recibe algo así como el mismo numero concatenado, por lo cual no toma la accion correcta. Esto se esta solucionando aún, ya que el problema persiste pero se limita a menos casos.
Integración con Arduino mediante Python
Librerias Necesarias |
serial |
simplejson |
Para aquellos interesados en profundizar sobre el tema se les recomienda ver Referencia Integración
Al momento de elegir la forma en la que íbamos a incorporar la informacion de los sensores de Arduino manejamos dos posibilidades, por un lado usar el código de
ejemplo Firmata que viene disponible en el IDE de ARDUINO o usar la comunicación serial a la implementacion de JSON, un
formato
de texto que podíamos usar para leer datos de los sensores.
Si bien Firmata proporcionaba multiples ventajas como el poder leer los pines a demanda, tener continuidad en los datos (en el caso de ARDUINO puede fallar el primer dato o algún dato en particular) y no necesitar de hacer una programación especifica en ARDUINO optamos por decidir el uso de la comunicación serial por un tema
de adecuación a los tiempos y conocimiento previo.
El modulo lectorPuertosJson.py tiene la informacion disponible sobre la comunicación.
Propuestas a Futuro
Las ideas a futuro son esencialmente dos:
Por un lado mejoras Generales como en el software dando una pequeña interfaz gráfica para el ingreso de variables y el registro de los movimientos del robot de manera más amigable que un txt, de forma de brindar a los alumnos una plataforma para calibrar los sensores y poder registrar en tiempo real cambios en los parámetros con los que el robot se maneja.
Anexo a lo anterior se plantea una mejora con la incorporación de un modulo de acciones estándar (escaneo del área de juego, generación de mapa con obstáculos) y algunos ejemplos pre-configurados que le brinden la posibilidad de contar con herramientas más potentes de las cuales servirse y que a su vez ellos mismos puedan modificar y generar nuevos módulos.
Como complemento a este punto de mejora general se buscaría cambiar la caja de sensores por la integración con alguna otra placa más orientada a la educación con mas sensores incorporados, de forma de que no caiga tan pesada esta parte, un ejemplo muy probable seria la placa MicroBit ya que esta se ha integrado al plan Ceibal, lo que facilita la implementación. La Microbit cuenta con su propio Giroscopio, el cual podemos utilizar como mando remoto de control.
La segunda idea, sobre la cual ya se había venido trabajando en diversas oportunidades, es incorporar funcionalidades de las librerías OpenCV, de forma que los alumnos puedan utilizar funcionalidades como reconocimiento de objetos, seguimiento de personas y demás ya incorporadas al proyecto. En la practica surgieron algunos problemas de implementación, lo que seguramente se hubiera solucionado de haber contado con más tiempo trabajando con Python , por lo cual es un punto interesante a retomar. La documentación con la cual se trabajo este punto se encuentra en el siguiente link
Documentación Proyecto
Videos explicativos
Paso a paso con Fotos y explicaciones
Como uno de los objetivos es dejar material disponible para estudiantes hemos puesto un repositorio Git donde dejamos disponibilizada toda la informacion para los estudiantes, incluido los diseños de la placa de sensores. Se decidió documentar el entorno en el que estamos probando, ya que hemos tenido problemas con UBUNTU 20.04 Y 18.04, mas que nada con el TurtleBots y la instalación. Se agregaron diversas librerías OpenCV para un proyecto paralelos.
En la primera oportunidad lo que se realizo fue la calibración de los sensores, para posteriormente montar el robot con los sensores frontales empezar a realizar las primeras pruebas, las que consistían básicamente en alcanzar en linea recta e identificar la linea blanca
y detenerse al llegar.
Paralelamente realizamos la implementación de la placa de sensores, en las primeras etapas probamos la conexión del sensor de ultrasonido y lo que reportaba al puerto serial. Es importante que el receptor y el emisor no solo "escuche" el mismo puerto serial, sino que ademas ese puerto serial este sintonizado a la misma frecuencia.
El siguiente paso fue colocar el sensor de variación de color en la parte posterior del Butiá para que reciba cuando retrocede o es empujado avance y evite salir del área de juego.
El diseño de la caja de sensores tenia que proveer espacio suficiente para infrarrojos, luz, giroscopio, leds indicativos y demás. En lo que respecta al cableado, si bien en el principio usábamos cables sueltos pasamos a usar conexiones directas para ahorrar espacio, aprovechando que la corriente es de solo 5V , lo que no es peligroso de manipular.
Se procuro usar una ARDUINO NANO, que es mas pequeña pero se tuvieron problemas con el soldador y se tuvo que descartar, por lo cual conservamos el diseño original con ARDUINO UNO.
A medida que se avanza en la programación se decidió llevar un archivo de Log donde ir registrando los valores de sensores y usarlo de insumo para mejoras en la calibración, originalmente se tenia un programa de TurtleBots con el que íbamos midiendo los resultados, lo que resulto poco practico y se descarto. Este ultimo archivo y otras pruebas quedaron registrados en la carpeta TEST del repositorio. Los registros de comunicación con Arduino y los registros de todos los sensores se almacenan en los archivos "Cajas Negras"
La parrilla,una de las piezas que sufrió mas modificaciones se realizo utilizando cartón, capa triple pegada con silicona,posteriormente se le incorporo aletas laterales para evitar que se filtrara luz por los lados. Posteriormente se le recubrió con cinta negra para darle un toque mas prolijo. El material de la parrilla puede variar, en su momento se pensó en un diseño 3D pero encontramos que seria demasiado costosa.
Respecto al comportamiento del robot se decidió que lo mas apropiado fuera que al llegar a la línea se diera reversa y después se girara en un angulo variable hacia derecha o izquierda, esto era para evitar que el robot solo se moviera sobre la linea o quedara trancado avanzando y retrocediendo en la misma parte del campo de juego.
Ya con un diseño mas estable se decidió empezar a realizar las pruebas en terrenos de juego cuadrados y circulares, sin oponente, para comprobar que funciona adecuadamente. En lo que respecta a las pruebas consistían en ver cuanto tiempo aguantaba sin salirse de la pista, ya con 5 minutos se dio por completada la prueba.
Inmediatamente empezamos a hacer pruebas con un oponente testing, buscando simular el comportamiento al encontrarse otro objeto en el terreno de juego, en los primeros intentos se empujaba y salia de la pista, para arreglarlo se "dividió" la ejecución del avance en pequeñas ejecuciones , entre las cuales el robot volvía a censar el suelo. A partir de aquí se decidió implementar el mismo método en las demás acciones.
El siguiente paso fue incorporar un sensor infrarrojos y adaptar un control para poder controlar el Butiá desde el mismo, las pruebas fueron exitosas una vez se identifico cada uno de los mensajes que se enviaban mediante el control.
Adicionalmente se podía intercambiar entre el modo "Play Butiá" y el control manual del Robot.
Listado de Materiales
Soporte
Falla en las baterías
Usualmente cuando el Robot butia empieza a funcionar lento estamos ante una baja en las baterías, es recomendable, si se sabe que se va a
utilizar intensamente, cargar las baterías la tarde anterior. Generalmente las baterías brindan un voltaje en su conjunto de 9.6 V en teoría, pero al estar a
tope puede llegar en pruebas a 11 o mas, dependiendo de las baterías y el fabricante, cuando el voltaje llega a 9.6 el rendimiento comienza a verse afectado.
Se puede notar una lentitud en los motores y comienzan a andar sin fuerza. Los sensores no se ven afectados porque están alimentados por la PC.
Para detallar el consumo de Batería veamos el siguiente cuadro:
Podemos apreciar que la batería 7 ya esta llegando al final de su vida útil, por lo cual es conveniente quizás cambiarla. De todas formas
el rendimiento solo se vio afectado al final de la jornada, por lo cual tampoco es nada critico.
Peso Excesivo
Falla en el Sensor de Distancia
Esta falla se atestigua en que el sensor reporta datos muy variables y poco fiables, por ejemplo pasa de 28000 a 50000 en pocos segundos sin que
en el entorno exista algún objetivo nuevo. Posiblemente se deba a una presión sobre los cables ocasionado por la parrilla, la forma de solucionarlo
a sido retirar la parrilla, desconectar el sensor y el cable. Suele suceder que a veces el problema persiste, por lo cual se recomienda también
cambiar o rotar el sensor.
Problemas Conexión
Puntualmente en la implementacion realizada con Python nos ha pasado que el robot butia tarda algunas veces en ser reconocido, podemos notarlo
por ejemplo porque nuestra consola nos va a estar mostrando -1 en todos los sensores, por lo cual es conveniente como primera solución conectar
y desconectar el usb, usualmente después de 4 segundos el Robot retoma bien. Si no genera ningún movimiento a conectar el usb es que la batería
debe estar acabada, en este caso a pesar de que los sensores registren no ocurrirá ningún movimiento.
Precauciones
En la medida de lo posible evitar que los jovenes realizen cualquier tipo de soldadura, es recomendable para el docente que no se manipulen soldadores
y cutters. En cuanto al Voltaje, si perciben que las luces de los sensores se apagan o bajan la intensidad durante la instalación es posible que este
realizando corto, se recomienda ver lo planteado para sensores que fallan. También es recomendable no tener el Butia sobre una mesa al encenderlo
porque se desplaza unos centímetros al encenderse y se puede caer.
Falla Puertos Seriales Ocupados o Python no puede acceder a Butia
En el caso de que les aparezca que tal o cual programa no funciona porque el puerto esta ocupado usualmente se debe a que están dejando un puerto escuchando
la informacion y es imposible acceder a el, suele pasar lo mismo cuando quieren ejecutar un programa de python y tienen el TurtleBots ejecutando algo en
consola
Falla Butia no avanza frontalmente de forma pareja
Si bien Butia avanza con una pequeña desviación hacia la izquierda, puede darse el caso de que exista una desviación importante, usualmente puede deberse
a que la rueda no esta bien atornillada, o a que algo esta atascado en la rueda, en el caso puntual del sumo básico puede pasar que la parrilla de cartón
sea demasiado larga y rose con el suelo.
Falla en los Sensores
La falla de sensores se puede apreciar cuando uno de los mismos da un valor de -1,o alguna lectura que es claramente erronea. En el caso de los sensores
de color nos podemos dar cuenta porque la luz del led verde no prende. En los casos que en el desarrollo del proyecto se nos plantean han estado:
1- Cambiar los Cables
2- Cambiar el Sensor
3- Revisar la Placa y los puertos
Siempre es aconsejable rotar puertos y sensores cuando nos percatamos de que uno no funciona.
En caso los Sensores de color, si al presionar el led verde mientras esta conectado este enciende, con hacer una presión un poco
mayor el contacto deberia quedar bien, se puede medir con un tester en caso de disponer de uno.