Lego ev3 пропорційно інтегрально-диференціальний регулятор. Міжнародні змагання роботів - Правила - Приклади роботів - Робот для траєкторії на основі LEGO EV3

Робототехніка — новий цікавий напрямок, який, мабуть, далі розвиватиметься в рамках шкільних курсів інформатики та технології. Бум робототехніки багато в чому пов'язаний з тим, що вона дозволяє відповісти на запитання: А навіщо ж ми, власне, вчимо програмування? Крім того, в курсі робототехніки можна познайомитись з елементарними поняттями теорії автоматичного керування.

На цій сторінці представлені розроблені автором тренажери для програмування та плати Arduino. Вони можуть допомогти у випадках, коли з якихось причин немає можливості використовувати реальне апаратне забезпечення.

Тренажери використовують можливості HTML5, тому працюватимуть тільки в сучасних браузерах (найкраще використовувати Google Chrome або Mozilla Firefox).

Новини тепер і в Telegram-каналі

27 листопада 2015 р.
У тренажери додано трасу «зародок» ( М.В. Лазарєв, м. Оріхово-Зуєво).

13 жовтня 2015 р.
Тепер у тренажерах для LEGO-робота можна завантажувати свої траси (поля для робота). Як це зробити? Дивіться.
Додані нові тренажери - LEGO-роботи з двома, трьома, чотирма датчиками освітленості.

Мова керування роботами

Для управління роботами в тренажерах використовується проста мова програмування, яка отримала робочу назву SiRoP (Simple Robot Programming).

Управління роботом з датчиком освітлення

Датчик освітленості дозволяє роботу орієнтуватися на поверхні столу, наприклад, їхати вздовж кордону між білою та чорною областями (краєм чорної лінії). Фотодіод підсвічує поверхню, фотоприймач «ловить» відбиті промені та вимірює їх інтенсивність.

Найбільш популярним завданням цього є рух по лінії. За допомогою тренажера можна вивчити різні закони управління - релейний, пропорційний і навіть ПІД-управління (пропорційно-інтегрально-диференціальне).

Приклади програм для робота з датчиком освітлення

Поки що 1 (якщо датчик > 128 ( мотор = 100 мотор = 0 ) інакше ( мотор = 0 мотор = 100 ) чекати(10) )

KP = 0.2 поки 1 ( u = kP * (датчик-128) мотор = 50 + u мотор = 50 - u чекати (20) )

Main ( поки 1 ( поки датчик > 128 ( мотор = 100 мотор = 100 чекати(10) ) назад() поворот() ) ) назад ( мотор = -100 мотор = -100 чекати(260) ) поворот ( мотор = -50 мотор = 50 чекати(50) )

Управління роботом із двома датчиками освітленості

Два датчики освітленості дозволяють роботу краще орієнтуватися та їхати вздовж тонкої лінії. Вони винесені трохи вперед і розведені убік. Як і для завдань з одним датчиком, за допомогою цього тренажеру можна вивчати різні закони керування.

Приклади програм для робота з трьома датчиками освітлення

Управління роботом із чотирма датчиками освітленості

Чотири датчики освітленості дозволяють роботу краще визначати круті повороти. Внутрішні датчики служать для тонкого регулювання, використовується пропорційне регулювання. Два зовнішніх датчиківвинесені трохи вперед і розведені убік. Вони використовуються тоді, коли трапляється крутий поворот. Коефіцієнт посилення керування за показаннями датчиків зовнішньої пари вибирається більше, ніж для внутрішньої пари (див. Л.Ю. Овсяницька та ін., Алгоритми та програми руху робота Lego Mindstorms EV3 по лінії, М.: "Перо", 2015).

Приклади програм для робота з чотирма датчиками освітлення

Поки 1 ( d0 = датчик > 128 d1 = датчик > 128 d2 = датчик > 128 d3 = датчик > 128 якщо d1 & !d2 ( мотор = 100 мотор = 0 ) якщо! d1 & d2 ( мотор = 0 мотор = 100 ) якщо d1 == d2 ( мотор = 100 мотор = 100 ) якщо d0 & !d3 ( мотор = 30 мотор = 0 ) якщо!d0 & d3 ( мотор = 0 мотор = 30 ) чекати(10) )

