Рассмотрим простейший алгоритм движения по черной линии на одном датчике цвета на EV3.
«Следование по линии»: учимся вместе с роботом
Материал посвящён теме, популярной на роботехнических фестивалях: «Следование по линии».
Эта публикация — вклад в разработку главы 3 анонсированного курса основ программирования и робототехники, но может рассматриваться как самостоятельный текст для читателей, имеющих опыт программирования в среде makecode.
Замечание о стиле. Материал предназначен для ведущего занятия и содержит результат авторского исследования. Превратить результат обратно в процесс — задача ведущего. Вопросы в тексте обычно заготовлены для участников проекта (хотя это только авторское видение, каждый ведущий может развернуть материал в соответствии со своим видением).
МОЩНАЯ ПОЛОСА ПРЕПЯТСТВИЙ ДЛЯ МУЖЕЙ И ЖЁН В АМЕРИКЕ (WIPEOUT)
Признаюсь, до поры я относился к теме следования по линии без симпатии. Но, осознав природу своего чувства, я изменил мнение. Почему мне не нравилась эта тема? Дело в том, что результат здесь не достигается как чисто логическое решение задачи, как это происходит в математике или программировании.
Если программа (я программист) написана правильно, то она, вообще говоря, будет одинаково выдавать результаты на разных компьютерах, процессорах и операционных системах. Робот, следующий линии — совсем другое дело: небольшое изменение трассы, конструкции робота и даже смена батареек может изменить поведение робота и нарушить замысел. Почему так происходит?
Добро пожаловать в физический мир: здесь качество резины на колесах, микрокочка на пути робота, слабый ток батарейки и прочие мелочи, от которых мы абстрагируемся в математических задачах, ставят проблемы, которые с наскока не так просто даже осознать. Программирование — инженерная дисциплина, но она рафинирована почти до математического уровня строгости рукотворной средой с формальными правилами, тогда как следование по линии — это настоящая инженерия в физическом мире. Это даёт задаче большой учебный потенциал и, одновременно, бросает вызов педагогу.
Итак, тема следования по линни — это не изучение соответствующего алгоритма, а привитие навыков решения инженерной задачи.
Инженерная история 1
Братья Райт, коим принадлежит слава первого управляемого пилотом полёта летательного аппарата с двигателем, значительное время занимались изучением управляемости планёра.
Мораль: для решения сложной инженерной задачи нужна хорошая подготовка
Описываемая дальше работа привязана к конкретному полю и конкретному роботу (Maqueen). Естественно, не все результаты будут приложимы к другим роботам и полям, наша цель — показать возможные подходы для решения этого класса задач. Подготовку к разработке алгоритма начнём со сбора начальной информации
Подготовка: сбор начальной информации
Как можно подготовиться к разработке алгоритма следования по линии, что нужно изучить? Естественно, изучить то, что для процесса существенно, это первый вопрос для обсуждения с разработчиками.
МОЩНАЯ ПОЛОСА ПРЕПЯТСТВИЙ В АМЕРИКЕ (WIPEOUT)
Немного подумав, можно прийти к выводу, что нужно
- понимать возможности робота
- понимать особенности трассы.
Возможности робота — это об источниках информации для робота (информация с датчиков следования линии). В нашей ситуации речь идёт о роботе Maqueen, оснащённом парой датчиков для следования линии. Датчики цифровые, т.е. возможен возврат двух значений: 0 и 1 («цифровые» — такова терминология, происхождение и смысл которой мне не ясны, поскольку 0 и 1 ассоциируются, прежде всего, с булевой алгеброй, а не с цифрой, но . такова терминология, укоренившаяся в микроконтроллерном мире).
Поскольку документации в коробке с роботом нет,
Задача 1: определить кодировку датчика
Это — несложная задача для самостоятельной работы, не будем останавливаться на деталях.
На роботе Maqueen белый цвет кодируется единичкой. Мы получили первые константы, пора начинать сбор информации в проект «Следование по линии»:
Задача 2: определить скорость робота
Задача допускает разные решения (например, можно запустить робота на 10 секунд).
У меня получилась скорость 19.5 см/c на солевых батарейках Flarx. Стоп, батарейки-то уже были какое-то время в работе. Меняем батарейки на новые: 23.5 см/c. Добавлю, что можно попробовать и с другими типами батареек, и результат наверняка будет другой.
Делаем вывод: нельзя жёстко опираться на скорость:
Линейная скорость — не единственная скорость, которая нас интересует. В ситуации, когда робот сбился с курса и должен поправить свой маршрут, он, естественно, не может продолжать прямолинейное движение.
Дополнительное задание: определить угловую скорость робота, когда одно колесо остановлено, а другое двигается.
Задача 3: определить расстояние между датчиками следования линии
У робота Maqueen расстояние между датчиками фиксировано и равно 15мм.
Задача 4. Определить параметры поля для следования по линии
Фирма dfrobot предлагает 2 поля (они напечатаны с разных сторон бумажного листа).
Первое поле воспроизводит по форме беговую дорожку вокруг футбольного поля: 2 параллельных отрезка, соединенных с обоих концов полуокружностями.
- длина по продольной оси (включая ширину линии) — 86 см
- ширина (включая ширину линии) 46 см
- радиус закругления (включая ширину линии) — 23 см
- ширина линии — 15 мм
Определение стратегии следования по линии
Прежде всего, нужно определиться, будем ли мы разрабатывать алгоритм для конкретной трассы, учитывая её параметры, или пытаться разработать универсальный алгоритм для любой замкнутой непересекающейся трассы.
Попытка сразу пытаться написать эффективный алгоритм под конкретную трассу может привести к эффекту «За деревьями леса не видим». Лучше, пожалуй, поработать над общим алгоритмом, а уж после решать, допускает ли он оптимизацию под конкретную трассу.
Отправная точка разработки — определение состояния робота, которое нас устраивает, то есть, не требует коррекции. Конечно, нам хочется, чтобы робот двигался вперёд.
А показания датчиков? Чтобы определиться с этим вопросом, нужно сначала сравнить ширину линии трассы и расстояние между датчиками:
- если расстояние между датчиками больше ширины линии, то можно попытаться держать датчики слева и справа от линии, то есть, ориентироваться на показания «белый И белый»
- если расстояние между датчиками меньше ширины линии, то можно попытаться держать датчики над линией, то есть, ориентироваться на показания «чёрный И чёрный»
- если расстояния равны?
В последнем случае (а это как раз наш случай), очевидно, придётся обеспечивать несимметричное положение робота относительно линии трассы: один датчик должен находиться вне линии («белый»), а второй — на линии («черный).
Вариант показания датчиков «белый И чёрный» допускает два расположения робота относительно линии:
- расположение «внутри», когда «белый» датчик находится внутри трассы
- расположение «снаружи», когда «белый» датчик находится снаружи трассы
Что выбрать: прохождение трассы снаружи или внутри? Самоё простое соображение — внутри путь короче. Остановимся для начала на этом решении (но будем помнить, что выбору мы посвятили совсем немного времени, значит, надо оставить за собой право пересмотреть подход позже. Вообще, развилки проекта следует помнить и документировать, чтобы позже иметь возможность проверить альтернативные подходы).
Для определённости будем считать, что «белым» будет левый датчик. Это означает, что испытания мы будем проводить с ездой против часовой стрелки.
Настал момент сформулировать желаемое состояние робота во время прохождения трассы:
- робот движется вперед
- левый датчик показывает «белый», правый — «чёрный»
Если робот находится в этом состоянии, то мы не предпринимаем никаких корректирующих действий и позволяем роботу двигаться дальше.
Как только робот выходит из целевого состояния, необходимо выполнить корректирующие действия.
Алгоритм плавного движения по черной линии 2. Математика
Для того, чтобы заставить робота двигаться плавно по черной линии, нужно заставить его самому считать скорость движения.
А чтобы заставить робота считать, необходимо сначала самим определиться, как это делается.
Человек видит черную линию и ее четкую границу. Датчик освещенности работает несколько иначе.
Именно это свойство датчика освещенности – невозможность четко различить границу белого и черного – мы и будем использовать для расчета скорости движения.
Во-первых, введем понятие “Идеальная точка траектории”.
Показания датчика освещенности колеблются в диапазоне от 20 до 80, чаще всего на белом цвете показания равны примерно 65, на черном порядка 40.
Идеальная точка – условная точка примерно посередине белого и черного цветов, следуя которой робот будет перемещаться вдоль черной линии.
Здесь принципиально расположение точки – между белым и черным. Задать ее точно на белом или черном не получится по математическим причинам, почему – будет ясно позднее.
Эмпирическим путем мы вычислили, что идеальную точку можно высчитать по следующей формуле:
Дальше происходит следующее.
Робот должен двигаться строго по идеальной точке. Если случается отклонение в какую-либо сторону, робот должен вернуться к этой точке.
Составим математическое описание задачи.
Рассчитать мощность вращения каждого из двигателей с учетом степени отклонения от идеальной точки.
Исходные данные.
Текущие показания датчика освещенности.
Результат.
Мощность вращения мотора В.
Мощность вращения мотора С.
Решение.
Рассмотрим две ситуации. Первая: робот отклонился от черной линии в сторону белого.
В этом случае робот должен увеличить мощность вращение мотора В и уменьшить мощность мотора С.
В ситуации, когда робот заезжает на черную линию, все наоборот.
Чем сильнее робот отклоняется от идеальной точки, тем быстрее ему надо к ней вернуться.
Грамотно это называется ПИД-регулятор.
Но создание такого регулятора – задача довольно непростая, да и не всегда он требуется в целом виде.
Поэтому мы решили ограничиться только П-регулятором, адекватно реагирующем на отклонение от черной линии.
На языке математики это будет записано так:
где Hb и Hc – итоговые мощности моторов B и C соответственно,
Hбазовая – некая базовая мощность моторов, определяющая скорость движения робота. Подбирается экспериментально, в зависимости от конструкции робота и резкости поворотов.
Iтек – текущие показания датчика освещенности.
I ид – рассчитанная идеальная точка.
k – коэффициент пропорциональности, подбирается экспериментально.
В третьей части рассмотрим, как это запрограммировать в среде NXT-G.
При написании статьи использованы материалы сайтов:
Источник: andrewrogov.ru