Как заставить робота следовать по линии в 90 градусов? - PullRequest
0 голосов
/ 15 июня 2019

Я создал алгоритм для следования черной линии.Но у меня проблема в том, что именно на перекрестке робот всегда завершает свой путь вперед.Но я хочу, чтобы он пошел налево.Я имею в виду, он всегда отдает предпочтение движению вперед и не исследует все пути лабиринта

Зная, что все дороги - только угловые или прямые дороги

Я разместил датчики 00100, датчик[0] датчик [1] ​​датчик [2] датчик [3] датчик [4] просто середина в черной линии.


read_sensor_values();




// i use 5 sensor 0 to 4 in table sensor[];
if(sensor[2]==HIGH){ 

  if(sensor[1]==LOW && sensor[3]==LOW){     
    go_Advance();  //straight
    set_Motorspeed(M_SPEED1,M_SPEED1);
  }
  else if(sensor[1]==HIGH && sensor[3]==LOW){ 
     go_Left();  //Turn left
     set_Motorspeed(0,M_SPEED1);
  }
  else if(sensor[1]==LOW && sensor[3]==HIGH){  
    go_Right();  //Turn right
    set_Motorspeed(M_SPEED1,0);
  }

}
else {if(sensor[2]==LOW){
   if(sensor[1]==HIGH && sensor[3]==LOW){ //Turn left
    go_Left();  
    set_Motorspeed(0,M_SPEED1);
  }
  else if(sensor[1]==LOW && sensor[3]==HIGH){  //Turn right
     go_Right();
     set_Motorspeed(M_SPEED1,0);
  }

}

else {
   go_Back();
   set_Motorspeed(M_SPEED1,M_SPEED1);
}
if(sensor[1]==HIGH){  
  if(sensor[0]==HIGH && sensor[2]==LOW){
    go_Left();
    set_Motorspeed(0,M_SPEED2);
  }
  else{  //Turn left
    go_Left();
    set_Motorspeed(0,M_SPEED1);
  }
}



if(sensor[3]==HIGH){  
  if(sensor[2]==LOW && sensor[4]==HIGH){ 
    go_Right();
    set_Motorspeed(M_SPEED2,0);
  }
  else{
    go_Right();
    set_Motorspeed(M_SPEED2,0); 
  }
}
}
}

1 Ответ

1 голос
/ 18 июня 2019
  1. Некоторые ваши условия противоречат друг другу. Проверьте состояние каждого датчика в каждом состоянии.

  2. Если я не ошибаюсь, на перекрестке будет 11111, который явно нигде не рассматривается. Таким образом, в настоящее время на перекрестке будут выполняться блок 'else' inside 'if (sensor [1] == HIGH)' и блок 'else' inside 'if (sensor [3] == HIGH)'. Возможно, это приведет к тому, что оба мотора будут работать, и он будет двигаться вперед. К моменту окончания перекрестка он возвращается в состояние 00100 и продолжает двигаться вперед.

  3. 1-й оператор if имеет 2 других оператора, что неверно, если это фактический код. Предполагая, что второе 'else' является 'else if', последнее 'else' никогда не будет выполнено, так как 'sensor [2] == LOW' всегда будет истинным, если 'sensor [2] == HIGH', если false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...