K1 = 0.2 k2 = 0.4 поки 1 (u1 = датчик - датчик u2 = датчик - датчик мотор = 50+k1*u1+k2*u2 мотор = 50-k1*u1-k2*u2 чекати(10) )

Управління роботом із датчиком відстані (сонаром)

Датчик відстані (сонар) дозволяє під час руху робота визначити відстань до найближчої перешкоди. Він випромінює ультразвуковий сигнал та приймає відбитий сигнал. Чим більший час між випромінюваним та прийнятим сигналами, тим більша відстань.

Використовуючи датчик відстані можна запрограмувати робота так, що він автоматично пройде лабіринт відомої форми, але невідомих розмірів.

Пропорційний регулятор

Опис

При автоматичному регулюванні вплив u(t) зазвичай є функцією динамічної помилки - відхилення e(t) регульованої величини x(t) від її заданого значення x0(t) :

e(t) = x0(t) - x(t).

Це принцип Ползунова-Уатта регулювання відхилення, або принцип зворотного зв'язку. Математичний вираз функціональної залежності бажаного керуючого впливу u0(t) від вимірюваних регулятором величин називається законом або алгоритмом регулювання, про яке йшлося вище.

Пропорційний регулятор - це пристрій, що чинить вплив на об'єкт пропорційно його відхилення від заданого стану:

Тут k – це коефіцієнт посилення регулятора.

Заданий стан x0 прийнято називати уставкою, а відхилення від нього e-нев'язкою. Далі для визначеності позначатимемо нев'язку скороченням err (від англійського слова"error" - помилка).

Управління двигуном

Досвідчений воїн не розмахуватиме мечем, як це робить робот на релейному регуляторі. Треба вигадати алгоритм, який затримає мотор, що утримує меч, у строго фіксованому положенні (рис. 7.1). У цьому допоможе П-регулятор.

Нехай e 1 - Показники датчика оборотов1 на моторі A - є регульованою величиною. Уставка x0 = 45, а нев'язка e = 45 - e 1. Тоді керуюча дія на двигун задається формулою

u = k ∙ (45 – e 1).

Тут k - коефіцієнт посилення, наприклад 5, який дозволить посилити реакцію двигуна навіть при невеликих відхиленнях від уставки.

1 Не варто плутати математичне позначення нев'язки e (від error) із показаннями енкодера e 1 (від encoder), визначеного змінного середовища Robolab.

При відхиленні в позитивний бікна мотор подаватиметься негативний керуючий вплив, і навпаки. Це керування можна застосовувати до двигуна в циклі з невеликою затримкою 1-10 мс, щоб розвантажити контролер (рис. 7.8).

Мал. 7.8. Алгоритм керування двигуном на пропорційному регуляторі.

Якщо підвищуючий коефіцієнт збільшити з 5 до 100, наш пропорційний регулятор почне працювати як релейний, викликаючи сильні коливання через ефект перерегулювання.

У мові RobotC немає такого зручного позначення показань енкодера як у Robolab, тому програма виглядає трохи довшою:

int k=5, u; nMotorEncoder=0; while(true)

u=k*(45-nMotorEncoder); motor = u;

Далі, щоб завдати «удару мечем», достатньо, маючи замість числа 45 змінну, змінити її значення ззовні, наприклад, з паралельного завдання. Про це написано у розділі, присвяченому роботамбарабанникам у розділі 8.

Нині ж побудуємо регулятор, керуючий як статичним становищем мотора, а й швидкістю його руху. Наслідуючи логіку алгоритму, уставка, яка досі була константою і не змінювалася, має почати рух у бік збільшення чи зменшення. Підкоряючись регулятору, двигун неминуче слідуватиме за нею. Найпростіший інструмент для постійного збільшення значення уставки – це таймер.

У контролері NXT є чотири вбудовані таймери, кожен з яких може відміряти час у десятих, сотих та тисячних частках секунди. Освоїмо перший таймер, який за секунду робить 10 «ти-

