До сих пор в статьях об алгоритмах, использующихся при движении вдоль линии, рассматривался такой способ, когда датчик освещенности как бы следил за левой или правой ее границей(8): чуть робот съедет на белую часть поля - регулятор возвращал робота на границу, начнет датчик перемещаться вглубь черной линии - регулятор выправлял его обратно. Средняя скорость такого перемещения не очень велика.
Рисунок 21. Движение с одним датчикам
Существуют примеры решения данной задачи с помощью 2 датчиков, которые дают более плавное движение(9).
Рисунок 22. Движение с 3 датчиками
В данном проекте для более ровного движения робота были использованы три датчика освещения. Центральный датчик постоянно находится на черной линии, 2 крайних на белом фоне для движения прямо. Если один из крайних датчиков показывает 0, то робот поворачивает в сторону датчика. Если все датчики показывают 0, то робот дошел до перекрестка, и он должен остановиться. Робот останавливается на каждом перекрестке, чтобы определить, куда двигаться далее. Если все датчики показывают 1, то робот вышел за линию, и робот будет пытаться искать линию, поворачивая на право.
|
|
Рисунок 23. Возможные положения датчиков относительно линии |
Если центральный датчик находится на черной линии, а 2 крайних на белом фоне, то робот движется прямо.
Если один из крайних датчиков показывает 0, то робот немного поворачивает в сторону этого датчика.
Рисунок 24. Позиционирование на перекрестке |
Программный фрагмент на C#
case "000": _ezb.Movement.GoStop(); stop = true; break;
case "001": GoRight(); break;
case "010": _ezb.Movement.GoStop(); stop = true; break;
case "011": GoRight(); break;
case "100": GoLeft(); break;
case "101": GoForward(); break;
case "110": GoLeft(); break;
Расшифровка:
0 – датчик над черным фон, 1-над белым фоном.
2.2.3. Создание плана передвижения робота
Создан план, по которому будет передвигаться робот по макету архива (рисунок 26).
Рисунок 25. Схема передвижения робота