Зібрати робота сумо зі збирання. Міжнародні змагання роботів — Правила — Вільна категорія — Вільна категорія

Зібрати робота сумо зі збирання. Міжнародні змагання роботів — Правила — Вільна категорія — Вільна категорія


ПРОГРАМА" РОБОТА МІНІ-СУМО. Заключна стаття зі збирання робота міні-сумо. У першій частині статті "Шасі для робота міні-сумо" було детально розказано про те як виготовити шасі робота. У цій статті докладно розберемо складання програми для робота. Наш робот готовий. У нього є шасі, функцію «мозків» виконає мікроконтролер, а зв'язок із зовнішнім світом здійснять датчики. життя, так би мовити, відчути себе «творцем» остаточно.


1. Основа програми-алгоритм.

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

Не використовуватиму наукові терміни, скажу просто, Алгоритм - це опис послідовності деяких дій. Все наше життя – це різні дії; ми ходимо, говоримо, рухаємо руками та ногами, крутимо головою. У цього є свій сенс - алгоритм, послідовність, що визначає наше поведінка, і його можна скласти і описати. Для наочності наведу приклад із життя. Ви щоранку чистите зуби. Спробуйте описати, як ви це робите, як би складіть програму для себе. Ось що вийде: Беремо зубну щітку. Видавлюємо пасту. Чистимо зуби рухами вліво-вправо. Полощемо рот. Моєму щітку».

В принципі все правильно, але цю маленьку програму ми можемо виконати в обід, увечері або після кожного прийому їжі. Але ми не врахували важливих факторів, які можуть звести на НІ всі наші старання. Спочатку ми говорили про ранок. Це важливий фактор і якщо його не врахувати, то чистити зуби доведеться лежачи в ліжку та із заплющеними очима. Тому завжди будь-яка програма має мати якийсь початок і кінець з можливістю повторення циклу. циклом, Що Повторюється, для людини є наступний день, де знову буде ранок, і знову потрібно буде чистити зуби. Тому додамо до нашої програми наступний алгоритм (послідовність дій).

«Прокинутися. Встати з ліжка...» Якщо на цьому етапі зупинити створення алгоритму і перейти одразу до чищення зубів, то програма застопориться (зависне). Чому? Тому що ми знову не врахували всіх факторів. Ви стоїте посеред своєї спальні та не можете виконати наступну команду; «Беремо зубну щітку», тому що щітка знаходиться у ванній, а до неї потрібно ще дійти. Ну, якщо ви спите у ванній, то немає проблем – програма виконається! Але здебільшого нормальні люди сплять в іншій кімнаті. Такий підхід називається логічним, тобто осмисленим. Всі наші дії повинні бути розумними і містити певний зміст, інакше поставленої мети не буде досягнуто. Тому «Прокинутися. Встати з ліжка. Піти у ванну», буде найкращим варіантом.

Повернемося до роботи. Як же тепер нам скласти план дій робота міні-сум на рингу? У нас є правила, де чітко позначено мету - «Виштовхнути противника за межі рингу». Але для її досягнення слід враховувати певні чинники. Основний фактор це не вийти за межі кола самому, а якщо бути точнішим, то не вийти за білу межу кола. Ось що в нас вийшло:

Мал. 1 Алгоритм поведінки робота на рингу.

На малюнку 1 бачите блок-схему. За всіма правилами, саме так заведено складати алгоритми. Наочно та зрозуміло.

Перший блок – «Початок». З цього моменту програма розпочинає виконання дій робота після включення. Перше, що він повинен зробити - це знайти супротивника, блок «Пошук мети». Наступний блок нашої схеми у вигляді ромбіка «Мета знайдена?». Це означає, що перед нами стоятиме вибір дій щодо досягнення певної події. Якщо мету знайдено (Так), то ми продовжимо виконання програми і перейдемо до наступної частини програми «Атакувати», але якщо мету не знайдено (Ні), то найлогічніше продовжити її пошук. Програма зациклиться на цьому моменті, доки робот не виявить супротивника. При атаці робот рухається вперед на противника, намагаючись виштовхнути його за межі рингу, в цей момент працює блок «Досягнуто край рингу?», якщо край рингу не досягнуто, то атака продовжується, але якщо датчики виявили білу смугукраю, то атака припиняється і програма переходить до наступного блоку «Від'їжджаємо назад» та «Розворот». Після розвороту цикл основної програми повторюється, тобто вона починається з самого початку і робот знову шукає супротивника. Так зроблено недарма. Якщо в момент атаки противнику вдалося втекти від нашого робота, то ми повинні повернутися до його пошуку не виїхавши за край рингу. З теорією все. Перейдемо до практики.