ків». У Robolab він позначається T1 або Timer100ms1, а RobotC - timer100.

Кут alpha відхилення двигуна, заданий у попередньому прикладі значенням 45, поставимо в залежність від показань таймера з прискорюючим коефіцієнтом k 2:

alpha = k2 ∙ T1.

Керуюча дія залишиться колишньою з посилюючим коефіцієнтом k 1:

u = k 1 ∙ (alpha - e 1).

Коротко в програмі на мові Robolab керуючий вплив подамо відразу на мотор, попередньо ініціалізувавши таймер

Мал. 7.9. Управління швидкістю мотора – один оборот на секунду.

Коефіцієнт k 2 = 36 визначає, що за секунду значення alpha набігає до 360, що відповідає одному повному обігу двигуна:

int k1=2, k2=36, u, alpha; nMotorEncoder=0; ClearTimer(T1); while(true)

alpha = timer100 * k2; u=k1*(alpha-nMotorEncoder); motor = u;

Використовуючи цілий поділ, прийнятий у мові C (і Robolab) для змінних цілого типу, можна досягти дискретного зміни кута, тобто. збільшення його раз на секунду:

alpha = T 1 / 10 ∙ k 2.

При коефіцієнті k 2 = 60 переміщення балки відповідатимуть руху секундної стрілки на циферблаті годинника. Але це мало

помітно. Для наочності можна задати k2 = 30, тоді стрілка зробить повний оборот за 12 тиків по 30 градусів кожен. Будьте уважні з послідовністю операцій цілісного поділу та множення, при зміні їхнього порядку чи скорочення неодмінно зміниться результат (рис. 7.10).

Мал. 7.10. Прискорена імітація руху стрілки годинника.

І, нарешті, приклад математичного барабанщика. Замість постійного руху вперед стрілка здійснюватиме коливання вперед назад під керуванням П-регулятора. У цьому допоможе операція поділу із залишком, що у мові C позначається знаком %. Залишок від поділу цілого негативного числа на 2 завжди буде 0 або 1:

alpha = T 1 % 2 ∙ k 2.

Підсиливши відхилення в k 2 = 15 разів, отримаємо уставку, що коливається alpha , що змусить регулятор 5 разів в секунду переміщати мотор то в 0º, то в 15 градусів. Зміни у програмі невеликі. Розглянемо приклад на RobotC:

int k1=3, k2=15, u, alpha; nMotorEncoder=0; ClearTimer(T1); while(true)

alpha=timer100%2*k2; u=k1*(alpha-nMotorEncoder); motor = u;

Цей прототип барабанщика завдає ударів по столу через однакові проміжки часу. Головне, стартувати у потрібній позиції. Використовуючи цілочисленну математику, можна задати більш складний ритмічний малюнок, наприклад (табл. 7.1):

alpha = T 1 % 5 % 2 ∙ k 2.

center = S3.

Коефіцієнт визначається циклі:

k 1 = c + (S 3 - center) / k 2.

Мал. 7.36. Рух лінії на пропорційному регуляторі з плаваючим коефіцієнтом.

Отриманий закон управління коефіцієнтами посилення можна застосувати не тільки до пропорційної складової, але й до будь-якої іншої, а також до впливу, що управляє, в цілому (рис. 7.36).

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

Пропорційно-інтегрально-диференціальний (ПІД) регулятор є одним з найбільш популярних і використовується в величезній кількостіпристроїв самих різних типів, в яких потрібна швидкість реакції та точність позиціонування системи. Як випливає з назви, цей регулятор складається із суми трьох компонентів і графічно зображений на рис. 7.37.

Мал. 7.37. Схема ПІД-регулятора.

Це спрощена схема. На вхід регулятора подається значення динамічної помилки e(t), а на виході виробляється керуюча дія u(t):

u (t ) = p + i + d = k p ∙ e (t ) + k i ∙ ò t

e (τ)d τ + k d ∙

de.

