La práctica 4 requería programar un "segway" con el NXT, esto es, hacer que el NXT se mantuviera en equilibro sobre dos ruedas a base de medir usando un sensor la distancia al suelo en cierto punto.
Para ello, había que implementar un funcionamiento PID (Proporcional, integral, derivativo).
Básicamente el funcionamiento PID se basa en la siguiente fórmula:
V = P*Kp + I*KI + D*KDQue viene a decir que la variación a realizar sobre la medida (en este caso la medida de la distancia a la posición de equilibrio) es igual
a la componente proporcional multiplicada por una constante, mas la integral por otra, más la derivativa por una tercera constante.
En este caso, las tres componentes se calculan facilmente de la siguiente forma:
P es directamente la diferencia entre medida de la distancia tomada por el sensor y la distancia en posición de equilibrio.
I es la suma de dichas diferencias o errores a lo largo del tiempo. Se pone a 0 cuando el error varía de signo.
D es la diferencia entre cada error y el anterior.
Programar esto es facil. Así pues, la dificultad de esta práctica residía en el ajuste de las 3 constantes.
Para poder realizar este ajuste más rápidamente y no tener que estar conectando y desconectando continuamente el NXT lo que hicimos fue una función que, al pulsar el botón ENTER, hacía entrar al programa en modo "ajuste". En este modo la rueda de la derecha aumenta o reduce la variable en cuestión a grandes intervalos, y la rueda de la izquierda, a intervalos cortos. Pulsando de nuevo ENTER se cambia de ajustar la medida en posición de equilibrio a ajusrtar Kp, de Kp a a ajustar Ki y de Ki a Kd. Una última pulsación de ENTER vuelve a la función de segway.
Ajuste de las variables:
Despues de varias pruebas, vimos que los mejores resultados se daban siempre con las constantes proporcional y derivativa iguales, lo cual, a parte de tener cierta lógica, por que ambas variables tienen valores de magnitud parecida, era conveniente, pues nos permitió realizar el ajuste como si solo manejáramos dos variables.
La integral, por otro lado, acumula valores en una variable, con lo que aumenta muy rapidamente, lo que obliga a ponerle valores muy bajos, para evitar que fuera este valor el que dominara todo el movimiento.
Por último, también influía mucho la medida de la posición de equilibrio. Si se quedaba muy alta, el robot se iba hacia atras inevitablemente, si era baja, se iba hacia delante hasta caer.
Finalmente los valores más estables que conseguimos fueron:
- Kp = 7
- Kd = 7
- Ki = 0.35
Video 2: Duración ~ 1:00