2. Правила написання програм для Arduino.

Хоч я й казав, що з теоретичною частиною покінчено, але нам слід вивчити принцип побудови програми для мікроконтролерів Arduino, хоча ці принципи будуть вірними і для інших МК сімейства AVR.

Мал. 2 Метод написання програми Arduino.

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

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

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

3. Засіб розробки Arduino IDE.

Завантажте із сайту Arduino.ru останню версію Arduino IDE. Програма не вимагає якоїсь спеціальної установкидостатньо розпакувати вміст архіву в потрібне місце. Наприкінці цієї статті знаходиться файл бібліотеки УЗ далекоміра Ultrasonic. Його слід розпакувати в папку Libraries.

Запускаємо програму. Перевіряємо правильність установки бібліотеки, заходимо в меню, "Файл" - "Приклади". Майже в самому низу має з'явитися пункт Ultrasonic, як на рис. 3.

Мал. 3 Перевірте правильність встановлення бібліотеки Ultrasonic.

Якщо все нормально, переходимо до пункту «Сервіс» – «Плата». Нам необхідно вибрати нашу плату - Arduino Pro Mini 5v.

Мал. 4 налаштування плати контролера

Послідовний порт необхідно вибрати той, який з'явиться після підключення Arduinoдо комп'ютера. Слід сказати трохи з приводу Arduino Pro Mini. На відміну від інших контролерів сімейства Arduino, Pro Mini не має вбудованого модуля з'єднання з комп'ютером. Він поставляється окремо у вигляді плати адаптера USB to UART(TTL) та за допомогою чотирьох проводків з'єднується з платою контролера.

Мал. 5 адаптер USB-UART (TTL).

На рис. 6 показано, як правильно потрібно з'єднати контролер та адаптер.

Мал. 6. З'єднання контролера з USB-UART адаптером.

На відміну від прийнятого з'єднання сигнальних ліній замість RX-TX і TX-RX ці лінії потрібно з'єднувати безпосередньо: RX-RX, TX-TX. При першому підключенні адаптера до комп'ютера автоматично розпочнеться встановлення драйверів пристрою. Потрібно дочекатися закінчення установки. Ще однією особливістю контролера є відсутність програмного скидання Resetу момент програмування. Це звичайно трохи незручно, але не так, щоб відмовитися від Pro Mini. Достатньо натиснути кнопку Reset на контролері після того, як напис "Компілювання" зміниться на "Завантаження", Мал. 7.

Мал. 7. Відображення інформації про перебіг програмування МК.

4. Пишемо код.

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

Мал. 8. Написання початкового блоку програми.

Перший блок: директива # підключає до нашого проекту бібліотеку керування модулем.

Другий блок: Оголошуємо змінні та записуємо в них початкові значення рівні нулю. Звертаю вашу увагу, що ми не створюватимемо імена для портів висновків МК. Я навмисно залишив їх у цифровому вигляді, щоб вам було зручно звірятися з принциповою схемою. У цьому блоці ми оголошуємо лише три змінні - це лівий і правий датчики рингу (_і _) у яких будуть записані значення АЦП. А також змінна відстані УЗ далекоміра (_), в неї запишеться відстань в сантиметрах до перешкоди.

Рядок Ultrasonic ultrasonic (4, 2), не що інше, як оголошення змінної для УЗ далекоміра, взяте з прикладу підключеної бібліотеки. У дужках вказані порти, до яких підключені ніжки датчика.

