Урок №11 - Кегельрінг

Вступ:

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

Урок №11 присвятимо розбору змагальної дисципліни під назвою "Кегельрінг".

11.1 Правила змагання. Підготовка поля для проведення змагань.

Основні правила "Кегельрінг" досить прості: необхідно зібрати і запрограмувати робота, який виштовхує кеглі за межі рингу. Кеглями, як правило, виступають жерстяні банки ємністю 0,33 л, а роль рингу виконує біле поле, обмежене чорною окружністю з шириною лінії 50 мм. З одним з варіантів регламенту проведення змагання можете ознайомитися під спойлером нижче:

 

 

Отже: для проведення змагання нам знадобиться поле, точно таке ж, яке ми використовували при вирішенні Завдання №12 Уроку №6 курсу "Перші кроки" . Ви можете завантажити макет відповідного поля на сторінці "Макети полів для тренування і змагань" нашого сайту, а потім роздрукувати його в цифровий друкарні на банерній тканині, або виготовити поле самостійно, використовуючи плакатну папір відповідного розміру, великий циркуль, лінійку і чорну туш.

Бляшані банки найкраще обклеїти по периметру самоклеящейся папером (нам знадобляться 2 - 4 банки білого кольору і стільки ж - чорного).

Реквізит для уроку готовий!

11.2 Конструювання робота для конкретного виду змагання.

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

Настає важливий етап моделювання робота - перед нами стоять дві взаємопов'язаних завдання:

  1. Розробка ключового алгоритму поведінки нашого робота;
  2. Розробка механічної конструкції робота, що дозволяє реалізувати необхідну поведінку.

Розглянемо наступну поведінкову модель:

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

Отже, наш робот повинен:

  1. вміти обертатися на місці навколо своєї осі;
  2. вміти рухатися прямолінійно;
  3. вміти виявляти предмет, віддалений на деяку відстань;
  4. вміти виявляти кордон поля.

Дані вимоги диктують нам умови конструкції робота:

  1. для реалізації перших двох умов застосуємо вже відому нам рухливу платформу, яка використовує два великих мотора і обертову опору (робот-візок);
  2. для виявлення кеглі скористаємося одним з наявних датчиків: інфрачервоним або ультразвуковим;
  3. кордон поля нам допоможе виявити датчик кольору.

Всім умов в повній мірі відповідає наш робот, яким ми користувалися, коли проходили курс "Перші кроки" .

Lego mindstorms EV3 Home
 
Lego mindstorms EV3 Education
small robot 31313 small robot 45544

 

Ви можете скористатися запропонованою інструкцією або зібрати власного робота, що відповідає певним нами вимогам до його конструкції. У процесі складання конструкції не забудьте підключити мотори і датчики до модуля EV3: лівий мотор - до порту "B" , правий мотор - до порту "C" , ультразвукової або інфрачервоний датчик - до порту "2" , датчик кольору - до порту "3 " .

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

11.3 Створення програми для змагання "Кегельрінг".

Детально пропишемо послідовність дій нашого робота для виявлення однієї кеглі на поле:

  1. обертатися навколо своєї осі за годинниковою стрілкою, поки попереду розташований датчик не виявить кеглю;
  2. зупинитися навпроти кеглі;
  3. рухатися вперед, поки датчик кольору не виявить чорну кордон поля;
  4. зупинитися;
  5. рухатися назад в центр поля.

Приступимо до реалізації та налагодженні п. 1, 2 - навчимо нашого робота виявляти кеглю і зупинятися точно навпаки. Спочатку нам необхідно вибрати порогове значення для виявлення кеглі навпроти нашого робота. Для цього завантажимо середу програмування, створимо новий проект - "lessons-2" , нову програму в проекті назвемо "lesson-11" . Підключимо робота до середовища програмування, потім встановимо його точно в центр поля, поставимо напроти робота кеглю.

На "Сторінці апаратних засобів" , що знаходиться в правому нижньому кутку середовища програмування, виберемо вкладку "Подання порту" (Рис. 1, 2 поз. 1) і знімемо показання датчика, що визначає відстань до кеглі, встановивши відповідний режим відображення показань.

У нашому випадку ультразвуковий датчик в режимі "Відстань в сантиметрах" показує значення - 25,9 (Рис. 1 поз. 2) .

Сторінка апаратних засобів. Ультразвуковий датчик.

Мал. 1

Інфрачервоний датчик в режимі "Наближення" показує значення - 48 (Рис. 2 поз. 2)

