написать реферат на тему движения робота по линии
Ответы на вопрос
Ответ:
Логика движения робота
Движение робота осуществляется посредством поворота его передних колёс, угол
поворота которых определяется положением черной линии относительно датчиков. Ро-
бот движется прямо на полной скорости, если линию обнаруживают оба центральных
датчика. При пропадании линии с одного из датчиков - робот снижает скорость на 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; // не было срабатывания кнопок
}