Третій блок: (), у ньому ми налаштовуємо всі входи та виходи мікроконтролера. Вхідні сигнали ми прийматимемо портами 15, 17, тому призначаємо їм (Вхід). Двигунами у нас керують чотири порти: 3,5 для лівого двигуна та 6,9 для правого двигуна, призначаємо їх як вихід.

Чому ми задіємо для одного двигуна два порти? Все просто; якщо на контакти двигуна подати напругу він почне крутитися в одну зі сторін, скажімо за годинниковою стрілкою. Але якщо змінити полярність, тобто. поміняти «плюс» і «мінус» - вал моторчика крутитиметься в інший бік. Цю властивість ми і використовуватимемо для повноцінних маневрів.

5. Основний цикл loop.

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

Розглянемо структуру нашого циклу з урахуванням алгоритму рис. 9

Мал. 9. Алгоритм основного циклу Loop.

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

void check_sensor() // Підпрограма перевірки сенсорів.

R_Sensor=analogRead(15); // зчитуємо показання правого датчика

L_Sensor=analogRead(17); // зчитуємо показання лівого датчика

delay(10); //Затримка для закінчення перетворення АЦП

dist_cm = ultrasonic.Ranging(CM); // зчитуємо показання УЗ далекоміра

delay(10); // Затримка для закінчення перетворення

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

void go_left() // пошук цілі чи рух наліво

analogWrite(5, 100); //LEFT MOTOR

analogWrite(6, 100); //RIGHT MOTOR

Значення потужності двигунів знижено майже вдвічі, якщо крутитися занадто швидко ми можемо по інерції проскочити виявлену мету.

Якщо мету виявлено, ми повинні її атакувати, рухаючись вперед на повному ході.

void go_forward() // Атакуємо - рух уперед

analogWrite(3, 0); //LEFT MOTOR

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

go_stop(); // Зупинка

delay(100); //Чекаємо 10 мс

go_back(); //Рухаємо назад

delay(1000); //1 секунду.

go_right(); //Повертаємо праворуч

delay(300); //300 мс

go_forward(); //Рухаємо вперед

delay(300); //300 мс

void go_stop() // Зупинка

analogWrite(5, 255); //LEFT MOTOR

analogWrite(9, 255); //RIGHT MOTOR

void go_back () // назад назад

analogWrite(3, 255); //LEFT MOTOR

analogWrite(6, 255); //RIGHT MOTOR

analogWrite(9, 0); //RIGHT MOTOR

void go_right () // пошук цілі чи рух направо

analogWrite(3, 100); //LEFT MOTOR

analogWrite(5, 0); //LEFT MOTOR

analogWrite(6, 0); //RIGHT MOTOR

analogWrite(9, 100); //RIGHT MOTOR

void go_forward() // Атакуємо рух уперед

analogWrite(3, 0); //LEFT MOTOR

analogWrite(5, 255); //LEFT MOTOR

analogWrite(6, 0); //RIGHT MOTOR

analogWrite(9, 255); //RIGHT MOTOR

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

Повний скетч для скачування знаходиться в кінці статті.

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

Архів 1

Архів 2до статті "Програма робота мінісумо".

Якщо у ВАС виникли питання, пишіть на ФОРУМІ або в Online чат з робототехніки ми їх обговоримо!

Увага! Повне чи часткове копіювання матеріалу без дозволу адміністрації заборонено!

Привіт! Бажаєш зібрати не складного у складанні робота? Ти прийшов на адресу! =) Саме у нас на сайті ти зможеш знайти докладні статті зі складання крок-за-кроком свого першого робота, а також багатьох інших роботів, і навіть для змагань.

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

Допоможи нашому проекту! Зареєструйся на нашому сайті і приходь у наш Online-чат або форум і поділись своїми виробами та своїм прогресом - адже саме твоя активність привертає до робототехніки все більше і більше уваги початківців - вони дивляться на твій успіх і хочуть стати такими ж крутими, а нам дуже приємно бачити, що у вас все виходить. А якщо щось не виходить – ми допоможемо;)

Сумо- одне з найцікавіших змагань роботів Лего Ev3. У цьому змаганні робот повинен виштовхнути робота супротивника за коло при цьому не виїхати за кордон кола.

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

Опишемо алгоритм та програму Сумодля робота EV3