Пропорційна складова, що зображена на схемі трикутником, відповідає за позиціонування системи в заданому стані. У деяких випадках може спричинити перерегулювання з наступними автоколиваннями. Тобто П-регулятор може перестаратися і робота почне заносити з боку в бік.

Інтегральна складова накопичує негативний досвід (підсумовує помилки) та виробляє компенсуючу дію. За мінімальних відхилень пропорційна складова «слабшає» та інтегральна, за рахунок свого швидкого збільшення підсумовуванням, допомагає «дотягнути» регульовану величину до уставки.

Диференціальна складова (Д-складова) стежить за швидкістю зміни стану системи та перешкоджає можливому перерегулюванню. У деяких випадках Д-складова протилежна пропорційною за знаком, а в деяких збігається.

З пропорційною складовою ми вже знайомі, диференціальна описана у попередній главі 6. Візьмемося за інтегральну. Ця складова визначається динамічно, підсумовуючи попереднім значенням:

i = i + ki × e (t) × dt.

Фізичний зміст величини e (t ) × dt полягає в тому, що вона про-

порційна тривалість перебування системи може помилки. Оскільки коефіцієнт k i виноситься за дужки, можна говорити про величину i як суму тривалостей помилок. Таким чином, ми знаходимо інтеграл шляхом підсумовування.

Розглянемо застосування ПІД-регулятора на прикладі робота, що балансує на двох колесах. Ця класична задача може бути вирішена за допомогою різних датчиків безліччю способів. У запропонованому прикладі використаний датчик освітленості та найпростіша форма ПІД-регулятора. Однак для досягнення стабілізації робота потрібно використовувати більш точні показання датчика.

Формат RAW

Дані з датчиків надходять у контролер NXT у необробленому «сиром» вигляді. Усі датчики передають операційній системіцифрове значення від 0 до 1023, яке потім обробляється відповідним драйвером і приводиться до зрозумілішого вигляду (відстань 0...255, освітленість 0...100, торкання 0 або 1 і т. д.). Але дані можна отримувати і, минаючи драйвер, безпосередньо. Такий необроблений формат прийнято називати RAW (від англ. "Сирий"). У деяких випадках за допомогою нього можна отримати більшу точність. Так, наприклад, діапазон значень датчика освітленості може збільшитись приблизно в 10 разів. Саме цю можливість використано далі.

Отримувати дані у форматі RAW можна і Robolab, і RobotC. Для цього датчик ініціалізується відповідним чином, а дані з нього зчитуються з використанням спеціальної зумовленої змінної.

Балансуючий робот

Конструкція робота-сигвея зображена на рис. 7.38: вертикально розташований контролер, близько поставлені колеса та датчик освітленості, спрямований вниз. Алгоритм буде дещо складнішим.

Принцип стабілізації сигвею у становищі рівноваги ось у чому. Якщо робот нахиляється вперед, показання датчика освітленості підвищуються з допомогою відбитого світла. У відповідь на це виробляється керуюча дія, що змушує робота їхати вперед і цим знову приймати вертикальне положення.

При відхиленні назад показання датчика знижуються і робот починає рух назад. За це відповідає пропорційна складова. На роль інтегральної та диференціальної складових відводиться страховка від перерегулювання.

Мал. 7.38. Балансуючий робот-сігвей.

На рис. 7.39 представлений алгоритм Robolab. Більшу його частину займає ініціалізація змінних. Для підвищення точності не тільки дані з датчика зчитуються у форматі RAW, але більшість змінних оголошується в речовому форматі float. Власне ПІД-алгоритм знаходиться у циклі.

Мал. 7.39. Алгоритм балансувальника заснований на ПІД-регуляторі.

Наслідуючи традиції руху по лінії, як уставка використовуємо змінну grey - середні показання датчика освітленості в положенні рівноваги. Новий параметр scale визначає масштабування керуючого впливу. По суті, це послаблюючий коефіцієнт, оскільки значення, що виробляється регулятором, занадто високо для моторів NXT. Можна було б внести його всередину вже наявних коефіцієнтів, але RobotC цей параметр буде інший, а коефіцієнти самі.

