¿Construir un seguidor de línea delgada?

0

Estoy construyendo un robot seguidor de línea con solo 3 sensores para seguir una línea negra de 1 cm. Sin embargo, la distancia entre cada uno de mis sensores también es de 1 cm.

La siguiente ruta recta no es un problema. Sin embargo, hay giros en ángulo recto que los sensores parecen pasar por alto a menudo y simplemente pasan sobre él. Además, en caminos rectos, a veces la línea está entre los dos sensores y ninguno de ellos es capaz de detectar y, por lo tanto, está atascado.

¿Cómo puedo resolver estos problemas? Especialmente los giros de 90 grados ...

    
pregunta user87877

1 respuesta

0

¿Puedes leer los sensores de forma analógica en lugar de digitalmente? Si es así, hazlo e interpola la posición de la línea con la siguiente fórmula:

e = (-100 * s[0] + 100 * s[2]) / (s[0] + s[1] + s[2]);

Este es un promedio ponderado de los 3 sensores donde s [0] (digamos que es el sensor izquierdo) tiene una magnitud de -100, s [1] (sensor central) tiene una magnitud de 0 y s [2 ] (derecha) tiene una magnitud de +100. Los pesos son las lecturas de ADC de los sensores donde el blanco da un valor cercano a 0 y el negro da un valor cercano a 1023 (asumiendo que la precisión de su ADC es de 10 bits como ejemplo). Esto le dará un valor para 'e' entre -100 y 100 donde e = 0 significa que la línea está centrada, así que me gusta llamar a esto 'el error', de ahí el nombre de la variable 'e'.

Si e = 0 quieres ir directamente. Me sentí; 0, la línea está a la izquierda y desea girar a la izquierda para corregir eso, lo que probablemente haga al darle a su motor derecho una velocidad mayor que la de su motor izquierdo si está usando un tren de transmisión diferencial (la forma habitual en línea seguidores). Lo ideal es cambiar las velocidades relativas de los dos motores de forma proporcional al error, lo que se denomina control proporcional. Si la velocidad del robot es lo suficientemente alta, es posible que deba agregar un control derivado para compensar las oscilaciones, pero probablemente necesite más de 3 sensores para obtener algún beneficio fuera del control de PD.

Al leer sus sensores de manera analógica, resolverá el problema donde la línea está exactamente entre dos sensores.

En el caso de que el robot pierda el rastro de la línea, debe recordar cuál fue el último error y utilizarlo para que el robot siga girando hacia la línea hasta que la encuentre.

El código para hacer esto podría ser algo como:

void follow_line() {
  int i;
  int lost_line = true;

  for (i = 0; i < 3; i++) {
    if (s[i] > BLACK_WHITE_THRESHOLD) 
      lost_line = false; 
  }

  if (lost_line) { 
    if (e < 0)
      e = -100;
    else
      e = 100;
  }
  else { 
    e = (- 100L * s[0] + 100L * s[2) / (s[0] + s[1] + s[2]);
  }

  v_left  = vb - kp * e;
  v_right = vb + kp * e;

  // now set your motor speeds to v_left and v_right
}
    
respondido por el jamarju

Lea otras preguntas en las etiquetas