1 Дія.

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

Ставимо очікування на 3 секунди.

2 Дія. Від'їжджаємо назад до кордону.


3 дія. Після того, як робот від'їхав до кордону, він повинен висунутися вперед. Рух уперед.

4 Дія. Ставимо нескінченний цикл. Робот атакуватиме ворога, поки його не виштовхне або поки не закінчиться час змагання.

У нього ставимо цикл обертання з ультразвуковим датчиком. (можна використовувати інфрачервоний датчик)


5 Дія. Їдемо вперед доти, поки датчик кольору не побачить чорну лінію, межу кола.

6 . Дія Після того як побачили кордон ми від'їжджаємо назад.

Завдання.

Напишіть від'їзд назад, використовуючи урок 1.

1. Загальні правила

1.1. Робот повинен виштовхнути робота-суперника за чорну лінію (За межі поля).

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

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

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

1.5. Два автономних роботавиставляються на ринг (кругле поле). Роботи намагаються виштовхнути суперника за межі рингу.

1.6. Робот, який виграв більша кількістьраундів, виграє матч.

1.7. При грі «кожен з кожним», найкращим вважається робот, який виграв більшу кількість матчів.

1.8. За великої кількості учасників можна організовувати ранжування за «олімпійською системою» (на виліт).

2. Робот

2.1. Роботи повинні бути збудовані з використанням тільки деталей конструкторів ЛЕГО Перворобот (LEGO-Mindstorms)

2.2. Під час раунду:

Розмір робота не повинен перевищувати 25х25х25см.

Вага робота не повинна перевищувати 1кг.

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

2.4. У конструкції робота суворо заборонено використовувати:

Клеючі речовини.

2.5. Перед матчем роботи перевіряються на габарити та вагу.

2.6. Робот може мати багато програм, з яких оператор може вибирати кожен раунд.

2.7. Між матчами дозволено змінювати конструкцію та програми роботів.

3. Поле

3.1. Біле коло діаметром 1 м з чорною облямівкою завтовшки 5 см.

3.2. У колі червоними смужками відзначені стартові зони роботів.

3.3. Червоною точкою відзначено центр кола.

3.4. Поле розміщено на подіумі заввишки 16 мм.

4. Проведення Змагань

4.1. Змагання складаються із серії матчів. Матч визначає, з двох роботів, що беруть участь у ньому, найбільш сильного. Матч складається із 3 раундів по 30 секунд. Матч виграє робот, який виграв більшу кількість раундів. Суддя може використати додатковий раунд для роз'яснення спірних ситуацій.

4.2. Раунди проводяться поспіль.

4.3. На початку раунду роботи виставляються за червоними смугами (від центру рингу) у своїх стартових зонах, всі частини частини робота, що стосуються поля, повинні знаходитися всередині стартової зони.

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

4.5. Для початківців: Після зіткнення роботи не можуть маневрувати рингом.

4.6. Для досвідчених: Після зіткнення роботи можуть маневрувати рингом як завгодно.

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

5. Правила відбору переможця

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

5.2. При торканні будь-якої частини робота (навіть не приєднаної до роботи) за межі чорної облямівки роботу зараховується програш у раунді.

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

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

6. Суддівство

6.1. Організатори залишають за собою право вносити до правил змагань будь-які зміни, якщо ці зміни не дають переваг одній з команд.

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

6.3. Судді мають усі повноваження протягом всіх змагань; всі учасники повинні підкорятися їхнім рішенням.

6.4. Якщо виникають якісь заперечення щодо суддівства, команда має право в усному порядку оскаржити рішення суддів в Оргкомітеті не пізніше закінчення поточного раунду.

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

6.6. Члени команди та керівник не повинні втручатися у дії робота своєї команди чи робота суперника ні фізично, ні на відстані. Втручання веде до негайної дискваліфікації.

6.7. Суддя може закінчити змагання на власний розсуд, якщо робот не зможе продовжити рух протягом 10 секунд.

12.2. Конструкція робота для змагання "Сумо".

