martes, 4 de enero de 2011

NXT Two Wheels

El péndulo invertido sobre dos ruedas (Two Wheels) es una variante del típico problema de ingeniería de péndulo invertido sobre un carro móvil. En esta variante se introducen nuevas variables de control asociadas a los dos ejes de giro que tiene el nuevo sistema, así como a los momentos de inercia de los motores.

La solución implementada con LEGO NXT MINDSTORMS destaca por su tremenda sencillez mecánica. Cualquier disposición de dos motores y ruedas del kit de LEGO es válida para estabilizar un péndulo invertido. De hecho el NXT Tribot (robot base de tres ruedas) también puede utilizarse como TwoWheels.


Como se aprecia, he utilizado en este caso el Tribot para realizar un TwoWheels


Esta fué mi primera versión de péndulo invertido :


Realmente el componente clave en esta solución es un dispositivo de HiTechnics llamado GyroSensor.


El HiTechnics GyroSensor es un componente diseñado para LEGO NXT, compatible con el interfaz de comunicaciones serie I2C y que dispone de una medida de la velocidad de rotación del mismo en un eje. Para nuestro caso, NXT TwoWheels, el GyroSensor nos permite conocer la velocidad de rotación en unidades de grado por segundo, en un rango de 0 a 1024, devolviendo un valor próximo a 512 en situación de reposo.

En el siguiente gráfico se muestra la respuesta del GyroSensor a una oscilación, de onda cuadrada.

En el siguiente cuadro se muestra la integral del anterior gráfico.


La primera experiencia antes de enfrentarnos al péndulo invertido directamente debería ser caracterizar el sensor y realizar alguna práctica previa de medida de inclinación, donde aprenderemos a realizar dos ejercicios clave: Estimación de Bias e Integración numérica.

La integración numérica es el proceso por el cual estimaremos la posición absoluta de nuestro péndulo invertido, a partir de la velocidad de giro (haciendo un poco de memoria recordaréis que dx/dt es la velocidad, y recíprocamente la integral de la velocidad, es la posición. Según este principio deberemos integrar la medida del GyroSensor, bien mediante un método RungeKutta o mediante Integración lineal de primer orden, que para nuestro caso será suficiente.

El factor Bias es la medida de referencia (teóricamente 512), que debemos estimar, pues su valor exacto es desconocido, ya que depende de procesos de fabricación y adicionalmente varía con la temperatura. Su valor por lo tanto debe ser estimado en todo momento.

Cuando tenemos el valor de Posición integral y el valor de Bias, ya podemos determinar la posición absoluta en grados de inclinación de la plataforma, como la diferencia entre el valor Integral y el Bias.

Aunque parece un poco complicado, realizando una sencilla práctica de "nivel electrónico" con un único motor se entiende la dinámica rápidamente. (Este consiste en hacer un pequeño programa que mantiene nivelada una viga con el GyroSensor solidario, que la mantenga siempre horizontal aunque giremos la plataforma).

Y a partir de ahí, una vez dominada la medida del GyroSensor el problema de estabilizar el péndulo invertido puede abordarse utilizando un doble controlador clásico PID (Proporcional, Integral, Derivativo) el primer PID para el control de inclinación y el segundo PID para el control de posición de nuestro TwoWheels, si no queremos que se nos vaya corriendo por la casa hasta chocar contra alguna pared.

El control de posición se resuelve fácilmente modificando la posición deseada de referencia Xo de nuestro PID de posición. La primera experiencia puede resolverse mediante un thread temporizado que desplaza dicha posición de referencia a velocidad constante, pero lo más interesante es controlar mediante Bluetooth  dicha referencia.

La comunicación Bluetooth es muy fácil de programar, ya que tanto el LEGO NXT como el PC implementan un puerto de comunicaciones serie COM estándar y a partir de ahí, sólo hay que mandar un mensajito cada vez que deseemos incrementar o decrementar la posición de referencia.

Básicamente esta es la guía mental que debemos seguir para comprender el desarrollo de nuestro TwoWheels.

Espero que disfrutéis con este proyecto tanto como yo.

Otros proyectos: aquí.

7 comentarios:

  1. Buenas,

    tengo un primo de 12 anyos que está flipando con tu robot, y quiere intentar programar uno igual. Sería posible contactarte con algunas dudas?

    Gracias y saludos,

    Borja

    ResponderEliminar
  2. me podrias ayudar a programar en robot c

    ResponderEliminar
  3. Hola, en la página de http://www.Youtube.es/tarribas he dejado más detalles y videos.

    ResponderEliminar
  4. Hello, where can I FIND the códdigo and layout of this project, or you can send me by email?

    coisas.e.coisas.do.jhonas @ gmail.com

    ResponderEliminar
  5. Hola Dónde puedo encontrar el códdigo y el diseño de este proyecto, o usted puede enviarme por correo electrónico?

    ResponderEliminar
  6. NXT Two Wheels Keys is a great blog,it is very useful. Thanks for it!! Wheel balancers

    ResponderEliminar
  7. Tomás me puedes ayudar con el código del segway por favor, o más detalles por favor. renefer_cp@hotmail.com

    ResponderEliminar