Сторінка апаратних засобів. Інфрачервоний датчик.

Мал. 2

Як визначити показання датчика, використовуючи дисплей модуля EV3

 

Тепер ми можемо запрограмувати знаходження роботом кеглі:

ультразвуковий датчик

  1. Для того, щоб змусити робота обертатися навколо своєї осі, скористаємося програмним блоком "Незалежне керування моторами" "Зеленої палітри" , Режим роботи блоку встановимо "Включити" , значення потужності для порту "B" встановимо рівним 30 , значення потужності для порту "C" встановимо рівним - 30 (Рис. 5 поз.1) ,
  2. Для пошуку кеглі використовуємо програмний блок "Очікування" "Помаранчевої палітри" в режимі "Ультразвуковий датчик - Порівняння - Відстань у сантиметрах" . Для гарантованого знаходження збільшимо порогове значення спрацьовування датчика до 35 (Рис. 5 поз. 2)
  3. Після того, як робот виявиться навпаки кеглі, використовуючи програмний блок "Незалежне керування моторами" "Зеленої палітри" вимкнемо мотори (Рис. 5 поз. 3) .

Пошук кеглі роботом з ультразвуковим датчиком

Мал. 5

інфрачервоний датчик

  1. Для того, щоб змусити робота обертатися навколо своєї осі, скористаємося програмним блоком "Незалежне керування моторами" "Зеленої палітри" , Режим роботи блоку встановимо "Включити" , значення потужності для порту "B" встановимо рівним 30 , значення потужності для порту "C" встановимо рівним - 30 (Рис. 6 поз.1) ,
  2. Для пошуку кеглі скористаємося програмним блоком "Очікування" "Помаранчевої палітри" в режимі "Інфрачервоний датчик - Порівняння - Наближення" . Для гарантованого знаходження збільшимо порогове значення спрацьовування датчика до 55 (Рис. 6 поз. 2)
  3. Після того, як робот виявиться навпаки кеглі, використовуючи програмний блок "Незалежне керування моторами" "Зеленої палітри" вимкнемо мотори (Рис. 6 поз. 3) .

Пошук кеглі роботом з інфрачервоним датчиком

Мал. 6

Завантажимо вийшла програму в робота і запустимо її на виконання. Раз по раз, виконуючи програму, ми можемо помітити, що наш робот зупиняється не зовсім точно навпроти банки. Пов'язано це з тим, що датчик може виявляти предмет не тільки строго навпроти себе, а й на деякому відхиленні від напрямку погляду датчика. В цьому випадку можна, або після зупинки робота трохи докрутити його на необхідний кут, використовуючи додатковий блок "Незалежне керування моторами" , або поступово збільшувати швидкість обертання, підбираючи параметр потужність (Рис. 5, 6 поз. 1) , поки робот не стане зупинятися точно навпроти кеглі. Наприклад, нам потрібно було збільшити потужність до 50 одиниць для робота, зібраного з освітньої версії набору, і до 40 одиниць для робота, зібраного з домашньої версії набору.

Переходимо до реалізації п. 3, 4 нашої послідовності дій.

Рухатися вперед і зупинятися при перетині чорної лінії ми вже навчилися, коли розбирали Завдання №11 Уроку №6 курсу "Перші кроки" . Встановимо робота таким чином, щоб датчик кольору знаходився точно над чорною кордоном поля і виміряємо його значення в режимі "Яскравість відбитого світла" будь-яким зручним вам способом, розглянутим вище. У нашому випадку вийшло значення, рівне 7 . В якості порогового значення приймемо число 10 .

Додамо до нашої програми виявлення кеглі наступні програмні блоки:

  1. Для того, щоб змусити робота рухатися прямолінійно, скористаємося програмним блоком "Рульове управління" "Зеленої палітри" . Режим роботи блоку встановимо "Включити" , параметр "Рульове управління" = 0 , параметр "Потужність" = 50 . (Рис. 7 поз. 1)
  2. Для пошуку датчиком кольору чорної кордону скористаємося програмним блоком "Очікування" "Помаранчевої палітри" в режимі "Датчик кольору - Порівняння - Яскравість відбитого сигналу", параметр "Тип порівняння" = 4 , параметр "Поріг" = 10 . (Рис. 7 поз. 2)
  3. Після того, як робот перетне чорну лінію, використовуючи програмний блок "Рульове управління""Зеленої палітри" вимкнемо мотори (Рис. 7 поз. 3) .