Базова поведінка робота в "Сумо"дуже схоже на поведінку робота в "Кегельрингу". Роботу також необхідно знайти всередині поля об'єкт та виштовхати його за межі кола. Відмінності, як водиться, криються в деталях: тепер цей об'єкт у свою чергу шукає нашого робота і теж прагне виштовхати його якнайшвидше.

Тим не менш – зосередимося на своїй меті: шукати суперника нам як і раніше буде допомагати один із датчиків, здатних визначати предмети на відстані (інфрачервоний чи ультразвуковий), а своєчасно визначатимемо чорну межу поля за допомогою датчика кольору. Тому для створення та налагодження програми робота-сумоїста пропонуємо вам використовувати того самого робота, якого ми підготували для Уроку №11 - Кегельринг .

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

Lego mindstorms EV3 Home

Lego mindstorms EV3 Education

Елемент, що вийшов, закріпимо на передній балці нашого робота.

Lego mindstorms EV3 Home

Lego mindstorms EV3 Education

Наш навчальний робот готовий. Приступимо до створення програми робота-сумоїста. Чудово, якщо ви маєте можливість налагоджувати програму, використовуючи ще одного робота! Якщо ж ні, то нічого страшного: можна задіяти як суперника, наприклад, радіокеровану модель автомобіля або ті ж кеглі від "Кегельрингу".

12.3. Створення програми для змагання "Сумо".

Перша думка, яка спадає на думку: використовувати програму для "Кегельрингу", Внісши в неї косметичні зміни. Дійсно, алгоритми поведінки робота в "Кегельрингу"і в "Сумо"дуже схожі. Вони реалізують пошук об'єкта та виштовхування його за межі поля. Можна завантажити в робота-сумоіста програму для "Кегельрингу"Але працювати такий сумоїст буде не дуже ефективно. Проте знання, отримані на попередньому уроці, стануть у нагоді нам зараз.

Настав час завантажити у середу програмування наш проект "lessons-2"створити в ньому нову програму "lesson-12"та підключити робота до середовища програмування.

Поведінкову модель робота-сумоїста можна умовно розділити на дві частини: пошук суперникаі атака суперника. Спочатку займемося реалізацією першої частини - пошуку суперника.

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

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

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

Встановимо суперників на полі навпроти один одного, як показано на малюнку нижче.

Таке положення практично відповідає максимальному видаленню роботів один від одного під час змагання, тому поточне показання датчика, що вимірює відстань до суперника, можна взяти за порогове. Важливо: оскільки граничне значення буде досить великим - необхідно щоб поза поля на відстані близько 1 м. під час роботи робота також були відсутні сторонні предмети, здатні перешкодити пошуку.

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

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

Мал. 1

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

Мал. 2

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

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

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

Мал. 3

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

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

Мал. 4

На етапі налагодження цього алгоритму вам доведеться, підбираючи значення "Потужність"моторів "B"і "C"а також граничне значення датчика, домогтися від вашого робота точного виявлення та зупинки суворо навпроти суперника. Тільки після цього можна буде переходити до програмної реалізації алгоритму атаки.

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

Отже, нам необхідно під час прямолінійного руху вперед аналізувати обидва датчики та припиняти атаку у разі, якщо робот втратить суперника АБО робот досягне межі рингу. Тому нам необхідно відмовитись від використання програмного блоку "Очікування" "Помаранчевої палітри"і самостійно в циклі отримувати та обробляти показання двох датчиків.

Приступимо до поетапної реалізації алгоритму атаки суперника: для цього створимо в проекті тимчасову програму "lesson-12-1"та почнемо її наповнення програмними блоками.

  1. Візьмемо програмний блок "Цикл" "Помаранчевої палітри".
  2. Всередину блоку "Цикл"помістимо програмний блок "Незалежне керування моторами" "Зеленої палітри" "Увімкнути" (Мал. 5 поз. 1), потужності моторів "B"і "C"встановимо у максимальне значення - 100 (Мал. 5 поз. 2).

Мал. 5

  1. Слідом за блоком "Незалежне керування моторами"помістимо програмний блок. Режим роботи блоку встановимо значення "Порівняння - Яскравість відбитого світла" (Мал. 6)

Мал. 6

У цьому режимі програмний блок "Датчик кольору" "Жовтої палітри"візуально дуже схожий на програмний блок "Очікування" "Помаранчевої палітри"в режимі "Датчик кольору - Порівняння - Яскравість відбитого світла". Але, на відміну від блоку "Чекання", цей програмний блок не чекає на виконання умови, зазначеної параметрами "Тип порівняння" (Рис. 7 поз. 1)і "Порогове значення" (Рис. 7 поз. 2), а відразу видає логічне значення ( "Істина"або "Брехня") у вихідному параметрі та виміряне значення - у вихідному параметрі "Освітлення" (Рис. 7 поз. 4).

Параметри "Тип порівняння"і "Порогове значення"на Мал. 7 поз. 1, 2 "Результат порівняння" (Рис. 7 поз. 3)видавав логічне значення "Істина"при перетині датчиком кольору чорної межі рингу.

Мал. 7

  1. У разі використання ультразвукового датчика за блоком "Датчик кольору"встановимо програмний блок "Ультразвуковий датчик" "Жовтої палітри". Режим роботи блоку встановимо значення "Порівняння - Відстань у сантиметрах" (Рис. 8 поз. 1). Параметр "Тип порівняння" (Рис. 8 поз. 2), параметр "Порогове значення" (Рис. 8 поз. 3)встановимо таким чином, щоб вихідний параметр "Результат порівняння" (Рис. 8 поз. 4)видавав логічне значення "Істина"

Мал. 8

У разі використання інфрачервоного датчика за блоком "Датчик кольору"встановимо програмний блок "Інфрачервоний датчик" "Жовтої палітри". Режим роботи блоку встановимо значення "Порівняння - Наближення" (Рис. 9 поз. 1). Параметр "Тип порівняння" (Рис. 9 поз. 2), параметр "Порогове значення" (Рис. 9 поз. 3)встановимо таким чином, щоб вихідний параметр "Результат порівняння" (Рис. 9 поз. 4)видавав логічне значення "Істина"у разі втрати на увазі роботом суперника.

Мал. 9

Давайте ще раз проаналізуємо проміжний код нашого алгоритму атаки: ми включили двигуни на максимальну потужність і рухаємося вперед, постійно в циклі опитуючи датчики. Якщо наш робот перетне чорну лінію межі рингу, то значення вихідного параметра "Результат порівняння" "Датчик кольору"набуде значення "Істина". Якщо наш робот втратить суперника, то значення вихідного параметра "Результат порівняння"датчика, що стежить за суперником, також набуде значення "Істина". У будь-якому з цих випадків нам слід припинити атаку, завершивши наш цикл. У цьому нам допоможе програмний блок. Ознайомимося з цим блоком докладніше: програмний блок "Логічні операції" призначений для виконання операцій над логічними даними (Мал. 10).

Мал. 10

Вибраний режим програмного блоку "Логічні операції" "Червоної палітри"визначає одну з чотирьох операцій над логічними даними: "І (AND)", "АБО (OR)", "Виключає АБО"і "Виняток (NOT)". Двхідних параметра "a"і "b"(Для операції "Виняток (NOT)"- один вхідний параметр "a") передають у програмний блок вхідні значення, а результуюче значення видається вихідним параметром "Результат". Якщо ви раніше не стикалися з логічними операціями, то можете ознайомитися з базовими знаннями в довідці, що додається під спойлером.

Логічні операції

Логічні операції здійснюються лише над логічними значеннями (даними), також є логічним значенням. Логічне значення може бути в одному з двох станів: "Істина"або "Брехня". Логічні операції часто записуються в табличній формі у вигляді: "Вхідний параметр 1" - "Вхідний параметр 2" = "результат". Логічні операції, що реалізуються програмним блоком "Логічні операції" "Червоної палітри"у табличній формі можна записати так:

Логічна операція "І(AND)"

Результатом логічної операції "І (AND)"буде значення "Істина" "Істина" "Брехня".

"a" операція "b" результат
"Брехня" "І (AND)" "Брехня" = "Брехня"
"Брехня" "І (AND)" "Істина" = "Брехня"
"Істина" "І (AND)" "Брехня" = "Брехня"
"Істина" "І (AND)" "Істина" = "Істина"

