Seguimiento De Línea Avanzado Con 3Pi: Pid Control - Pololu 3pi Guía De Usuario

Tabla de contenido

Publicidad

181.
{
182.
// We are somewhat close to being
183.
// drive straight.
184.
set_motors(100,100);
185.
left_led(1);
186.
right_led(1);
187.
}
188.
else
189.
{
190.
// We are f
ar to the l
191.
set_moto
192.
left_
le
193.
right_led(1);
194.
}
195.
}
196.
// This part of the cod
197.
// never re
ach the end of its program, or unpredictable behavior
198.
// will result as random code starts getting executed.
199.
// really want to stop all actions at some point, set your motors
200.
// to 0,0 and run the following command to loop forever:
201.
//
202.
while(1);
203.
}
7.c Seguimiento de
Un programa avanzado de seguimiento de línea para el 3pi está
.
linefollower-pid
Nota: Hay una versión compatible con el Arduino-compatible de este programa que puede
bajarse como part
e de Pololu Arduino Libraries (ver Sección 5.g).
La técnica usada en este ejemplo es conocida como
problemas que hemos mencionado en el programa anterior y que p
notoria la velocidad de seguimiento de la línea. Muy importante, el control PID usa
continuamente funciones para calcular la velocidad de los motores, la simpleza del ejemplo
anterior puede reemplazarse por una respuesta más suave. PID responde a
Derivación, estas son las tres entradas usadas en la fórmula para computar la velocidad del robot
al girar a izquierda y derecha.
• El valor
proportional
Si está centrado en la lín
de la línea, el valor será un número
Esto se computa por el resultado que devuelve
• El valor integral es un histórico del funcionamiento del robot: es la suma de todos los
valores del término proporcional que recuerda desde que el robot empieza a funcion
• El derivative es el índice de cambios de los valores proporcional. Computamos en este
ejemplo la diferencia entre los últimos dos valores.
Este el trozo de código para la entrada de los valores PID:
1.
// Get the position of the line.
2.
// the "sensors" argument to read_line() here, even
3.
// are not interested in the individual sensor readings.
4.
unsigned
int
5.
// The "proportional" term should be 0 when we are on the line.
6.
int
proportional = ((int)position) - 2000;
7.
// Compute the derivative (change) and integral (sum) of the
8.
// position.
9.
int
derivative = proportional - last_proportional;
10. integral += proportional;
11.
// Remember the last position.
12. last_proportional = proportional;
Hay que tener en cuenta que la vari
proporcional. Un
unsigned int
, pone fuera de prueba y puede llevar a un negative overflow. En este caso
position-2000
eft of the line: turn right.
rs(100,0);
d(0);
e is never reached.
línea avanzado con 3pi: PID Control
es aproximadamente proporcional a la posición del robot. Esto es.
ea lo expresamos con un valor exacto de 0. Si esta a la
position = read_line(sensors,IR_EMITTERS_ON);
solo pued
centered on the line:
A robot should
PID
positivo
y si está a la
read_line() simply restándole
Note that we must provide
though we
able
es del tipo
position
e almacenar valores positivos, luego la expresión
If yo
u
en el directorio
control, dirigida a alguno de los
ermiten incrementar de forma
Proporcional, Integral,
derecha
de la línea será negativo.
int
en la fórmula para un
examples\3pi-
izquierda
2000.
ar.

Publicidad

Tabla de contenido
loading

Tabla de contenido