Информатика, вопрос задал dianaziangirova852 , 1 год назад

написать реферат на тему движения робота по линии​

Ответы на вопрос

Ответил umarovunle
1

Ответ:

Логика движения робота

Движение робота осуществляется посредством поворота его передних колёс, угол

поворота которых определяется положением черной линии относительно датчиков. Ро-

бот движется прямо на полной скорости, если линию обнаруживают оба центральных

датчика. При пропадании линии с одного из датчиков - робот снижает скорость на 40%

для подготовки к повороту (после нескольких экспериментов привело к выводу, что при

меньшей скорости радиус поворота у робота меньше) и ожидает сигнал от “левого цен-

трального” или “правого центрального” датчика, получив который, робот поворачивает

влево или вправо соответственно. Если поворот очень резкий и робот не может отсле-

дить линию центральными датчиками, то линию фиксируют “левый” или “правый” датчи-

ки. Следует заметить то, что при появлении линии на одном «левом» или «правом» дат-

чике робот ожидает сигнала на «левом центральном» или «правом центральном» соот-

ветственно. В случае потери линии и этими датчиками, то робот продолжает поворот в

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

равнивает движение робота по линии.

Так же был разработан метод отслеживания линии. Этот метод позволяет ехать ро-

боту подобной конструкции вдоль одной линии, не теряя её. Метод основывается на

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

робота только при некоторых условиях. «Центральные боковые» датчики активируются

в любых ситуациях, т.к. это означает, что линия отклонилась в ту или иную сторону от

центра; или же робот пытается центрировать линию относительно себя. Крайние боко-

вые датчики учитываются только после того как линия появится на соответствующем

“боковом центральном” датчике - это позволяет нам при появлении другой линии ее не

учитывать. Центральные датчики активируются после любого варианта событий. Благо-

даря этому робот может выбрать более плавную линию для следующего круга.

Алгоритм работы робота описан функциями, и тело основной исполняемой функции

выглядит как приведено на рисунке 2.

void loop() // Основной цикл управления

{

if ( !ButtonRead() ) // Проверяем механические кнопки

{

Control(); // Сбор информации с датчиков и анализ ситуации

Move(); // Движение робота

}

}

Рисунок 3 – Алгоритм работы основной исполняемой функции

При срабатывании кнопок на препятствие робот поворачивает передние колеса в

одну или другую сторону и отъезжает назад, немного едет прямо (это позволяет роботу

иметь некоторую вероятность прохождения трассы в случае поломки датчиков). Ско-

рость обработки запросов очень велика, поэтому нажатие сразу двух кнопок «словить»

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

большое ожидание (0.1 сек) и снова делался запрос на нажатие кнопок. Если сработали

сразу обе кнопки, то робот просто отъезжает назад и дальше пытается ориентироваться

по линии. Вероятность того, что кнопки зациклят робота на одном промежутке трассы

очень мала, и за все время работы робота таких ситуаций не было. Для считывания

кнопок была разработана отдельная функция

boolean ButtonRead()

{

if (digitalRead(Butt_L) == 0) // проверка нажатия левой кнопки

{ delay(100); // ожидание нажатия 2-й кнопки

if (digitalRead(Butt_R) == 0) // проверка нажатия правой кнопки

CenterBack(); // движение при нажатии 2-х кнопок

else LeftBack();} // движение при нажатии левой кнопки

if (digitalRead(Butt_R) == 0)

{delay(100);

if (digitalRead(Butt_L) == 0)

CenterBack();

else RightBack(); // движение при нажатии левой кнопки

}

if (digitalRead(Butt_L) == 0 || digitalRead(Butt_R) == 0)

return 1; // было срабатывание кнопок

else return 0; // не было срабатывания кнопок

}

Новые вопросы