Cómo llega un robot a su objetivo
Un controlador proporcional es la regla más sencilla para que un robot llegue a un objetivo. Mueve la articulación en proporción a lo lejos que está. Cuanto más cerca, más despacio se mueve.
Aprenderás a simularlo, a ver cuándo se pasa del objetivo y a ponerle un número a ese error. Todo es una simulación.
Al final de esta lección
Nota
Puedo simular un controlador proporcional y medir cuánto se pasa del objetivo.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Sensor | un aparato que mide, como el ángulo de una articulación |
| Error | el objetivo menos la posición medida |
| Ganancia | el número por el que se multiplica el error |
| Sobreoscilación | cuánto se pasa la posición del objetivo |
| Retraso | el tiempo que tarda el sensor en dar su medida |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un controlador proporcional corrige en cada paso
En cada paso, el robot mide la posición y calcula el error: el objetivo menos la posición medida. La velocidad es la ganancia por el error.
La posición nueva es la anterior más la velocidad por la duración del paso. El robot se acerca, y cuanto más cerca, menos corrige.
Ejemplo resuelto: objetivo 10, ganancia 5
| Paso | Error medido | Cambio | Posición |
|---|---|---|---|
| 0 | 10 | 0 | 0 |
| 1 | 10 | 5 | 5 |
| 2 | 5 | 2,5 | 7,5 |
| 3 | 2,5 | 1,25 | 8,75 |
| 4 | 1,25 | 0,625 | 9,375 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La posición tras tres pasos
docker exec jupyter python3 -c "print(10 * (1 - 0.5 ** 3))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El retraso del sensor hace pasarse al robot
Un sensor real no da la posición de ahora, sino la de hace un momento. El robot corrige con una medida vieja y sigue empujando cuando ya ha llegado.
Entonces se pasa del objetivo. La sobreoscilación es cuánto: la posición más alta menos el objetivo.
Ejemplo resuelto: un paso de retraso
| Paso | Medida que usa | Posición |
|---|---|---|
| 1 | 0 | 5 |
| 2 | 0 | 10 |
| 3 | 5 | 12,5 |
| 4 | 10 | 12,5 |
| 5 | 12,5 | 11,25 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La sobreoscilación de esa respuesta
docker exec jupyter python3 -c "print(max([0, 5, 10, 12.5, 12.5, 11.25]) - 10)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El controlador con retraso en Python
target = 10
gain = 5
dt = 0.1
position = 0
previous = 0 # lo que el sensor midió un paso antes
print(0, position)
for k in range(1, 6):
measured = previous # el sensor llega con un paso de retraso
previous = position
position = position + gain * (target - measured) * dt
print(k, round(position, 2))
# Cambia gain a 2 y ejecuta otra vez: ya no se pasa del objetivo.
Ganancia baja: lenta pero sin pasarse
Con ganancia 5 el robot llega rápido y se pasa. Con ganancia 2 corrige menos en cada paso y llega más despacio, pero no pasa del objetivo.
Se elige la ganancia más alta que no se pase. Con un sensor más rápido se puede subir más.
Ejemplo resuelto: dos ganancias con el mismo retraso
| Ganancia | Posición en el paso 5 | Posición más alta | Se pasa |
|---|---|---|---|
| 5 | 11,25 | 12,5 | Sí, 2,5 |
| 2 | 7,68 | 7,68 | No |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error muy común
Advertencia
Mucha gente cree que una ganancia más alta siempre es mejor porque llega antes. Con un sensor que tarda, una ganancia alta hace que el robot se pase y oscile. Súbela poco a poco y mira la respuesta.
Para ir más lejos: otra ganancia
Con objetivo 10, paso de 0,1 s y un paso de retraso, prueba la ganancia 4. Apunta las posiciones de los pasos 1 a 5.
Decide si el robot se pasa del objetivo y cuánto.