Robot rastreador siguelineas

Hola buenas a todos, tengo que hacer un robot para un trabajo de clase y estoy un poco perdido...
Consiste en :
El robot tiene dos ruedas y utilizan servomotores de 360º.

Hay un campo Como el de la foto. Mi robot se colocará en una zona y otro robot se colocará en la otra. El robot tiene que desplazarse por el campo e ir recogiendo objetos y llevándolos a su zona (he pensado que lo mas fácil es que los arrastre para llevarlos). Al principio, habrá objetos en los puntos rojos de la foto, también estarán colocados de forma aleatoria´y según se llevan a la zona, los volverán a colocar en otro sitio aleatorio. El robot que recolecte mas objetos ganará.

He conseguido que el robot siga la línea un poco pero se vuelve loco y empieza a dar vueltas. Los sensores infrarrojos son los CNY70. Me gustaría saber como evitar que se vuelva loco. Y que cumpla con los objetivos que he dicho.
¿Que podría hacer para saber en que posición esta el robot y así saber donde esta mi zona?

También lleva ultrasonidos para detectar los objetos.

Campo robot.png

Las fotos deben subirse usando las normas del foro.

Y tu código para ver porque se vuelve loco?
Pon el esquema que estas usando para los sensores tmb!

El código es este:

#include <Servo.h>
#include <MotorTubot.h>

//Pines de conexion de los motores 
int pinmotorIzda =     9;
int pinmotorDcha =    10;
MoverTubot tubot;

//Ejemplo que muestrea los sensores infrarojos y muestra el valor obtenido por pantalla

// Declaración de los pines de los sensores
int pinInfraredRight = A1;
int pinInfraredLeft =  A2;

// Declaración de la variables donde se guarda el valor de los sensores
int infraredRight;     
int infraredLeft;       

void setup(){
  Serial.begin(19200);  // Se configura la comunicacion serie a 19200 baudios
    // Configuramos los motores y sus correspondientes PWM
  // pin motor izq || pin motor drch|| punto medio PWM izq || punto medio PWM drch
  tubot.begin(pinmotorIzda , pinmotorDcha);  //1238 ,1250 
}

void loop(){
   delay(200);
   
  // Se lee el valor de los sensores.
  infraredRight = analogRead(pinInfraredRight);
  infraredLeft  = analogRead(pinInfraredLeft);
 
 // Se envía al ordenador el valor de los sensores
  Serial.println("SensorIzd      SensorDer  ");
  Serial.print(infraredLeft);  
  Serial.print("   |     ");
  Serial.println(infraredRight); 
  
  if (infraredRight < 300 && infraredLeft < 300)
   tubot.recto(50);
   
  else if  (infraredRight > 300 && infraredLeft < 300)
 {tubot.izda (40);
 delay (60);
}
else if  (infraredRight < 300 && infraredLeft > 300)
 {tubot.dcha (40);
 delay (60);
}}

y estas las librerías:

libreria Tubot2016

libreria DistanceSRF04

Tengo la guía de como poner los sensores: montaje sensores

Muchas gracias a todos. :wink: