Как запрограммировать ручной следящий за mBot с помощью XOD PID-контроллера

Сегодня мы познакомимся с узлом pid-controller при работе на платформе XOD. Пропорционально-интегрально-производный регулятор или ПИД-регулятор - это механизм обратной связи контура управления, используемый в системах автоматического управления для поддержания значения измеряемого параметра. Мы не будем вдаваться в подробности того, как работает этот механизм, или анализировать его математические функции. Вместо этого мы попытаемся понять использование PID-контроллера в среде визуального программирования XOD.

Вы всегда можете узнать больше об устройстве ПИД-регулятора из других источников, например, из Википедии.

ПИД-регуляторы в основном используются в различных приложениях, таких как системы электрического отопления и охлаждения. Они известны своей точностью и эффективностью, поэтому вы можете даже найти некоторые из них дома. Не спешите разбирать холодильник, ведь у нас есть платформа mBot от Makeblock для программирования ПИД-регулятора в качестве примера.

На картинке выше изображен mBot. На нем установлена ​​плата mCore с «ультразвуковым датчиком Me», подключенным ко второму порту RJ25, и пара двигателей, подключенных к портам M1 и M2. Доска mCore специально разработана для mBot. Он основан на Arduino Uno и поэтому совместим с XOD.

Давайте воспользуемся XOD, чтобы запрограммировать простого бота-последователя, который будет поддерживать заданное расстояние до объекта перед собой с помощью ультразвукового датчика. Базовый узел XOD pid-controller поможет нам прояснить это признание.

Изготовление патча

Во-первых, mBot - это движущийся бот, поэтому нам нужно разместить узел mbot-motor на патче.

Этот узел используется для управления двигателями и находится в библиотеке gabbapeople/mbot-lib, которая была создана, чтобы упростить программирование mBot. Следуйте по пути File > Add library > gabbapeople/mbot-lib в меню, чтобы добавить его в свой проект.

Узел mbot-motor состоит из двух входных контактов M1 иM2 в соответствии с соответствующими двигателями, подключенными к портам M1 и M2 на плате mCore. Нулевое значение на штифте означает, что двигатель не движется. Положительное значение заставляет колесо двигаться назад, а отрицательное - вперед. Поэтому, если вы хотите, чтобы mBot развернулся, вы можете просто установить значения M1 и M2 с противоположными знаками.

На следующем этапе мы размещаем узелmbot-ultrasonic-sensor. Этот узел используется для ультразвукового датчика Makeblock. Он вычисляет расстояние до препятствия и выводит результат через контактDIST в метрах. PORT значение входного контакта равно номеру RJ25 порта, к которому подключен датчик.

«Ультразвуковой датчик Me» имеет желтую этикетку, поэтому мы подключаем его к желтому помеченному порту 2 на плате контроллера и помещаем значение 2 в контакт PORT.

Давайте свяжем узлыmbot-ultrasonic-sensor и mbot-motors через узелpid-controller.

Узел pid-controller будет отслеживать изменения расстояния между заданным значением и потоком нечетких значений, полученных от датчика. После расчетов узел выдаст скорость двигателя согласно нашим параметрам.

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

Узел mbot-motors принимает значения скорости двигателя в диапазоне от 0 до 1. Если скорость недостаточно высока, двигатели начинают гудеть. Чтобы избежать этого звука, мы добавили небольшую галочку. Когда значение скорости больше -0,2 и меньше 0,2, оно сбрасывается на 0.

Взгляните на готовый патч для нашего бота-помощника.

ПИД-регулятор

Пришло время выяснить, какие параметры есть у узла pid-controller и как их использовать.

ПИД-регулятор вычисляет значение «ошибки» как разницу между измеренным входным значением и желаемой уставкой. Контроллер пытается минимизировать ошибку, регулируя выход. Для управления выходом ПИД-регулятор использует коэффициенты Kp, Ki и Kd, которые основаны на изменениях ошибок.

В нашем примере концепция ошибки - это разница между текущим расстоянием от датчика и расстоянием, которое мы хотим, чтобы mBot удерживал.

Вывод IN - вывод измеряемого значения. В нашем случае он получает значение расстояния, которое может изменяться от 0 до 4 м.

TARG pin - это вывод для желаемой уставки. В TARG мы указываем расстояние, которое должен выдерживать наш mBot. В этом случае мы хотим, чтобы mbot сохранял расстояние 15 см до любого объекта перед ним, поэтому мы указываем значение 0,15 в поле.

Kp pin - коэффициент пропорциональности. Коэффициент Kp пропорционален текущему значению ошибки.

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

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

Конкретных значений коэффициентов Kp, Ki, Kd нет. Каждая система с ПИД-регулятором имеет индивидуально настроенные оптимальные соотношения. Мы собираемся выбирать параметры вручную.

Коэффициент Kp

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

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

Коэффициент Kp также может быть отрицательным. Вы должны использовать его, когда вам нужно, чтобы ПИД-регулятор выводил отрицательное значение, а изменение ошибки положительное.

Поместим значение 5 в поле Kp и оставим коэффициенты Ki иKd равными нулю. Теперь давайте посмотрим на поведение mBot после установки патча на плату mCore.

Мы устанавливаем относительно небольшое значение коэффициента Kp. При изменении расстояния скорость двигателей меняется медленно. Что будет, если значение Kp будет равно 90?

Теперь при изменении расстояния обороты моторов увеличиваются слишком быстро и резко. Более того, когда mBot начинает движение, он подпрыгивает, как гоночная машина. Похоже, нам нужно экспериментально найти среднее значение Kp. Установим Kp равным 40.

Kd коэффициент

Теперь давайте попрактикуемся со значением Kd. Kd описывает, как быстро изменяется реакция ПИД-регулятора на значение ошибки.

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

Например, теперь мы меняем значение расстояния в TARG на 40 см (0,40) и оставляем значение Kd равным нулю. После установки патча мы создаем непрерывную смену препятствий перед mBot.

Контроллер с нулевым значением Kd не реагирует достаточно быстро на такое изменение препятствия. В результате мбот попадает в картонную коробку. Чтобы сделать нашу систему более чувствительной, мы меняем значение Kd на 10.

Теперь гораздо лучше. Специально для вашего устройства изменение значения Kd заставляет узел pid-controller реагировать быстрее или медленнее.

Коэффициент Ki

Коэффициент Ki предназначен для устранения постоянно возникающей ошибки.

Представьте, что мы собираемся бесконечно отодвигать препятствие от робота. Поначалу робот не будет отставать от нас, так как интегральная погрешность будет довольно небольшой. Однако по прошествии значительного периода времени робот будет отставать на очень большом и видимом расстоянии. В этом случае изменение коэффициента Ki решит проблему.

При изменении Ki, коэффициент не дает видимых изменений.

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

Хотя в ваших проектах с узлом pid-controller это значение может быть очень полезным! Например, если вы работаете с неточностью датчиков температуры или давления, смело экспериментируйте.

Заключение

Мы приобрели опыт работы с узлом PID-контроллера и поняли, что работать с ним в XOD довольно просто.

В следующей статье мы опишем более сложный пример проекта узла pid-controller и запрограммируем робота-последователя линии на платформе mBot.