Mobot#

Стаття авторів Cosku Acay, Edwin Cho, Kenneth Li та Nishant Pol. PDF.

Опис проєкту#

У змаганні Mobot Університету Карнегі-Меллона роботи повинні пройти через серію з 14 воріт, розташованих уздовж вигнутої білої лінії завдовжки 255 футів на вуличному тротуарі. Траса включає два круті пандуси та зону точки прийняття рішення, де робот повинен вибрати правильний маршрут, щоб пройти через 14 воріт у послідовному порядку. Оскільки лінія розташована надворі та під погодою Піттсбурга, робот повинен функціонувати в різноманітних умовах. Цього року в день змагання було дощово та вітряно. Докладнішу інформацію можна знайти на http://www.cs.cmu.edu/mobot/mobot.html

Mobot Mobot

Mobot (full size)Mobot (full size)

Розв’язання з CMUcam4#

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

Mobot hardware Mobot hardware (full size)

CMUcam4 захоплює зображення лінії зі швидкістю 30 кадрів на секунду і подає зображення відстеження кольору на Arduino Mega через одну з трьох послідовних ліній. Потім Arduino Mega обробляє це зображення (див. Опис програмного забезпечення нижче) і передає команди швидкості двигуна та повороту на PID-контролер через іншу послідовну лінію. PID-контролер, своєю чергою, надає Arduino Mega відліки енкодера для правого та лівого коліс, що дозволяє нам відстежувати наше положення та курс відносно воріт 0.

PID-контролер (MD-25) виготовлено Robot-Electronics у Великій Британії. Він керує двома редукторними щітковими двигунами постійного струму з магнітними енкодерами на валу двигуна. РК-екран призначений для налагодження. У нас було дві шини живлення, 12В для двигунів і 5В для логіки, які мали спільну землю і обидві живилися від однієї перезаряджуваної батареї 12В.

Спочатку ми планували зробити прототип з дерев’яної основи, щоб швидше перейти до етапу програмування, а потім працювати над швидшою, надійнішою основою, такою як радіокерований автомобіль. Однак ми виявили, що прототип був дуже надійним та зручним у роботі, тому залишили його для остаточної конструкції. Гідроізоляція корпусу складалася з шару целофанової плівки під шаром пакувальної стрічки. Однак дощ просочувався крізь пакувальну стрічку, але, на щастя, не крізь целофанову плівку. Камеру було накрито квадратом пластику з пакета Ziploc, оскільки ми виявили, що цей «фільтр» покращував здатність камери ігнорувати невеликі ділянки лінії, які для камери виглядали як фоновий бетон.

Опис алгоритму#

Загальні відомості#

Ми використовуємо CMUcam4 у режимі відстеження кольору з увімкненим режимом YUV, що дає нам двійкове представлення лінії. Програмне забезпечення камери відфільтровує все, що не є білим (тобто фон), і ставить «увімкнений» піксель там, де є лінія (де вона біла). Ми використовуємо режим YUV, щоб відстеження кольору було нечутливим до інтенсивності світла, щоб наш робот міг функціонувати у найрізноманітніших умовах, включаючи приміщення та вулицю.

Слідування вздовж лінії#

CMUcam4 надає нашій мікросхемі Arduino двійкове зображення 80 на 60. Ми відбираємо 10 рівномірно розташованих рядків пікселів із зображення й обчислюємо центроїд «увімкнених» пікселів (див. тут: https://en.wikipedia.org/wiki/Centroid#Of_a_finite_set_of_points). Потім ми припускаємо, що лінія лежить на центроїді. Роблячи це на 10 різних рядках у зображенні, ми отримуємо гарне наближення лінії, з’єднуючи точки. Потім ми можемо використати ці дані, знайшовши, наскільки далеко кожна точка на лінії розташована від вертикальної лінії, що лежить у центрі зображення, щоб отримати значення, яке представляє, наскільки вигнута лінія. Це можна розглядати як щось на кшталт знаходження площі між дотичною лінією та кривою і використання цієї площі для визначення того, наскільки нам потрібно повернути. Знак визначає, чи поворот ліворуч чи праворуч, тоді як величина визначає, наскільки нам потрібно повернути, щоб слідувати лінії. Як і слід було очікувати, якщо ми виміряли нульову площу, то лінія розташована прямо перед роботом і є прямою лінією. Якщо величина площі велика, то роботу потрібно повернути, щоб намагатися мінімізувати величину цієї площі.

Точки прийняття рішень#

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

Будь ласка, перейдіть на https://github.com/cacay/Mobot, щоб побачити спрощену версію нашого коду, або тут для локальної копії.