Положение0
Ошибка по датчику0
Команда мотора0%
Время модели0с

Что происходит сейчас

Датчик Скорость Перерегулирование
P0
I0
D0

Цель и положение
━━ положение ┄┄ цельПоследние 20 с
Вклады регулятора % команды
P I DПоследние 20 с
Измеряем → сравниваем → управляем

Проверь на опыте

Три эксперимента

Опыт сбрасывает время и графики. Коэффициенты и цель можно менять во время движения. Изменение механизма, начального положения или датчика начинает новый опыт.

ЛАБОРАТОРИЯ РЕГУЛЯТОРОВ
Работает без интернета

Робот, держи линию!

Настрой регулятор. Запусти робота. Узнай, почему он поворачивает.

ЭКСПЕРИМЕНТ № 01
Движение по восьмёрке
Свой полигон из PDF Загрузить трассу
Свой полигон

Трасса из PDF

Робот считывает чёрные участки страницы настоящими датчиками модели. Размер страницы задаётся в сантиметрах, включая поля. PDF обрабатывается на этом устройстве.

Пока используется стандартная восьмёрка.

Модуль чтения PDF: Mozilla PDF.js · Apache 2.0

Библиотека и ресурсы встроены в HTML. Интернет для импорта не нужен. После обновления страницы PDF нужно выбрать заново.

Кубок восьмёрки

Один круг. Твой лучший результат.

Таблица рекордов ↓
0.000с
Готов к попытке0 / 8 точек
Полная восьмёрка с места. Настрой робота и нажми на флаг.Рекорд: —
Готов к заезду

Колесо — приблизить к курсору · перетаскивание — переместить поле · 100% — всё поле. Для выбора старта нажми «Установить старт».

Для отображения трассы нужен браузер с поддержкой Canvas.
ИСПЫТАТЕЛЬНЫЙ ПОЛИГОН

Две петли. Разная кривизна.

Левый датчикПравый датчикСледБукс
Ошибка e · −100…1000.00
Управление u0.0%
Время заезда0.0с
Пройдено0см

Что видят датчики

2000 Гц
Левый
0.00
Правый
0.00
e = правый − левый

Датчики 0…100: 0 — чёрное, 100 — белое. Новое измерение на каждом шаге модели — 0,5 мс.

Из чего состоит u

%
P0.0
I0.0
D0.0
Пределы не достигнуты
Колесо Л: 0.0П: 0.0 %
Команда Л: 0.0П: 0.0 %

Корпус, колёса и сцепление

Колёса держат покрытие
0.00м/с
0.0см/с
0°/с
Левое колесоКачение

Проскальзывание вдоль: 0.0 см/с

Правое колесоКачение

Проскальзывание вдоль: 0.0 см/с

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

Ошибка датчиков e окно 12 с
Вклад P, I, D P / I / D
Соревнование регуляторов

Кто быстрее пройдёт восьмёрку?

0 / 6регуляторов с рекордом
Лучший полный круг каждого регулятора в текущих условиях
МестоРегуляторЛучший кругУчастникНастройки рекордаДействие

Можно подбирать скорость, коэффициенты, период регулятора и положение датчиков. Другая трасса, масса, сцепление или условия моторов и датчиков — отдельный зачёт. Таблица относится к модели с инерцией и буксом; результаты прежней модели с ней не сравниваются.

Рекорды сохраняются в этом браузере
Правила зачёта и текущие условия

Один полный круг с места: 7 контрольных точек по порядку и финиш в исходной точке. Старт и финиш фиксируются по центру пары датчиков. Проехать только одну петлю или развернуться у старта недостаточно.

Время модельное: пауза, пошаговый запуск и ускорение просмотра разрешены. Изменение настроек, смена регулятора или толчок во время круга переводят попытку в тренировку. Физика и коэффициенты при этом не ограничиваются. При съезде — сход; после финиша результат фиксируется и модель ставится на паузу.

Рекорд хранит имя на момент старта и все настройки. «Повторить» загружает эти настройки для новой попытки. Рекорды локальные: они не отправляются в интернет.