Рух робота вперед до чорної лінії

Мал. 7

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

Lego mindstorms EV3 Home
 
Lego mindstorms EV3 Education
small robot 31313 small robot 45544
 

Тепер наш робот просто відмінно справляється зі своєю роботою! Залишилося тільки навчити його повертатися в центр кола ...

"Сторінка апаратних засобів" середовища програмування дозволяє нам спостерігати не тільки поточні показники датчиків, а й накопичені показання датчика обертання мотора (Рис. 8 поз. 1) . Натиснувши, на значок мотора, ми можемо вибрати найбільш зручну нам висновок інформації про обертання мотора в "оборот" або "Градусах" (Рис. 8 поз. 2) .

Сторінка апаратних засобів. Датчик обертання мотора.

Мал. 8

Програмний блок "Обертання мотора" "Жовтої палітри" дозволяє отримувати і обробляти це значення в програмі. Режим "Скидання" програмного блоку "Обертання мотора" встановлює нульове значення датчика і відлік оборотів починається спочатку. (Рис. 9)

Програмний блок "Обертання мотора"

Мал. 9

Скористаємося цією можливістю: якщо ми скинемо показання одного з датчиків моторів в 0 (в даному випадку можна обнулити значення будь-якого з моторів "B" і "C" , адже робот поїде прямо, а значить обидва колеса провернути на однакове значення), то після зупинки робота над чорною лінією, можна буде отримати значення датчика в "Градусах" або "оборот" і, подавши його на вхід відповідного параметра блоку "Рульове управління" , змусити робота проїхати точно таку ж відстань. А для того, щоб робот рухався назад, необхідно змінити значення параметра "Потужність" на негативне значення.

Внесемо необхідні зміни в нашу програму:

  1. Перед початком руху вперед скинемо в 0 показання датчика обертання мотора, підключеного до порту "B" (Рис. 10 поз. 1) .
  2. Після зупинки на чорній кордоні поля вважаємо відстань, пройдену мотором "B" в градусах (Рис. 10 поз. 1) .
  3. Отримане значення подамо в параметр "Градуси" програмного блоку "Рульове управління" , значення параметра "Потужність" = -50 (Рис. 10 поз. 1) !

Рух вперед. Повернення в центр поля.

Мал. 10

Завантажимо вийшла програму в робота і переконаємося, що робот знайшов кеглю, виштовхав її за межі поля і повернувся в центр поля!

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

Мал. 11

Програма для робота small-robot 31313

 

Мал. 12

Програма для робота small-robot 45544

Програма готова!

11.4 Змагання "Кегельрінг" з дополнітельм умовою

На сайті myROBOT.ru опубліковані ще два регламенту проведення змагання "Кегельрінг": "Кегельрінг-КВАДРО" і "Кегельрінг-МАКРО" . Основна умова - необхідно виштовхувати за межі поля білі кеглі, залишаючи на місці чорні.

Як навчити робота на відстані визначати колір кеглі? Можна попереду, по ходу руху робота розташувати ще один датчик кольору і, наблизившись до кеглі на відстань 1 - 2 см, визначити її колір, втрачаючи при цьому дорогоцінний час, відведений на виконання завдання. Але, якщо ви уважно вивчили п. 8.2 Уроку №8курсу "Перші кроки" , то вже знаєте, що на показання інфрачервоного датчика в режимі "Наближення"впливає також колір предмета. Проведемо експеримент: встановимо робота з інфрачервоним датчиком в центр поля, навпаки помістимо білу кеглю і зафіксуємо показання датчика. У нашому випадку це значення дорівнює 49 . Тепер навпаки робота встановимо чорнукеглю - показання датчика змінилося і тепер, не дивлячись на однакову відстань, становить 64 . Отже, для успішного виявлення білих кеглів і ігнорування чорних, необхідно вибрати в якості порогового - значення, що знаходиться між цими числами. Число 55повністю задовольняє цій умові. Нам навіть не доведеться переробляти основний алгоритм програми! Спробуйте і переконайтеся в цьому самі!

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

висновок:

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

Категорія: Уроки з LEGO | Додав: admin (05.07.2018)
Переглядів: 1022 | Теги: Кегельрінг, Lego mindstorms EV3 | Рейтинг: 0.0/0
Всього коментарів: 0
Додавати коментарі можуть лише зареєстровані користувачі.
[ Реєстрація | Вхід ]