З наведеними коефіцієнтами робот добре стабілізується на однотонному світлому лінолеумі чи парті. Тобто йому не потрібно білий колірповерхні. Для запуску потрібно досить точно встановити сигвея у положення рівноваги. Якщо робот стартує при певному нахилі вперед або назад, то відразу почне рух у напрямку нахилу.

Аналогічний приклад на RobotC дещо відрізняється з низки причин. По-перше, швидкодія NXT з прошивкою цього середовища вище приблизно в 1.4 рази, ніж у Robolab, тому коефіцієнт scale слід збільшити. По-друге, RAW-значення передаються в правильному порядку і потрібно встановити реверс моторів або просто подавати негативний вплив:

int grey = SensorRaw; int err, errold = 0;

float kp = 25, ki = 350, kd = 0.3; float scale=14;

float dt=0.001; float p, i=0, d, u; while (true)

err = grey-SensorRaw; // Відхилення зі зворотним знаком p = kp * err;

i=i+ki*err*dt; d=kd*(err-errold)/dt; errold=err; u = (p + i + d) / scale; motor = u; motor = u; wait1Msec(1);

Елементи теорії автоматичного управління у школі1

Важливим та цікавим методичним завданням є «перекидання містка» між областями знань спеціаліста та школяра, що допомагає учням школи побачити перспективу майбутньої спеціальності, тобто. здійснити профорієнтацію, а студентам побачити практичну застосовність своїх професійних знань. Для досягнення подібного ефекту були розроблені прийоми розрахунку регуляторів, які використовують математичний апарат, що не виходить за межі шкільних програмз математики та фізики. Зокрема, замість диференціальних рівнянь використані різницеві, що добре відповідають дискретному характеру взаємодії об'єкта та регулятора при комп'ютерному управлінні.

Розглянемо, наприклад, завдання побудови пропорційних (П) та пропорційно-диференціальних (ПД) регуляторів у задачі управління рухом мобільного робота вздовж стіни. Позначимо через x t відстань між роботом і стіною, через θt - курсовий кут робота, а через u t - керуючий вплив у момент з порядковим номером t відповідно де t = 0, 1, 2, ...

реній. Вважається, що опитування датчиків і зміни величини впливу, що управляє, проводиться через рівні проміжки часу h . Для завдань управління Lego NXT роботами природно вважати, що керуючим впливом є різниця кутових швидкостей обертання коліс, пропорційна швидкості зміни курсового кута:

Вважаючи відхилення курсу від номінального θt =0 малими, а середню швидкість робота постійною: vt=v динаміку зміни змінних стану робота в першому наближенні можна описати лінійними рівняннямистану:

де g = h2vr/b.

Задамо бажану відстань до стіни x*> 0 та визначимо мету управління (ЦУ) співвідношенням

xt → x* при t→∞.

Тепер природним чином введемо на змістовному рівні поняття асимптотичної стійкості, як властивості рішень системи (4), що забезпечує досягнення ЦП (5) за будь-яких початкових умов, що досить мало відрізняються від цільових. Легко бачити, що з u t = 0 рішенням рівняння (4) є будь-яке постійне значення x t = x* . Але оскільки рівняння (4), що відповідає моделі подвійного інтегратора (подвійного суматора), не має властивості асимптотичної стійкості, ЦУ (5) при постійному управлінніне досягається. Це легко демонструється як аналітично - підсумовуванням ря-

Це завдання є класичним, ідейно просте, воно може вирішуватися багато разів, і щоразу ви відкриватимете для себе щось нове.

Існує безліч підходів для вирішення задачі прямування по лінії. Вибір одного з них залежить від конкретної конструкції робота, кількості сенсорів, їх розташування щодо коліс і один одного.

У прикладі буде розібрано три приклади робота на основі основної навчальної моделі Robot Educator.

Для початку, збираємо базову модель навчального робота Robot Educator, для цього можна використовувати інструкцію програмне забезпечення MINDSTORMS EV3.

