martes, 4 de enero de 2011

NXT Two Wheels Keys

The two-wheeled inverted pendulum (Two Wheels) is a variant of the typical engineering problem of inverted pendulum on a moving truck. In this version introduces new control variables associated with the two axes of rotation that has the new system, as well as moments of inertia of the motors.


The solution implemented with LEGO MINDSTORMS NXT known for his tremendous mechanical simplicity. Any provision of two motors and wheels on the LEGO kit applies to stabilize an inverted pendulum. In fact, the NXT Tribot (three-wheeled robot base) can also be used as TwoWheels


As noted, I have used in this case for a TwoWheels Tribot


This was my first version of the inverted pendulum:


Really the key component in this solution is a device called GyroSensor HiTechnics.


The HiTechnics GyroSensor is a component designed for LEGO NXT compatible with the I2C serial communications interface that provides a measure of the speed of rotation on an axis. In our case, NXT TwoWheels the GyroSensor lets us know the speed of rotation in units of degrees per second, ranging from 0 to 1024, returning a value close to 512 at rest.

The following chart shows GyroSensor response to a swing, square wave.


The following table shows the integral of the previous graph:

The first experience before facing the pendulum should be invested directly characterize the sensor and perform some previous practice of measuring tilt, where we learn to make two key exercises: Bias Estimation and Numerical integration.

The numerical integration is the process by which we estimate the absolute position of our inverted pendulum, from the speed (with a bit of memory recall that dx / dt is the rate, and conversely the integral of velocity, is the position. According to this principle we should integrate GyroSensor measurement or by a method RungeKutta or by first-order linear integration, which in our case will suffice.

The Bias factor is the reference measurement (theoretically 512), we estimate, because its exact value is unknown, since it depends on manufacturing processes and further varies with temperature. Its value therefore must be upheld at all times.

When we have the integral position value and the value of bias, we can determine the absolute position in degrees of inclination of the platform, as the difference between the Integral and Bias.

Although it seems a bit complicated, making a simple practice of "standard mail" with a single engine means the dynamics quickly. (This is to make a small program that keeps a beam level with GyroSensor solidarity, which always keep it horizontal but revolve with the platform).

And from there, once dominated the extent of GyroSensor the problem of stabilizing the inverted pendulum can be addressed using a dual classic PID controller (Proportional-Integral-Derivative) the first PID to the tilt and the second PID control TwoWheels our position if we do not want to go running around the house until it crashed against a wall.

Position control is easily solved by changing the reference desired position Xo of our PID position. The first experience can be solved by a timer thread that reference this position moves at constant speed, but more interesting is controlled via Bluetooth that reference.

Bluetooth communication is very easy to program, since both the LEGO NXT and the PC communication port implementing a standard COM series and from there, simply send a little message every time we wish to increase or decrease the reference position.

Basically this is the mental guide we must follow to understand the development of our TwoWheels.


I hope you enjoy this project as much as me.

Other Projects: aquí.
Other Blogs: http://ballbotexcel.blogspot.com/  http://nxtballbot.blogspot.com/

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í.