Путь сборкиНачальныйВыходные

Робот, следующий по линии: от симулятора к реальной трассе

Работающий робот, устройство которого вы понимаете от считывания линии до контура ПИД-регулятора; параметры поведения сначала настроены в симуляторе.

Техническая схема: Робот, следующий по линии: от симулятора к реальной трассеSENSOR ERROR

Робот, следующий по линии, — лучший первый проект: он обнаруживает, принимает решения и движется, но каждая его часть достаточно проста для полного понимания. Это пошаговое руководство рассматривает проект именно как последовательность шагов. Вместо списка компонентов и схемы подключения, которую нужно просто повторить, вы последовательно открываете узлы и перед сборкой каждого узла изучаете соответствующий механизм.

Сначала вы понимаете, как ряд инфракрасных (IR) датчиков превращается в единую ошибку рулевого управления и как контур ПИД-регулятора превращает эту ошибку в плавное движение. Пять датчиков — оптимальный вариант для первой сборки: трёх достаточно на низкой скорости, но они дают грубое положение; восемь дают более высокое разрешение на большой скорости, но усложняют подключение и калибровку. Взвешенное среднее, сводящее эти показания в одно знаковое число — отрицательное, когда линия слева, и положительное, когда справа, — является единственным сигналом, который когда-либо видит контур рулевого управления, поэтому правильное получение этого числа важнее выбора конкретной платы.

Затем этот сигнал должен превратиться в две разные скорости колёс. Дифференциальный привод означает, что робот управляется вращением колёс с разной скоростью, а дерево проекта проведёт вас от исходного драйвера двигателей через широтно-импульсную модуляцию (PWM) и кинематику, превращающую одну поправку в команды левому и правому колесу. Вы также увидите место одометрии: подсчёт вращения колёс сообщает пройденное расстояние и объясняет, почему без внешнего эталона оценка накапливает ошибку, — тема, которая возвращается в каждом роботе для прохождения лабиринта.

До затрат и риска ошибки подключения вы настраиваете поведение в браузерном симуляторе: рисуете трассу, меняете число и расстояние между датчиками и перетаскиваете коэффициенты пропорциональной, интегральной и дифференциальной составляющих, наблюдая за ошибкой, временем круга и долей времени на трассе. Симулятор — учебная модель, а не оборудование: он предполагает плоскую контрастную бинарную трассу, идеальную калибровку, неизменное освещение и строго периодический контур без проскальзывания колёс. Найденные здесь коэффициенты дают близкую отправную точку, но реальный массив всё равно потребуется откалибровать и настроить на собственной ленте.

Только после этого подключите настоящего робота: выходы отражательных датчиков — на выводы с поддержкой аналогового сигнала, PWM и направление — на L298N (логические выводы не могут питать двигатели — вместо этого двойной H-мост переключает реальный ток), отдельное питание двигателей по собственной шине и общая «земля», соединяющая все модули. Последний узел — сборка и итерации на настоящей трассе из ленты, где переносятся коэффициенты из симулятора и выполняется коррекция с учётом поверхности, напряжения аккумулятора и времени работы контура. Такая же структура позднее появится в решателе лабиринта по линии — поверх этого робота добавляется слой принятия решений, — поэтому прочная база сэкономит время дважды.

Пройдите дерево проекта сверху вниз. Каждый узел открывается после выполнения его предварительных требований, а прогресс сохраняется на этом устройстве, поэтому робот можно собрать за выходные, не потеряв место.

Перечень компонентов

Компонент Кол-во Примерная стоимость Примечания
Arduino Uno или Nano 1 $5–8 Здесь лучше выбрать Nano: он выводит A6 и A7, поэтому помещается 8-канальный массив
ИК-массив отражательных датчиков 1 $4–10 5 каналов для обучения, 8 — если позже нужна скорость. Требуйте аналоговый выход
L298N или TB6612FNG 1 $2–4 При покупке выбирайте TB6612FNG: он не теряет ~1.5 V, которые L298N сжигает в тепло
Редукторный двигатель TT 2 $4 Жёлтые. Версии с энкодерами стоят на $2 больше и избавляют от пересборки
Шасси 2WD с колёсами и опорным роликом 1 $6–10 Обычно продаётся в комплекте с двигателями
Аккумулятор 1 $3–8 6×AA NiMH или 2×18650 с защищённым держателем. Не батарейка 9 V
Соединительные провода, лента, выключатель — $5 Матовая электрическая лента 19 mm для трассы

Итого: примерно $30–45. Самая полезная модернизация в этом списке — двигатели с энкодерами. Они не нужны для этого проекта, но робот, следующий по линии, почти всегда превращается в решателя лабиринта по линии, а ему они необходимы.

Для трассы нужны матовая чёрная лента на матовом светлом полу. Глянцевая лента отражает свет как белая под неверным углом, и на глянцевом полу происходит то же самое, поэтому робот работает на одной поверхности, но не на другой по причинам, которые выглядят как программные.

Как всё соединено