Последние попытки

    Заглянем в программу

    ПД: ошибка и её изменение

    Как управление превращается в движение

    Команда левого мотора: clamp(v − u, −100, 100). Правого: clamp(v + u, −100, 100). v — базовая команда в процентах; u — поправка в тех же единицах. При u > 0 команда правого мотора больше команды левого. Фактический поворот зависит от инерции и сцепления. Моторы разгоняются постепенно. Сила контакта с полом разгоняет корпус и поворачивает его; при нехватке сцепления колёса скользят. −100 — полный ход назад, 0 — остановка, 100 — полный ход вперёд. В модели 100% соответствует окружной скорости свободного колеса 200 см/с (2 м/с). Скорость корпуса зависит также от нагрузки и скольжения.

    Попробуй сам

    Четыре маленьких открытия

    01

    Почему робот виляет?

    Сравни реле и П. Как меняется след?

    02

    Что умеет D?

    Запусти ПД, затем убери Kd до нуля.

    03

    Где поставить датчики?

    Сравни вынос 3 и 10 см при одной скорости.

    04

    Зачем ограничивать I?

    Моторы немного разные. Сравни два ПИД.

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

    Как научить робота поворачивать

    Задача робота — удерживать чёрную линию между двумя датчиками. Каждый датчик показывает отражение света в шкале 0–100: 0 — чёрное, 100 — белое. Показания обновляются на каждом шаге модели: 2000 раз в секунду, то есть каждую 0,5 мс.

    1. Измеряем ошибку

    e = правый − левый. Если левый видит больше чёрного, его число меньше, e положительна и вклад P направлен на поворот влево. I и D также влияют на итоговый поворот. Ноль может означать и «линия посередине», и «оба датчика на белом». Съезд фиксируется по положению обоих датчиков вне чёрной полосы (идеальный отклик более 96). Шум поступает в регулятор; оценка положения на трассе от него не зависит. Заезд останавливается на этом измерении; время и расстояние больше не растут. Это фиксация состояния модели, а не физическое торможение: последние скорости и команды остаются видны. Кнопка «Новый заезд» или «На старт» сбрасывает результат.

    2. Вычисляем поворот

    Реле выбирает силу поворота по знаку ошибки. P усиливает реакцию на большую ошибку. D учитывает, как она меняется. I накапливает ошибку со временем. Больше слагаемых не гарантирует лучшее движение — всё зависит от настройки.

    ПД · 10 мс и ПД · Δt

    В ПД · 10 мс управление вычисляется на каждом шаге модели — 0,5 мс: D = Kd × (e − errOld). Но errOld перезаписывается лишь раз в 10 мс, после расчёта D. Между записями оно неизменно. Поэтому возраст сохранённой ошибки меняется от 0,5 до 10 мс. В ПД · Δt используется ошибка предыдущего такта регулятора: D = Kd × (e − errOld) / Δt. Здесь errOld обновляется после каждого расчёта, а Δt — период регулятора в секундах; в режиме «Авто» 0,0005 с. Эти режимы имеют разную логику памяти, и простого постоянного пересчёта Kd между ними нет.

    Ограничение I

    На каждом такте I += Ki × e × Δt. В ПИД с пределом I затем ограничивается между I min и I max. Это предел вклада I в поворот, а не суммы всех слагаемых. Сумма u не ограничивается; каждый мотор принимает команду от −100 до 100. В обычном ПИД накопление I не ограничено.

    Почему большие коэффициенты могут раскачивать робота

    По умолчанию команда применяется к мотору сразу, а скорость меняется постепенно из-за инерции. Если задать задержку команды в дополнительных настройках, появляется ещё и ожидание перед её применением. При большом Kp робот может слишком резко исправлять уже изменившуюся ошибку. Большой Kd усиливает не только изменение положения линии, но и шум с шагами показаний датчиков. Например, скачок e на 1 при Δt = 0,0005 с и Kd = 0,1 даёт вклад D = 200.

    Большой коэффициент не всегда означает сильную тряску: результат зависит от выноса датчиков, скорости, задержки и шума. Эти параметры можно менять в дополнительных настройках. Насыщение моторов ограничивает силу движения; слагаемые P, I и D до ограничения могут превышать 100. Задержка — ожидание перед применением команды, инерция — постепенное изменение скорости после неё.

    Инерция и букс

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

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

    Честные условия опыта

    Датчики измеряют линию с фиксированной частотой 2000 Гц. Физика считается шагами не более 0,5 мс независимо от частоты экрана. По умолчанию период регулятора равен 0 — это режим «Авто»: новый расчёт на каждом шаге модели, с фактическим Δt = 0,5 мс. Нулевое значение не означает деление на ноль: D и I используют фактически прошедшее время. В дополнительных настройках можно задать более длинный период, кроме режима ПД · 10 мс, где расчёт всегда идёт на каждом шаге модели. Задержка команды по умолчанию равна нулю. Масштаб времени меняет скорость просмотра, но не шаг регулятора. Пауза останавливает модель. «На старт» очищает I, предыдущую ошибку, след и графики. Пауза без изменения настроек сохраняет состояние. Если изменить настройки на паузе, следующий обычный запуск начнёт новый заезд с места. Смена регулятора очищает его память; коэффициенты можно менять во время движения.

    Модель упрощена: плоский жёсткий корпус и два контакта с полом. Учитываются масса, момент инерции, продольное и боковое скольжение, инерция колёс, падение тяги мотора с ростом скорости и реакция нагрузки. Суммарная сила в каждом контакте ограничена сцеплением μN: разгон, торможение и поворот делят этот предел. Нагрузка на колёса считается одинаковой; перенос веса, деформация подвески и опрокидывание не моделируются. У датчиков есть оптическое пятно, шаг показаний и шум; у команды мотора — настраиваемая задержка, по умолчанию 0 мс. При сбросе повторяется одна и та же последовательность шума, чтобы настройки можно было сравнить. Нулевой шум, шаг показаний или задержка отключают соответствующий эффект. Нулевое сцепление, наоборот, означает пол без трения. Кривая чувствительности датчиков учитывает ширину линии. На пересечении датчик видит обе ветви. Размеры в сантиметрах. Команды моторов и нормированная скорость колёс — в процентах от −100 до 100. Сумма u и коэффициенты программно не ограничиваются; у обычного ПИД нет защиты от накопления I. 100% задаёт полное питание мотора; скорость свободного колеса без нагрузки — 200 см/с (2 м/с). Подходящие здесь коэффициенты не переносятся напрямую на настоящий робот.

    Для преподавателя: документация WPILib о периоде расчёта и ограничении I; кинематика двухколёсного привода; как задержки влияют на устойчивость; почему D усиливает шум измерений; уравнения плоского движения тела; силы трения и предел сцепления; скорость проскальзывания колеса. Здесь используются общие принципы динамики и трения; это упрощённая учебная модель, не автомобильная модель шины Pacejka.