Paso 2: fisica
La física de este robot es simple, el soporte del robot en dos puntos de alineado, la rueda y tiende a caer y perder su verticalidad, el movimiento de la rueda en el sentido de caer levanta el robot para recuperar la posición vertical.
Un vehículo tipo Segway es un problema de control del péndulo invertido clásico que es soluble en dos grados de libertad para los modelos más simples. El vehículo intenta corregir para un ángulo de inclinación inducido al mover hacia delante o hacia atrás, y el objetivo es volver a sí mismo a vertical. O por lo menos caiga.
Para este objetivo que tenemos dos cosas que hacer, en una mano tenemos que medir el ángulo de inclinación (de rollo) que tiene el vehículo, y por otro lado tenemos para controlar los motores para ir hacia adelante o hacia atrás para hacer ese ángulo 0, manteniendo su verticalidad.
Medida del ángulo:
Para medir el ángulo que tenemos dos sensores, acelerómetro y giroscopio, ambos tienen sus ventajas y desventajas. El acelerómetro puede medir la fuerza de la gravedad, y con esa información podemos obtener el ángulo de la robusteza, el problema del acelerómetro es que también puede medir el resto de las fuerzas del vehículo es someten, así que tiene mucho error y ruido. El giróscopo mide la velocidad angular, por lo que si integramos esta medida podemos obtener el ángulo que el robot se mueve, el problema de esta medida es que no es perfecto y la integración tiene una desviación, lo que significa en poco tiempo la medida es tan buena, pero para términos de tiempo largo el ángulo se desviará gran parte forma el ángulo real.
Esos problemas pueden resolverse ser la combinación de ambos sensores, que se llama fusión, y hay un montón de métodos para combinar. En este proyecto trato de dos de ellos: filtro de Kalman y complementarios.
- El filtro de Kalman es un algoritmo muy extendido en robótica y ofrece un buen resultado con bajo costo computacional. Hay una biblioteca para arduino que implementa este método, pero si quieres aprender más sobre ese método o implementar por ti mismo, mira esta página.
- El filtro complementario es una combinación de dos o más filtros que combina la información de diferentes fuentes y obtiene el mejor valor que desee. Se puede aplicar en una única línea de código. Para más información visite esta página.
ángulo = A * (ángulo + gyro * dt) + (1 - A) * accel;
donde A es normalmente es igual a 0.98.
Primero intenté utilizar el filtro de Kalman pero no obtengo buenos resultados, mi ángulo se calculó con un poco de retraso y afectan el control. El filtro de Kalman tiene tres variables que se puede cambiar según el parámetro de su sensor y variando esta usted puede obtener mejor resultado, he intentado cambiar eso valores, pero no obtengo mejores resultados entonces me decidí a aplicar el filtro complementario, mucho más fácil y tiene menos coste computacional. El filtro complementario funciona bien para mí.