Логічна операція "АБО (OR)"

Результатом логічної операції "АБО (OR)"буде значення "Брехня"тільки, якщо обидва вхідні значення дорівнюють "Брехня", у всіх інших випадках значення операції дорівнює "Істина".

"a" операція "b" результат
"Брехня" "АБО (OR)" "Брехня" = "Брехня"
"Брехня" "АБО (OR)" "Істина" = "Істина"
"Істина" "АБО (OR)" "Брехня" = "Істина"
"Істина" "АБО (OR)" "Істина" = "Істина"

Логічна операція "Виключає АБО"

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

"a" операція "b" результат
"Брехня" "Виключає АБО" "Брехня" = "Брехня"
"Брехня" "Виключає АБО" "Істина" = "Істина"
"Істина" "Виключає АБО" "Брехня" = "Істина"
"Істина" "Виключає АБО" "Істина" = "Брехня"

Логічна операція "Виняток (NOT)"

Логічна операція "Виняток (NOT)"застосовується лише до одного вхідного значення. Результатом логічної операції "Виняток (NOT)"над вхідним значенням є протилежне значення.

  1. За програмним блоком "Ультразвуковий датчик"або "Інфрачервоний датчик"помістимо програмний блок "Логічні операції" "Червоної палітри".
  • Вихідний параметр "Результат порівняння"програмного блоку "Датчик кольору" (Рис. 11, 12 поз. 1) "a"програмного блоку "Логічні операції" (Мал. 11, 12 поз. 4).
  • Вихідний параметр "Результат порівняння"програмного блоку "Ультразвуковий (інфрачервоний) датчик" (Рис. 11, 12 поз. 2)з'єднаємо з вхідним параметром "b"програмного блоку "Логічні операції" (Мал. 11, 12 поз. 5).
  • Режим роботи програмного блоку "Логічні операції"встановимо в "АБО (OR)" (Рис. 11, 12 поз. 3). У цьому випадку результат виконання логічної операції прийматиме значення "Істина"Тільки якщо буде виконано одну з умов: датчик кольору перетнув чорну лінію, робот втратив суперника.
  • Встановивши режим програмного блоку "Цикл"на значення "Логічне значення" (Рис. 11, 12 поз. 7), вихідний параметр "Результат"програмного блоку "Логічні операції" (Рис. 11, 12 поз. 6)з'єднаємо з вхідним параметром "Поки не буде істина"програмного блоку "Цикл" (Рис. 11, 12 поз. 8). Дані налаштування завершать виконання циклу при "Істинному"внаслідок виконання логічної операції.

Мал. 11


Мал. 12

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

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

Підіб'ємо підсумок: ми реалізували алгоритм пошуку суперника і успішно його протестували, також пройшов перевірку алгоритм атаки.

Закінчена програма сумоїста має у нескінченному циклі виконувати послідовно пошук суперника, та був - атаку суперника. Можна було б об'єднати обидві частини нашої програми, якби не одне маленьке доповнення. Якщо наш робот зупинився над кордоном рингу, то перед тим, як розпочати пошук, роботу слід, від'їхавши трохи назад, повернутися всередину рингу. Доповнимо нашу програму атаки наступним кодом: за межами циклу атаки, скористаємося програмним блоком " Перемикач" "Помаранчевої палітри". Режим роботи блоку "Перемикач"встановимо в "Датчик кольору - Порівняння - Яскравість відбитого світла".Параметри "Тип порівняння"і "Порогове значення"встановимо аналогічно раніше використовуваним у програмному блоці "Датчик кольору" "Жовтої палітри". Отже, якщо наш робот зупинився над чорною лінією, виконання буде передано верхньому контейнеру програмного блоку "Перемикач". Саме у верхній контейнер помістимо програмний блок "Керування" "Зеленої палітри", з параметрами, що змушують робота від'їхати назад на один оборот моторів. У нижній контейнер програмного блоку "Перемикач"помістимо програмний блок, що вимикає мотори (Мал. 13). Повторно протестувавши алгоритм атаки, переконаємося, що після того, як робот-суміст виштовхнув суперника за межі рингу, він повернувся трохи назад.