Так само, для прикладів нам знадобляться датчики світла-кольору EV3. Ці датчики світла, як ніякі інші, найкраще підходять для нашого завдання, при роботі з ними, нам не доведеться боїться про інтенсивність навколишнього світла. Для цього датчика в програмах ми будемо використовувати режим відбитого світла, при якому оцінюється кількість відбитого світла червоного підсвічування датчика. Кордони показань датчика 0 – 100 одиниць, для «відсутності відображення» та «повного відображення» відповідно.

Для прикладу ми розберемо 3 приклади програм для руху по чорній траєкторії зображеної на рівному світлому тлі:

· Один датчик, з П регулятором.

· Один датчик, з ПK регулятором.

· Два датчики.

Приклад 1. Один датчик з П регулятором.

Конструкція

Датчик світла встановлюється на балку зручно розташовану на моделі.


Алгоритм

Дія алгоритму заснована на тому, що в залежності від ступеня перекриття, пучка підсвічування датчика чорною лінією, показання, що повертаються датчиком, градієнтно варіюються. Робот зберігає положення датчика світла межі чорної лінії. Перетворюючи вхідні дані від датчика світла, система керування формує значення швидкості повороту робота.


Так як на реальній траєкторії датчик формує значення у всьому своєму робочому діапазоні (0-100), то значенням якого прагнути робот, вибрано 50. У цьому випадку значення передані функції повороту формуються в діапазоні -50 - 50, але цих значень недостатньо для крутого повороту траєкторії. Тому слід розширити діапазон у півтора рази до -75 - 75.

У результаті, у програмі, функція калькулятора є простим пропорційним регулятором. Функція якого ( (a-50)*1.5 ) у робочому діапазоні датчика світла формує значення повороту відповідно до графіка:

Приклад роботи алгоритму

Приклад 2. Один датчик з ПK регулятором.

Цей приклад складено тієї ж конструкції.

Ви напевно помітили, що в минулому прикладі робот надмірно розгойдувався, що не давало йому достатньо розігнатися. Зараз ми намагатимемося трохи покращити цю ситуацію.

До нашого пропорційного регулятора ми додаємо ще й простий кубічний регулятор, який додасть вигин функції регулятора. Це дозволить зменшити розгойдування робота поруч потрібною межею траєкторії, а також здійснювати сильніші ривки при сильному видаленні від неї

Одним із базових рухів у легоконструюванні є прямування по чорній лінії.

Загальна теорія та конкретні прикладистворення програми описано на сайті wroboto.ru

Опишу, як ми це реалізуємо в середовищі EV3, оскільки є відмінності.

Перше, що потрібно знати роботу – значення “ідеальної точки”, розташованої на межі чорного та білого.

Розташування червоної точки на малюнку якраз відповідає цій позиції.

Ідеальний варіант розрахунку – виміряти значення чорного та білого та взяти середнє арифметичне.

Зробити це можна вручну. Але мінуси видно одночасно: протягом навіть невеликого часу освітленість може змінитися, і вираховане значення виявиться неправильним.

Отже, можна змусити це робити робота.

У ході експериментів ми з'ясували, що вимірювати і чорне, і біле необов'язково. Можна виміряти лише біле. А значення ідеальної точки розраховується як значення білого, ділене на 1,2 (1,15), залежно від ширини чорної лінії та швидкості руху робота.

Розраховане значення слід записати в змінну, щоб потім звертатися до нього.

Розрахунок "ідеальної точки"

Наступний параметр, що бере участь у русі – коефіцієнт повороту. Чим він більший, тим різкіше робот реагує зміну освітленості. Але занадто велике значенняпризведе до "виляння" робота. Значення підбирається експериментально індивідуально кожної конструкції робота.

Останній параметр – базова потужність двигунів. Вона впливає швидкість руху робота. Збільшення швидкості руху призводить до збільшення часу реагування робота на зміну освітленості, що може призвести до вильоту з траєкторії. Значення теж підбирається експериментально.

Для зручності ці параметри теж можна записати в змінні.

Коефіцієнт повороту та базова потужність

Логіка руху чорною лінією така: вимірюється відхилення від ідеальної точки. Чим воно більше, тим більше робот повинен прагнути повернутися до неї.

