SAMSA III

Robot hexápodo avanzado.

  • Año: 2015
  • Categoría: Robótica
  • Cliente: Proyecto personal
  • Autor: Pablo Gindel
  • Tipo de intervención: Todo el producto

El SAMSA III es la continuación de la saga de los robots hexápodos, y es un proyecto que está en curso desde hace tiempo.

Cuando empecé a trabajar en una nueva versión del SAMSA, el plan era el siguiente:
– Colocar sensores de presión en las patas. Estos sensores se harían con un pequeño magneto y un sensor Hall ratiométrico, aprovechando el amortiguador de resorte ya existente, constituyendo un verdadero sensor de fuerza.
– Usar 18 motores Dynamixel AX-18A, que son más rápidos y con más torque que los anteriores AX-12+.
– Usar un microcontrolador de la familia mbed (ARM-Cortex-M), más potente, más chico y más barato que el Arduino.
– Re-escribir el código completamente desde 0, en C++, y que éste fuera “universal”, para cualquier tipo de robot con cualquier número y disposición de patas.

Llegado cierto punto del desarrollo, cuando ya se hacía necesario testear las nuevas rutinas, caí en la cuenta de que necesitaba una plataforma de pruebas más versátil que el propio robot físico: una simulación por software, que permitiera hacer todo tipo de pruebas, con total libertad, ágilmente, todas las veces que se quiera, visualizar el resultado con detalle, y no someter al hardware a un permanente stress, con el riesgo adicional de que se dañe alguna pieza por un error inesperado en la programación.

A partir de ahí, el proyecto se derivó en programar un buen simulador de robot hexápodo (o con n-patas). Empecé haciendo un prototipo rápido con Processing. La idea era conectar la salida de la tarjeta mbed que controla los motores, directamente a la PC, y que el programa simule el comportamiento de los motores y la estructura física. La primer versión de Processing se basaba en una simulación geométrica. Eso sirvió para probar a fondo la nueva cinemática inversa, pero al momento de intentar probar una caminata, por ejemplo, me encontré con un problema: el programa no podía saber exactamente qué patas estaban apoyadas en el piso y qué patas estaban levantadas en el aire; en consecuencia era imposible visualizar el desplazamiento del robot. Hacía falta una simulación física real, con detección de colisiones.

Luego de muchos meses de investigación, de probar montones de plataformas, lenguajes y softwares de simulación física y rendering 3D, llegué a una nueva versión de mi simulador, esta vez usando C++ (OpenFrameworks) y una de las mejores -y más difíciles de usar- bibliotecas de simulación física: Bullet Physics. Este simulador no es perfecto, pero a mí me dejó muy satisfecho, y cumple perfectamente con el cometido de visualizar caminatas.

El robot corre en una tarjeta Seeedstudio Arch Pro que es similar a la mbed original (LPC1768), con un procesador ARM-Cortex-M3. Utilizo un compilador offline, con la toolchain GCC ARM Embedded y el Visual Studio 2010 (antes usaba Eclipse, hasta que logré configurar el VS para este proyecto, no fue fácil). El simulador está hecho en C++, usando la biblioteca OpenFrameworks y el add-on OfxBullet (a su vez con la biblioteca Bullet Physics). En muchas partes se usa Bullet Physics directamente, ya que el add-on carece de cosas importantes, como los joints. El IDE es también VS 2010.