Откуда Куда Почему это важно
Массив VCC, GND 5 V Arduino, GND Здесь основной ток потребляют излучатели — 100–200 mA на 8-канальном массиве
Массив OUT1–8 A0–A7 Аналоговый сигнал, по одному каналу на вывод. Поэтому Nano лучше Uno
Драйвер PWMA, PWMB D9, D3 Выводы обязательно должны поддерживать PWM
Выводы направления драйвера D8, D7, D5, D4 Любые цифровые выводы
Драйвер STBY (только TB6612FNG) D12, логический уровень HIGH Если оставить его неподключённым, ничего не происходит и ошибка не выводится
+ аккумулятора VM драйвера / +12V Никогда не вывод 5 V Arduino
− аккумулятора GND драйвера, GND Arduino, GND массива Одна общая «земля», соединённая звездой в одной точке

Две неисправности вызывают большинство проблем при первом запуске, и ни одна не выдаёт сообщение об ошибке. Отсутствие общей «земли» означает, что у сигналов направления нет опорного потенциала, поэтому ничего не движется, хотя всё выглядит правильно подключённым. Ток двигателей через Arduino вызывает просадку шины 5 V, перезагрузку платы и выглядит как программный сбой.

Сборка по этапам

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

№ Этап Проверка Успешный результат
1 Двигатели вращаются Вращать каждое колесо вперёд и назад при значении duty 200 на опорах Оба вращаются в обе стороны; отметьте значение duty, при котором каждое начинает движение
2 Измерена мёртвая зона Изменять duty от 0 с шагом 5 Получены два разных значения — часто на 5–10
3 Прямая Проехать обоими колёсами вперёд на 2 m по полу Смещение менее 10 cm; иначе отрегулируйте один двигатель программно
4 Данные датчиков считываются Вывести все каналы над линией и над полом Показания каждого канала различаются на сотни отсчётов
5 Калибровка Провести по линии в течение 3 s, затем вывести нормированные значения 0 на полу, около 1000 на линии в каждом канале
6 Положение Передвинуть робота через линию вручную, вывести взвешенное положение Плавное и монотонное — без скачков при пересечении линией границы датчика
7 Только P Использовать только пропорциональный коэффициент, без I и D Робот проходит плавный поворот, слегка колеблясь. Колебания здесь ожидаемы
8 Добавить D Увеличить дифференциальную составляющую, пока колебания не уменьшатся Плавное отслеживание на прямых и плавных поворотах
9 Полная трасса Проехать замкнутый контур с крутым поворотом Проходит круги, не теряя линию
10 Восстановление после потери линии Поднять робота с линии посреди заезда Поворачивает в ту же сторону, в которую уже поворачивал, а не едет прямо

Этап 6 часто пропускают, хотя этого делать не следует. Если сигнал положения скачет при пересечении линией промежутка между двумя датчиками, контур регулирования настроить невозможно: разрыв выглядит как внезапная огромная ошибка, и робот будет дёргаться именно в этой точке на каждом круге. Скачок означает, что массив не откалиброван по каждому каналу либо порог одного канала исключает его слишком рано.

Как выглядит хороший результат

Измерение Сборка для начинающих Хорошо настроенная система
Скорость на прямых 0.15–0.25 m/s 0.4–0.6 m/s
Амплитуда колебаний на прямой ±15 mm Менее ±5 mm
Минимальный радиус поворота ~30 cm ~15 cm
Частота контура 50 Hz 200 Hz или выше
Круги до потери линии Несколько Неограниченно, пока не просядет аккумулятор

Частота контура заслуживает внимания, потому что она незаметно ограничивает всё остальное. Контур, работающий с частотой 50 Hz, видит линию каждые 20 ms, а при скорости 0.5 m/s между решениями робот проходит 10 mm. Удаление каждого вызова delay() из контура и чтение только используемых датчиков обычно повышают частоту первой сборки с 50 Hz до нескольких сотен, и качество отслеживания улучшается без изменения коэффициентов.

Диагностика неисправностей

Симптом Вероятная причина Исправление
Вообще ничего не движется Нет общей «земли» или STBY имеет низкий уровень Соедините все «земли»; подайте на STBY уровень HIGH
Плата перезагружается при начале движения Ток двигателей проходит через Arduino Отдельное питание двигателей; общей остаётся только «земля»
Едет прямо мимо линии Массив не откалиброван или установлен слишком высоко Откалибруйте на этой поверхности; установите высоту 3–8 mm
Следует, но сильно колеблется P слишком велико или D слишком мало Уменьшите P вдвое, затем увеличьте D
Колебания учащаются P значительно слишком велико Снижайте до устойчивого состояния, затем настраивайте от него
Сходит с траектории на прямых Несовпадение двигателей Отрегулируйте программно и повторно проверьте на рабочей скорости
Отклоняется только на низкой скорости Разные пороги статического трения Измерьте мёртвую зону каждого двигателя и компенсируйте отдельно
Теряет линию на крутых поворотах Слишком быстро или массив слишком близко к колёсам Замедлитесь; переместите массив вперёд для большего запаса по времени
Уезжает после потери линии При потере линии ошибка установлена в 0 Сохраняйте последнюю ошибку: ноль означает «по центру»
Работает, затем ухудшается по ходу заезда Проседает аккумулятор, коэффициенты больше не подходят Так и должно быть; замкните контур скорости или примите более короткий заезд
Сбои рядом с окном Внешнее инфракрасное излучение Вычитание при выключенных излучателях или экран для массива

Куда двигаться дальше

Робот, следующий по линии, намеренно служит фундаментом, и три направления непосредственно продолжают эту разработку.

Добавьте обнаружение развилок, и робот превратится в решателя лабиринта по линии — под тем же контуром ПИД-регулятора, но с тонким слоем принятия решений, который классифицирует ветви и запоминает маршрут. Это лучший следующий проект, потому что он повторно использует всё изученное и добавляет одну действительно новую идею.

Добавьте энкодеры, и вместо заданной скважности можно будет поддерживать заданную скорость, полностью устранив проблему ухудшения работы по мере разряда аккумулятора и сделав настройку стабильной на всём заезде.

Увеличьте скорость. Это сложнее, чем звучит, и даёт больше всего знаний. Скорость обнажает каждое приближение: частоту контура становится ограничивающим фактором, массив требуется вынести вперёд для запаса по времени, скорость перед поворотами нужно снижать до их появления, а не после, и колёса начинают проскальзывать. Именно последнее становится главным препятствием; см. раздел о проскальзывании колёс и сцеплении.

Дорожная карта проекта

Путь сборки

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

0 / 15 выполнено

100%
Учебный путь

Управление двигателями

План обучения

Открыть путь
Учебный путь

ПИД-регулирование

План обучения

Открыть путь
Сборка

Подключите робот

45 мин

Сборка

Соберите и запустите на реальной трассе

60 мин

Цель

Робот, следующий по линии, готов

Робот готов

Компоненты

Руководства на этом пути

Попрактикуйтесь до сборки схемы

Настройте его в интерактивном симуляторе

Путь сборки проходит через лабораторию в браузере. Добейтесь правильного поведения здесь, а затем перенесите настройки на реального робота.

Часто задаваемые вопросы

Нужно ли покупать компоненты до начала этого проекта?

Нет. Вся часть проекта, связанная с обнаружением и управлением, работает в браузерном симуляторе, поэтому до покупки компонентов вы можете понять, как робот, следующий по линии, считывает линию, и настроить коэффициенты его ПИД-регулятора. Физические Arduino, ИК-массив и драйвер двигателей нужны только для заключительных этапов сборки — подключения и монтажа.

Сколько времени занимает сборка робота, следующего по линии?

Если компоненты уже есть, первый рабочий робот, следующий по линии, можно собрать за выходные: потратьте после обеда на изучение и настройку обнаружения и управления в симуляторе, затем несколько часов на подключение Arduino, ИК-массива и драйвера двигателей и итерации на трассе из ленты. Настройка, выполненная в симуляторе, переносится напрямую, что устраняет большую часть проб и ошибок.

Что сложнее всего при сборке робота, следующего по линии?

Почти всегда контур управления, а не подключение. Чтобы робот проходил плавные повороты без колебаний, необходимо настроить коэффициенты ПИД-регулятора для конкретных двигателей, высоты датчиков и скорости. Именно поэтому это пошаговое руководство предлагает сначала выполнить настройку в симуляторе: коэффициенты будут близки ещё до того, как робот коснётся пола.

Почему мой робот, следующий по линии, колеблется вокруг линии?

Обычно колебания означают слишком большой коэффициент пропорциональной составляющей, слишком слабое дифференциальное демпфирование или движение со скоростью, которую не поддерживает частота обновления датчиков. Сначала снизьте базовую скорость, затем уменьшите Kp примерно на 20% и немного увеличьте Kd. На реальном оборудовании длительный вызов delay() в контуре добавляет мёртвое время, из-за которого дифференциальная составляющая неэффективна при любом коэффициенте, поэтому интервал управления должен оставаться постоянным.

Сколько ИК-датчиков нужно роботу, следующему по линии?

Пять — практическая отправная точка: их достаточно для вычисления плавного взвешенного положения и определения направления изгиба линии, а подключение и расчёт положения остаются простыми для проверки. Трёх датчиков достаточно для медленной широкой учебной трассы; соревновательные роботы часто используют восемь для более высокого разрешения на большой скорости, но каждый дополнительный датчик — это ещё одна калибровка и ещё один провод, которые нужно подключить правильно.

Как откалибровать ИК-массив отражательных датчиков?

Перед запуском медленно проведите массив по чёрной ленте и белой поверхности, запишите минимальные и максимальные показания каждого датчика, затем нормализуйте текущие показания относительно этого диапазона. Калибровка важна, потому что высота датчиков, отражательная способность поверхности и освещение изменяют исходные значения, а неоткалиброванный массив смещает взвешенное положение, даже когда робот находится по центру.