Для цього вираховуємо два числа - значення потужності кожного з моторів і окремо.

У вигляді формул це виглядає так:

Де Isens – значення показань датчика освітлення.

Нарешті, реалізація у EV3. Найзручніше оформити у вигляді окремого блоку.

Реалізація алгоритму

Саме такий алгоритм було реалізовано у роботі для середньої категорії WRO 2015

Пропорційний регулятор - це пристрій, що чинить вплив u(t) на об'єкт пропорційно його лінійному відхиленню e(t) від заданого стану x0(t);

e(t)=x0(t)-x(t), де x(t) - стан на даний момент часу;

u(t)=ke(t), де k - підсилюючий коефіцієнт.
Тобто чим далі робот відхиляється від заданого курсу, тим активніше повинні працювати мотори, вирівнюючи його.

Рух по лінії з одним датчиком освітленості за допомогою П-регулятора

Рух по межі чорного та білого також можна побудувати на П-регуляторі. Хоча зовні завдання представляється вирішуваної лише з допомогою релейного регулятора, оскільки у системі присутні лише два видимих ​​людському оку стану: чорний і білий. Але робот все бачить інакше, для нього немає різкої межі між цими квітами. Можна сказати, він короткозорий і бачить градієнтний перехід відтінків сірого.

Ось це і допоможе збудувати П-регулятор.
Визначаючи стан роботи як показання датчика освітленості, навчимося надавати пропорційний керуючий вплив на мотори за наступним законом:
e=s1-grey, де s1 – поточні показання датчика, а grey – задане значення.

Коефіцієнт k (рівний у цьому прикладі 2) має бути досить малий (від 1 до 3). Такий регулятор ефективно працює тільки для малих кутів відхилення, тому робота треба ставити у напрямку руху так, щоб датчик виявився ліворуч від чорної лінії. Неважко помітити, що рух лінії на П-регуляторі відрізняється плавність. і на деяких ділянках робіт рухається практично прямолінійно або точно повторюючи вигин лінії.

Калібрування датчика

Звернемося до 48, використаному у формулі. Це середнє арифметичне показання датчика освітленості на чорному та білому, наприклад (40+56)/2=48. Однак показання датчиків часто змінюються з різних причин: інша поверхня, зміна загальної освітленості у приміщенні, невелика модифікація конструкції тощо. Тому проведемо калібрування робота вручну, визначивши показання датчика освітленості на білому та чорному.

Рух по лінії з двома датчиками освітленості за допомогою П-регулятора
Правильно проїхати перехрестя з одним датчиком освітленості досить складно. Якщо потрібно зробити це з досить високою швидкістю, потрібно хоча б два датчики, поставлені на відстані дві ширини лінії (або ширше).
При русі можливі чотири стани датчика:

  • обидва білому - рух прямо;
  • лівий (s1) не чорному, правий (s2) на білому - рух ліворуч;
  • лівий на білому, правий на чорному - рух праворуч;
  • обидва на чорному – рух прямо.
Т.о. при рівних показаннях датчика (обидва білі або обидва чорні) робот їде прямо. Перед запуском робота проведемо автокалібрування обох датчиків. Тоді алгоритм руху по лінії з П-регулятором виглядатиме в.о.:

Коефіцієнт k може змінюватися в досить широкому діапазоні (від 1 до 20 і більше) залежно від кривизни лінії, маневреності робота та різниці між чорним та білим на полі.
Важлива умова. Автокалібрування повинне проводитися на одноколірній поверхні і бажано при тій освітленості, яка займатиме найбільшу частину шляху. Наприклад, якщо робот їде вздовж чорної лінії білому полі, то калібрувати треба білому. Тобто. становище робота при старті має бути таким:


І ще зауваження. Трапляються датчики, показання яких розходяться на 10-20%. Бажано їх не ставити в парі на регулятор з великим коефіцієнтом, оскільки при різкій зміні загальної освітленості навіть на білому однорідному полі відхилення можуть виявитися різними, що призведе до несподіваних наслідків.