Мал. 13

Ось тепер можна завершити розробку програми для робота-сумоїста. Всередину нескінченного циклу послідовно вкладемо програму пошуку суперника, а потім програму атаки суперника. Спробуйте виконати цю роботу самостійно, не підглядаючи у рішення.

Висновок:

Програма, яку ми розібрали з вами на цьому уроці, реалізує лише один прямий силовий алгоритм поведінки робота-сумоїста. Вона має на увазі, що у прямому силовому протистоянні робот повинен неодмінно здолати свого суперника. Але наш навчальний робот, звичайно, зовсім не схожий на м'язистого борця-сумо. Для того, щоб впевнено виступити в цьому змаганні, необхідно приділити пильну увагу в першу чергу конструкції робота, створити міцну, захищену платформу, за допомогою додаткових провідних коліс або гусениць підвищити зчеплення з поверхнею рингу. На популярному відеохостингу Youtube.comна запит "сумо lego роботів"можна знайти безліч відеороликів з справжніх змагань роботів, з яких ви неодмінно почерпнете собі цікаві ідеї для реалізації у своїх конструкціях.

Головна ж мета цього уроку – на практичному прикладі показати вам метод безперервної обробки показань від кількох датчиків. Чи можна вдосконалити нашу програму? Безперечно! Наприклад, використовуючи програмний блок "Випадкове значення" "Червоної палітри", Змінити алгоритм пошуку суперника таким чином, щоб задавати випадкове обертання робота вліво або вправо, тим самим, дезорієнтуючи суперника. Спробуйте самостійно вбудувати цей додатковий код в нашу програму. Подумайте над тим, які зміни потрібно внести в прорамму, у разі проведення змагання на чорному рингу з білою кордоном. Можливо, що у вас з'являться власні ідеї покращення: поділіться ними у коментарях до уроку!

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


Відео роботи робота



Матеріали та інструменти для створення робота:

- сухий клейовий олівець;
- прозорий скотч;
- двовивідна кнопка, що не фіксується;
- один миготливий світлодіод типу ARL-513URC-B;
- Транзистор типу КП505А;
- два резистори номіналом 1Мом та 270 Ом;
- кліпса-роз'єм для підключення до батареї типу «Крона»;
- Моторчик моделі RF-300CA-D/C 3V або подібний.






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

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

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

Як джерело живлення тут використовується батарея на 9 Вольт, вона встановлена ​​зверху робота. Завдяки додатковій вазі робот накопичує необхідну кінетичну енергію для необхідних дій.


На малюнку компоненти робота позначені цифрами:

1. Кліпса для підключення акумулятора.
2. Фіксатор батареї.
3. Джерело живлення (батарея на 9 В).
4. Двигун.
5. Миготливий світлодіод (говорить про те, що живлення підключено).
6. Кнопка для увімкнення робота.
7. Резистор, завдяки ньому можна задавати час роботи робота.
8. Конденсатор також відповідає за час роботи робота.
9. Транзистор типу КП505А є драйвером двигуна.

Процес складання робота:

Крок перший. Виготовляємо корпус
Для виготовлення корпусу автор застосовує гофрокартон, потрібно нанести на нього контур за шаблоном. Шаблон можна надрукувати на принтері, він додається до статті. Далі, зробивши необхідні згини, шаблон можна вирізати товстими лініями. Щоб встановити двигун, у картоні потрібно вирізати півколо, а потім трохи відігнути його, як вказано на фото.







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

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










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









Крок четвертий. Підключаємо периферію
Для підключення живлення до батареї потрібно використовувати кліпсу-роз'єм. Провід потрібно просмикнути через отвір, червоний припаюється до плюсового контакту світлодіода, а чорний до мінусу конденсатора С1.

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






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

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

Для додаткової фіксації моторчик обмотується скотчем.





Щодо кута нахилу робота, то це все чудово видно на картинках. Після установки моторчик потрібно підключити. Один висновок підключається до мінусу, інший до стоку транзистора VT1.

 

 

Це цікаво: