particular no afecta a los resultados pero seria una buena idea usar ajustar la fórmula para afinar
en el resultado.
Cada uno de los valores entrados proviene de diferentes fuentes de información. El paso
siguiente es una simple formula que combina todos los valores en una variable y que se usa para
determinar las velocidades de los motores.
1.
// Compute the difference between the
2.
// m1 - m2.
3.
// to the right.
4.
// turn to the left, and the magnitude of the number determines
5.
// the sharpness of the turn.
6.
int
power_difference = proportio
7.
// Compute the actual motor settings.
8.
// to a negative value.
9.
const int
max = 60;
10.
if(power_difference >
11.
if(power_difference < -max) power_difference = -max;
12.
if(power_difference < 0) set_motors(max+power_difference
13.
else
set_motors(max, max-power_difference);
Los valores 1/20, 1/10000, y 3/2 son parámetros ajustables que determ
sobre la línea. En general, incrementando estos parámetros PID podemos hacer
largas, causando reacciones más fuertes, o cuando decrecemos podemos tener reacciones
débiles.
Debes re
flexionar sobre los distintos valores y experimentar con tu robot para determinar qué
efecto tiene cada uno de los parámetros. Este ejemplo da a los motores una velocidad máxima de
100, que es un valor inicial seguro inicial. Una vez ajustado los parámetros para que funcione
bien a una velocidad de 100, intenta aumentarla. Probablemente necesitaras ajustar estos
parámetros en función del recorrido para que el robot vaya lo más rápido posible. Puedes ajustar
gradualmente la velocidad máxima para que el 3oi vaya lo más rápido posible hasta el máximo
posible de 255 en carreras con radios de curvas de 6" y fijando los parámetros del PID.
8. Ejemplo Project #2: Resolución de laberintos
8.a Resolución de laberinto de línea
El siguiente paso desde el seguimiento de línea es
enseñar a tu 3pi a navegar entre caminos con giros
recortados, callejones sin salida, e intersecciones. Crea
una red complicada de líneas entrecruzadas en negro,
añade un círculo que represente el final y ya tienes un
laberinto de líneas, debe ser un entorno difícil para
explorar por tu 3pi. En un laberinto de líneas los robots
corren tranquilamente sobre las líneas desde un inicio a
un final asignado, cruzando las intersecciones y saliendo
el circuito. Los robots tienen varias posibilidades para ejecutar el laberinto, de modo que puedan
seguir el camino más rápido posible después de aprender los cruces y sobre todo los callejones
sin salida.
Los laberin
tos que pretendemos resolver en este tutorial tienen una particularidad importante:
contienen
bucles. Es decir, este código no está hecho para salir de un bucle en el laberinto sin
tener que volver sobre sus pasos. Luego, la solución a este tipo de laberinto es mucho más fácil
que resolver un laberinto con bucles, ya que una simple estrategia te permite explorar todo el
laberinto. Vamos a hablar de esa estrategia en la próxima sección.
Podemos construir nuestros laberintos utilizando sólo unas líneas re
regular, pero esto se hace principalmente para que el curso sea fácil de reproducir – la estrategia
de solución del laberinto que se describe en este tutorial no requiere de estas características.
If this is a positive number the robot will turn
If it is a negative number, the robot will
nal/20 + integral/10000 + derivativ
max)
power_difference = max;
two motor power settings,
We never set either motor
, max);
de las líneas cortadas que hay durante
e*3/2;
in
an la dirección del 3pi
power_difference
ctas trazadas sobre una rejilla
no