Симулятор следования по линии: настройка в браузере
Создайте виртуального робота для следования по линии, отобразите датчики и настройте ПИД-регулятор (PID) в интерактивном браузерном симуляторе робототехники.
- Категория
- Arduino
- Время
- 45–90 min
- Платформа
- Браузер · Arduino
01 / Начните здесь
Введение
Робот, следующий по линии, превращает показания датчиков в коррекции руления. Этот проект позволяет нарисовать трассу, изменить геометрию робота и датчиков, а затем увидеть, как детерминированный ПИД-регулятор реагирует в реальном времени. Используйте его, чтобы связать теорию управления с поведением, которое вы увидели бы у робота на Arduino на физической трассе.
Live lab / Deterministic 60 Hz model
Line follower simulator
Run the starter track, tune the controller, or pause and draw a course of your own.
Bright nodes are sensors currently detecting the track. The lavender heading line shows steering output. Drawing pauses the robot automatically.
- Elapsed
- 0.0 s
- Distance
- 0 units
- Line error
- 0.000
- Steering
- 0.000
- Track contact
- 100%
Keyboard: focus the course, then use Space to run/pause, N to step, R to reset, D to draw, and F for full screen.
Управление
Используйте пресеты трасс, чтобы задать базовый режим, или приостановите запуск и рисуйте прямо на трассе. Скорость робота определяет, насколько далеко шасси продвигается за обновление. Количество датчиков и расстояние между ними изменяют поле зрения. Элементы P, I и D меняют отклик руления; Шаг выполняет одно детерминированное обновление на паузе.
Начните с умеренной скорости, пяти датчиков и коэффициентов по умолчанию. Изменяйте одну переменную за раз и сравнивайте ошибку, время круга и показатели времени на трассе.
Теория
Линейка датчиков измеряет отражение перед роботом. Каждый активный датчик добавляет свою знаковую позицию к взвешенному среднему. Центр планки соответствует нулевой ошибке; показания слева или справа от центра дают отрицательную или положительную ошибку.
Регулятор объединяет три слагаемых:
$$u(t) = K_p e(t) + K_i \int e(t)dt + K_d \frac{de(t)}{dt}$$
Коррекция $u(t)$ ускоряет одно колесо и замедляет другое. Пропорциональное управление реагирует на текущее отклонение, интегральная составляющая устраняет постоянное смещение, а производная составляющая демпфирует быстрые изменения.
Алгоритм
- Считывайте все датчики через фиксированный интервал.
- Вычисляйте взвешенное положение линии и нормализуйте его относительно центра.
- Используйте последнее наблюдавшееся направление линии, когда её теряют все датчики.
- Обновляйте интегральную и производную составляющие с тем же фиксированным шагом времени.
- Ограничивайте коррекцию, вычисляйте команды левого и правого двигателей и интегрируйте позу робота.
Настройте пропорциональный коэффициент до прохождения плавных поворотов, добавляйте производную до затухания колебаний и вводите только минимальную интегральную составляющую, необходимую для устранения повторяющегося смещения.
Исходный код
Браузерный симулятор и микроконтроллер используют одинаковую структуру управления. Компактный цикл в стиле Arduino выглядит так:
float integral = 0.0f;
float previousError = 0.0f;
void controlStep(float dt) {
float error = readWeightedLinePosition();
integral = constrain(integral + error * dt, -2.0f, 2.0f);
float derivative = (error - previousError) / dt;
float correction = kp * error + ki * integral + kd * derivative;
setMotorSpeeds(baseSpeed - correction, baseSpeed + correction);
previousError = error;
}
Поддерживайте стабильный реальный интервал управления. Переменная задержка меняет производную и интегральную составляющие, даже если коэффициенты остаются прежними.
Допущения и отличия от реального оборудования
Это учебная модель, а не копия реальной конструкции. Трасса — плоская двухцветная полоса с высоким контрастом, без изменений окружающего освещения, поэтому линейка датчиков видит идеальные чёрный и белый цвета; на реальной ленте, при комнатном освещении, бликах поверхности и изменении высоты датчиков показания меняются, и их нужно калибровать по инструкции по соединениям. Хронометраж идеален: регулятор работает с фиксированным интервалом без дрожания delay(), тогда как физический цикл Arduino меняется из-за другой работы, и это дрожание меняет отклик ПИД-регулятора. Шасси кинематическое: колёса не проскальзывают, двигатели реагируют мгновенно, а напряжение аккумулятора не проседает. Считайте найденные здесь коэффициенты близкой отправной точкой, а после калибровки заново настройте их на реальном роботе.
Схема соединений
Подключите выходы датчиков к аналоговым входам, соедините общие провода всех модулей и управляйте двигателями через H-мост, а не непосредственно выводами контроллера.
Проверьте номинал источника питания двигателей и установите локальную развязку рядом с контроллером и драйвером. Никогда не направляйте ток двигателей через логический стабилизатор отладочной платы.
Управляемые эксперименты
Каждый из них изолирует одну переменную — именно это по-настоящему трудно сделать на реальной аппаратуре, где всё меняется одновременно.
1. Найдите критический коэффициент усиления, затем уменьшите его вдвое
Установите интегральную и производную составляющие в ноль и увеличивайте пропорциональный коэффициент, пока робот не начнёт устойчиво колебаться на прямом участке — перемещаясь с постоянной амплитудой, а не растущей или уменьшающейся. Уменьшите полученное значение вдвое.
Теперь у вас есть отправная точка Kp, полученная из измерения, а не догадки, и она будет близкой. Добавляйте производную, пока колебания не затухнут.
2. Докажите, что коэффициенты зависят от скорости
Настройте робота так, чтобы он чисто проходил трассу при низкой базовой скорости. Теперь увеличьте скорость вдвое и прогоните с теми же коэффициентами, ничего не меняя.
Он начнёт перемещаться зигзагом, срезать углы или терять линию. Регулятор не изменился, но та же коррекция руления теперь даёт большее изменение курса на единицу пути, поэтому эффективный коэффициент вырос вместе со скоростью. Каждая настройка относится к определённой скорости, поэтому соревновательный робот замедляется перед поворотами, а не использует один коэффициент везде.
3. Посмотрите, как количество датчиков меняет возможности
Пройдите одну и ту же трассу с теми же коэффициентами и тремя, пятью и восемью датчиками.
| Датчики | Сигнал положения | Влияние на настройку |
|---|---|---|
| 3 | Грубый, фактически три области | Проходит, но не может быть точно настроен — ошибка квантуется |
| 5 | Достаточно гладкий для пропорционального руления | Обычное оптимальное решение |
| 8 | Более точный | Позволяет увеличить коэффициенты и скорость до появления колебаний |
Интересный результат: больше датчиков повышает верхнюю границу, а не улучшает нижнюю. На низкой скорости трёх датчиков достаточно. Дополнительное разрешение начинает окупаться только на скоростях, где грубый сигнал ошибки становится ограничивающим фактором.
4. Намеренно сломайте робота на резком углу
Увеличивайте скорость, пока робот не потеряет линию на самом крутом углу. Посмотрите, что он сделает дальше. Затем подумайте, что должен делать настоящий робот: движение прямо — худший вариант, потому что линия уходила в сторону.
Именно поэтому при потере линии удерживают последнюю ошибку, а не обнуляют: ноль означает «центрирование» и командует полной скоростью прямо. Удержание последней ошибки заставляет робота поворачивать в ту сторону, в которую он уже поворачивал, то есть туда, куда ушла линия.
Что следует наблюдать
| Симптом на графике | Причина | Исправление |
|---|---|---|
| Устойчивое зигзагообразование на прямых | Kp слишком велик или Kd слишком мал |
Уменьшите Kp, затем увеличьте Kd |
| Колебания растут | Kp выше предельного коэффициента |
Уменьшите его |
| Широкое медленное срезание углов | Слишком быстро для времени реакции датчиков | Замедлитесь или переместите массив вперёд |
| Рваный сигнал управления | Kd действует на зашумлённое положение |
Отфильтруйте или уменьшите Kd |
| Всегда проходит немного не по центру | Неравномерная калибровка отдельных датчиков | Нормализуйте каждый канал по собственному диапазону |
| Теряет линию и едет прямо | Ошибка обнулена при потере линии | Удерживайте последнюю ошибку |
Переход к реальному оборудованию
| Эта лаборатория | Настоящий робот |
|---|---|
| Цикл с идеально постоянным периодом | Дрожание, если не измерять dt; вызов delay() делает Kd неработоспособным |
| Идеальная калибровка | Её нужно повторять перед каждым запуском на реальной поверхности |
| Двоичная контрастная трасса | Блестящая лента, пыль и окружающий инфракрасный свет снижают контраст |
| Нет проскальзывания колёс | Проскальзывание на скорости и две разные мёртвые зоны двигателей |
| Двигатели реагируют мгновенно | Оба колеса начинают вращаться при разной скважности |
| Постоянный аккумулятор | Напряжение проседает, поэтому та же рабочая доля даёт меньшую скорость по мере хода |
Найденные здесь коэффициенты переносятся как близкая отправная точка, а процедура настройки переносится полностью. Ожидайте повторной настройки на своей ленте и ожидайте, что главное улучшение на реальном роботе придёт не от коэффициентов, а от частоты контура: первая конструкция часто работает на 20–50 Hz и может достичь нескольких сотен, просто убрав блокирующие вызовы. Полная сборка приведена в сборке робота для следования по линии.
Список оборудования
Компоненты
- Arduino Uno или совместимый контроллер
- От трёх до девяти ИК-датчиков отражения
- Два редукторных двигателя постоянного тока (DC) и колёса
- Двойной драйвер двигателей на H-мосте
- Аккумуляторный блок, шасси и опорный ролик
Исследуйте граф
Где используется этот симулятор
Проекты, учебные пути и руководства, которые опираются на эту лабораторию.
Продолжайте сборку
Материалы для загрузки
Пользуйтесь этими справочными материалами на странице, пока работаете над проектом. Загружаемые пакеты проекта появятся только после публикации их исходников и версии.
Частые вопросы
Часто задаваемые вопросы
Почему робот колеблется вокруг линии?
Колебания обычно означают, что пропорциональный коэффициент слишком велик, демпфирование производной слишком мало или робот движется быстрее, чем может поддерживать частота обновления датчиков. Сначала уменьшите скорость, затем настройте P и D. На физическом роботе частой скрытой причиной является длительный вызов delay() в цикле: добавленное им мёртвое время делает производную неэффективной независимо от её настройки.
Сколько датчиков должен использовать робот, следующий по линии?
Пять датчиков — полезная отправная точка: они показывают направление и величину ошибки, сохраняя понятный расчёт взвешенного положения. Три датчика работают на низких скоростях, а соревновательные роботы часто используют восемь для более точного разрешения положения на высокой скорости.
Почему мой робот теряет линию на резких поворотах?
Шасси движется быстрее, чем линейка датчиков успевает отслеживать кривую, поэтому линия покидает линейку до того, как регулятор отреагирует. Уменьшите скорость, расширьте линейку датчиков или увеличьте частоту обновления датчиков. Хороший регулятор также использует последнее известное направление линии, когда все датчики её теряют, чтобы повернуть обратно к линии, а не уехать прямо.
Какие ИК-датчики использовать для следования по линии: аналоговые или цифровые?
Аналоговые датчики отражения сообщают непрерывное значение, что позволяет вычислить плавное взвешенное положение линии и рулить пропорционально. Цифровые датчики сообщают только включено или выключено после внутреннего порога, что проще, но даёт более грубую информацию о положении. Этот симулятор моделирует аналоговый подход со взвешенным положением.
Как откалибровать массив ИК-датчиков?
Перед запуском проведите датчики по линии и фону и запишите минимальное и максимальное показание каждого датчика, затем нормализуйте текущие показания относительно этого диапазона. Калибровка важна, потому что высота датчиков, отражательная способность поверхности и окружающий свет изменяют исходные значения, а некалиброванный массив смещает взвешенное положение.
Какие начальные значения ПИД-регулятора подходят для Arduino-робота, следующего по линии?
Считайте опубликованные коэффициенты отправной точкой, а не готовым ответом для копирования: реакция двигателя, высота датчиков, напряжение аккумулятора, отражательная способность поверхности и время цикла меняют коэффициенты, необходимые физическому роботу. Начните только с пропорциональной составляющей, увеличивайте её, пока робот не пройдёт плавные повороты с небольшим покачиванием, затем добавьте производную для устранения колебаний и очень малую интегральную составляющую только при повторяющемся смещении.
Дополнительные материалы
Источники
Авторитетные источники, чтобы пойти глубже ограниченной учебной модели этого симулятора.