У 17 років створив навігацію для дронів, яку не глушить РЕБ. Історія киянина, який переміг на «Олімпіаді геніїв» у США
Дмитрові Лапку — 17. У 10 класі він став бронзовим призером Всеукраїнської олімпіади з інформатики, а його наукові роботи для МАН двічі перемагали у своїх номінаціях. Перша також виборола срібло на міжнародній виставці винаходів INOVA в Хорватії.
Останній же проєкт Дмитра під назвою «Система навігації літального апарата в умовах урбаністичного ландшафту» привернув увагу розробників дронів. Вони запропонували хлопцю фінансування для реальних випробувань. За словами Дмитра, якщо все вдасться, то такому безпілотнику не потрібен буде інтернет, GPS-навігація тощо, його буде неможливо заглушити засобами РЕБ. БПЛА сканує будівлі і, орієнтуючись на дані мапи, визначає свою позицію.
Ми поспілкувалися з юнаком про його розробки, перемогу на «Олімпіаді геніїв» у США, а також мотивацію навчатися саме в українському виші.
Міжнародна виставка винаходів INOVA в Хорватії, 2023 рік
«Я дійшов до того рівня, коли ігри перестали цікавити»
Я з Києва. Здається, що програмувати мені подобалося завжди, а із 7 класу це переросло в серйозніше захоплення. Було круто змусити комп’ютер щось зробити. Наприклад, репліки на ігри. Тоді найбільшим моїм досягненням було створити «Морський бій» на консолі, щоб кораблі розставлялися рандомно.
Я навчався в ліцеї «Наукова зміна», і спочатку мені вистачало самої програми — треба було напружитись, щоб її опанувати. Ми вивчали Pascal, будову комп’ютера, розв’язували задачі. А з алгоритмами мені допомагав тато, який є програмістом.
Потім спробував себе в олімпіадному програмуванні. Воно зацікавило мене не одразу, і спочатку я не мав особливих успіхів. А потім я дійшов до того рівня, коли ігри перестали цікавити, а олімпіадне програмування навпаки. Воно нагадувало спорт: треба скількись разів на тиждень писати змагання, тренуватись, розбирати задачі, алгоритми.
І в 9 класі я потрапив на Всеукраїнську юніорську олімпіаду з інформатики. А через пів року активної підготовки вдалося вибороти бронзу на Всеукраїнській олімпіаді в 10 класі. Тоді ж зрозумів, що взяти золото буде складно, і вирішив сконцентруватися на тому, що в мене гарно виходило, — робо́тах для МАНу.
«Не хотілося використовувати готові бібліотеки: я не знаю, як вони працюють усередині»
Я писав дві роботи для МАНу. Першу — в 10 класі, про посадку модуля на Марс. На це мене надихнула історія Perseverance. Тоді подумалось, що оскільки в теорії це відносно нескладний процес, то варто спробувати навчити штучний інтелект керувати ним: визначати, куди краще сісти, які нахили робити в різні боки тощо.
Тренував ШІ сідати на різноманітні поверхні, які генерував. Наприклад, модуль мав різні тактики сідання на сильно похилій поверхні. На всеукраїнському етапі МАНу я з цією роботою виграв у категорії «Системи та технології штучного інтелекту. Кібербезпека». А на Міжнародній виставці винаходів INOVA в Хорватії здобув з нею ж срібну медаль. Могло бути й золото, але під час демонстрації журі мій модуль один раз «упав». Я хотів показати найскладніші поверхні: марсохід вибрав погане місце для посадки, сів, але не зміг закріпитися, почав зісковзувати. Думаю, це трохи зіпсувало враження.
Скриншот з моєї роботи
До речі, у Хорватії я презентував дороблену систему. Для першої версії я писав власні нейронні мережі. Не хотілося використовувати готові бібліотеки: не знаю, як вони працюють усередині. І взагалі, нейронна мережа — не настільки складно, щоб застосовувати повністю готові рішення. Спочатку я використовував прості мережі: є вхідний, проміжний і вихідний шари. Було близько 500 нейронок, які вчилися сідати, йти. Для кожної видавався результат, наскільки добре вона виконала завдання. Потім пропорційно вибиралися мережі, які були основою для наступної генерації. І так ставали все кращими й кращими.
У другій версії в мене вже були еволюційні нейронні мережі, у яких є вхідний і вихідний шари, а між ними — нічого. Еволюцією самі додаються нейрони та зв’язки. Там була хитра формула, як розподіляти це все, імовірність додавання та вилучення нейронів і зв’язку між ними, зміна зміщення (bias) нейрона та ваги зв’язку між нейронами.
Я вирішив, що так максимально ефективно створюватиметься нейронна мережа: нейрони та зв’язки між ними будуть додаватися тільки там, де потрібно. Завдяки цьому навчання відбувається набагато швидше. Мережа зрозуміла базову логіку, зробила декілька нейронів і змогла виконувати задачу. Це розширює можливості. Бо з фіксованою кількістю нейронів і зв’язків можна довчитися тільки до певного рівня. За умови ж другого варіанту — з додаванням нових нейронів і зв’язків — можна вчитися нескінченно та досягати максимально хороших результатів.
«Унікальність моєї розробки в тому, що я беру перспективу не зверху, а зсередини»
Коли я захопився ШІ, побачив, наскільки штучний інтелект — широка тема. Але саме нейронні мережі не дуже складні. Я зрозумів основи з відео на YouTube, де багато схожих задач. Наприклад, перегонова машинка їде трасою, їй треба максимально швидко проїхати коло. І нейронки знаходять найкращі траєкторії, місця прискорення, гальмування тощо. Я зрозумів, що й сам можу створити щось схоже.
Почав робити подібні програми: машинка щось об’їжджає, вимірює дистанцію до стін тощо. Навесні 2023 року мені спала на думку ідея: «А якщо так само навчити робити дрон, тільки він літатиме не по трасі, а по місту?».
Довгий час це залишалося на рівні задуму, оскільки я не знав, як навчити штучний інтелект опрацьовувати стільки даних. І ось на початку 11 класу подумав: можна ж узагалі зробити це не за допомогою ШІ, а суто алгоритмічно. Тобто написати хитрий алгоритм, який буде брати виміри до будинків і знаходити, де саме в місті перебуває безпілотник. Мене надихало, що так можна створити повністю автономний БпЛА, незалежний від інтернету чи GPS-навігації. Це корисна розробка, на яку має бути попит.
По суті, це навігація, яку не можна заглушити засобами РЕБ, вона орієнтується на особливості рельєфу (до нього можна віднести й будинки). Подібні системи почали розробляти ще в
Я ж вирішив орієнтуватися на будівлі, оскільки це може бути перевагою. Адже щоб бачити та сканувати багато рельєфу, треба летіти доволі високо. А моя система дозволяє дрону летіти не над будівлями, а на їхньому рівні — приблизно на висоті
Якщо говорити про власне БпЛА, у них часто буває камера знизу, дані з якої порівнюються з інформацією Google Maps. Але сканування саме будівель мені ще не траплялося. Наявний варіант має суттєві недоліки. Супутник бачить землю з дуже великої відстані, видає вертикальну проєкцію. Тому коли дрон летить і сканує камерою зверху, то будівлі виглядають викривлено. Це треба враховувати та якось по-хитрому обробляти зображення. Оскільки моя система дозволяє пересуватися низько, це суттєво спрощує завдання. Тобто унікальність моєї розробки в тому, що я беру перспективу не зверху, а зсередини.
Чому я розроблював цю систему? Теоретично її можна ставити на дрони стратегічного ураження, які летять на дуже велику дальність, — у цьому вбачаю найбільшу користь. Наприклад, якщо треба уразити якийсь об’єкт у місті, то на підльоті до нього БпЛА буде знижуватися на рівень будівель і рухатися до цієї цілі. Міста зазвичай краще насичені засобами ППО, ніж околиці міст, тому безпілотники часто збивають уже в населених пунктах. А так дрон може долетіти до міста за іншою системою навігації, а потім перемкнутися на мою — і збити його буде майже неможливо.
Окрім того, я думав про цивільне застосування — виникла ідея дуже швидкої доставки вантажів по місту. GPS інколи може глючити. Ті ж глушилки для нього легко знайти, вони дешеві. Тому «віддавати» дрон повністю на GPS небезпечно. З моєю системою безпілотник зможе швидко та надійно долетіти з точки А в точку Б.
«Я вивчав імовірності, особливо для симуляції інерційної навігаційної системи»
Приблизно з жовтня по січень
Підсумкова сесія київського етапу МАН, 2024 рік
Інколи я радився з кимось, але в основному робив усе сам. Причина в тому, що система не дуже складна, однак охоплює багато етапів, іноді специфічних. Наприклад, я почав з отримання картографічних даних про міста: як розміщуються будинки в просторі, яка їхня висота, де і як розташовані стіни — отримав цю геометрію з OpenStreetMaps. По суті, це нескладне завдання, але подібним займалося мало людей. Тому довелося читати специфічні форуми, де ділилися релевантним досвідом, й орієнтуватися на приклади.
Були деякі нюанси з математикою, я вивчав імовірності. Особливо для симуляції інерційної навігаційної системи, яка використовує дані акселерометра й гіроскопа. Мені потрібно було врахувати її можливу похибку. Наприклад, якщо дрон летить п’ять секунд, якою вона буде та де найімовірніше перебуває апарат. Це все було в 3D, а отже, розрахувати складно. Та з огляду на те, що там в основному комбінаторика, я за декілька підходів зміг розв’язати задачу.
Ще з математичної точки зору важливою була корекція даних інерційної навігаційної системи. Як вона працює? Бере початкові дані інерційної навігації з якоюсь похибкою (плюс-мінус метр), використовує навігацію по далекомірах і доволі точно визначає свою позицію, корегуючи початкові дані. Минає секунда — і вона знову повторює цей цикл.
Взагалі в багатьох системах, де базою слугують дані інерційної навігації (в якої є значна похибка на великій дистанції), ці дані весь час коригуються й адаптуються вимірами з більш точних систем навігації. Наприклад, у більшості GPS-навігацій відбувається саме так. Для мене це було складно.
Додалася векторна математика, потрібно було розраховувати похідні від швидкості й кута нахилу
Завдяки попередньому досвіду на МАНі мені вдалося одразу зробити все як треба. У 10 класі після перемоги на міському етапі я майже повністю переписував текст: десь була неправильна структура, погане формулювання чи бракувало джерел. В 11 класі я просто взяв як каркас стару структуру та почав заповнювати її новим текстом. Зрештою моя робота про БпЛА посіла перше місце в категорії «Програмна інженерія». Виходить, що як переможець я ще вдруге став лауреатом стипендії Президента України.
«Мені написали розробники дронів з пропозицією стати спонсорами»
Наприкінці того року багато медіа написали про мою розробку. Через хайповий заголовок один такий матеріал навіть потрапив до новин Google. Знайомі мені казали: «О, ми про тебе читали». У цих статтях згадували, що для старту реальних випробувань мені потрібно близько 15 тисяч гривень.
Відтак мені написали розробники дронів з пропозицією стати спонсорами, допомогти технічно. Домовленість була така: я вибираю потрібні компоненти, роблю список закупівлі, а вони дають гроші на електроніку. Отож я придбав FPV-дрон, пульт та ще дещо позичив у знайомих — і завдяки цьому зміг почати наступний етап проєкту.
Зараз уже близько місяця займаюся розробкою інерційної навігації в дроні: вчуся комунікувати з ним, щоб він передавав мені дані про акселерометри, гіроскопи тощо; розбираюся, як це все працює; під’єдную мікроконтролери до дрона, щоб вони ним керували. Так, на моєму безпілотнику, звично для дронів, встановлений Betaflight, як зазвичай на всіх дронах. Є певний EP — інтерфейс, за допомогою якого можна витягувати специфічні дані: температуру, напругу, інші характеристики. Окрім того, вже вмію поставити туди плату, мікроконтролер, який повністю контролює дрон. Виймаю модуль антени та вставляю свій модуль, що симулює роботу антени. Є багато проблем саме з хорошим командуванням дроном.
Система має багато етапів. Є під’єднана плата. Спочатку я дізнаюсь, як виводити туди базову телеметрію (дані акселерометрів і гіроскопів). Потім зрозумію, як вони працюють, як зробити їх точнішими. Це математика в 3D-геометрії: мені передаються дані акселерометра та нахил за трьома осями (pitch, roll, yaw) — за їх допомогою я маю визначити, як дрон пересувається.
Потім буде етап, коли я намагатимуся допрацьовувати цю математику, щоб та стала оптимальнішою, розібратися в особливостях гіроскопів, акселерометрів, щоб зробити це все більш точним. По суті, це стендові випробування, мені навіть не треба вмикати мотори. Я просто беру безпілотник, руками ношу його туди-сюди — і вже маю потрібні дані з акселерометрів і гіроскопів.
На наступному етапі я буду брати далекомір і випробовувати систему в реальних умовах. Тобто робити так само, як у теоретичній розробці, де я спочатку написав симуляцію з БпЛА, а потім на неї зверху «прикрутив» систему. Тепер я вчуся керувати дроном, отримувати від нього всі дані, а далі буду застосовувати свою навігацію. Сама по собі система проста, там нескладні алгоритми.
Нюанси починаються на етапі «прикручування» навігації до безпілотника: картографія, вибір системи координат тощо
Можливо, потім буде етап оновлення прошивки FPV-дрона, щоб ним було легко керувати. Без цього непросто: необхідно робити дуже різкі рухи та різні маневри. Наприклад, треба вчити безпілотник зависати на місці. У теорії це не дуже складно, але ціна помилки занадто велика. Якщо дрон перебуває в повітрі та десь трапляється помилка в коді — все, він летить у найближчу стіну.
Паралельно потрібно дописувати багато безпекових рішень. Має бути можливість моментально вимкнути дрон з пульта або перемкнути його в ручний режим керування. Зараз у мене вся телеметрія передається на мікроконтролер — той же Raspberry Pi, ЕSP32 або Arduino. Це телеметрія першого порядку, найбазовіша — прискорення і тому подібне. Але потрібна ще інша, зокрема щоб мій дрон міг розрахувати свою приблизну позицію. Ці дані бажано передавати на інший пристрій, щоб я бачив, що БпЛА летить, розумів, що у нього відбувається «в голові». Тоді можна буде фіксити баги: не коли він уже влетів у стіну, а на етапі, коли я помітив, що в нього щось не так з висотою.
Скриншот з роботи «Система навігації літального апарата в умовах урбаністичного ландшафту» (стрілочка — це дрон, зелені — далекоміри)
Сподіваюся все те, що вийшло зробити в симуляції, перенести на реальний дрон. Теоретичну частину я зміг завершити за чотири-п’ять місяців. Щодо терміну реальних випробувань я поки що не впевнений. Усе залежатиме від кількості підводних каменів, скільки разів я буду спотикатись. В ідеалі це має зайняти не дуже багато часу, тому що все вже прописано. Потім, думаю, було б корисно запатентувати розробку.
Розробники дронів, які стали спонсорами, вважають: якщо система добре працюватиме, її можна запустити в масове виробництво. Перехід між системою, яка літає по будівлі, і системою, яка літає по місту, — питання розміру. Коли я зможу навчити FPV-дрон літати, орієнтуючись по стінах, виконувати та комбінувати всі потрібні функції, то єдине, що мене відділятиме від реально великого дрона, який літає по місту, — сам по собі великий дрон і хороші далекоміри. Так, система Betaflight стоїть майже на всіх літальних апаратах — з крилами або на великих квадрокоптерах. Тому, найімовірніше, програмних модифікацій майже не буде.
«Освіта з інженерії програмного забезпечення — це точно те, що мені треба»
Я хотів одразу вступати до вишу в Україні. На мою думку, навчання за кордоном часто обходиться дорого та не приносить очікуваних результатів. Так, існують безплатні варіанти. Наприклад, чимало моїх однолітків поїхали вчитися до Словаччини. Але мене не вабить ідея бути в країні, де до українців ставляться не надто позитивно. В Україні я можу здобути хорошу освіту, отримати гарний розвиток. Мої розробки тут корисніші й актуальніші, ніж за кордоном.
Києво-Могилянську академію мені рекомендували фахівці, які там уже вчилися. Сподобалися відгуки про викладачів, систему навчання — те, що з другого курсу є велика кількість дисциплін на вибір. А ще це виш, який закінчили багато історичних постатей.
Обрав факультет інформатики, спеціальність «Інженерія програмного забезпечення» — по суті, чисте програмування. Ще я розглядав варіант піти на прикладну математику, але там чимало нових предметів — не знаю, наскільки вони були мені б корисними. А освіта з інженерії програмного забезпечення — це точно те, що мені треба і з чим я зможу в майбутньому отримати роботу.
Для вступу потрібен був високий прохідний бал. Знаю, що раніше переможцям всеукраїнських етапів МАНу чи олімпіад з якогось предмета додавали 10 балів. Але з упровадженням НМТ така схема перестала працювати.
Мені пощастило, що в 11 класі я доволі швидко закінчив роботу для МАНу, оскільки десятикласником уже здобув такий досвід. Тому із січня міг повністю сконцентруватись на НМТ: проходити пробні тести, вивчати правила, історію тощо. У результаті я зміг гарно підготуватися та вступити на бюджет.
Навчання в Могилянці мені подобається. Великий плюс у тому, що ти вивчаєш тільки дійсно потрібні предмети. Немає такого, як у школі: подобається програмувати, але мусово ходити на уроки правознавства. Зараз у мене сім предметів: англійська, дві математики, програмування, мережеві технології, українська, фізкультура — п’ять профільних дисциплін. Самих годин навчання менше, ніж у школі. Проте воно напружене, з кожного предмета дають багато завдань.
Єдина проблема — це розклад. Здається, що його створюють випадковим чином. В інших вишах студенти відвідують три пари зранку — і йдуть додому. А в мене перша пара о 8:30, потім третя, а інколи ще й п’ята. Усього три пари, але фактично я маю бути в університеті весь день. Або ось у вівторок одна пара, а в середу — чотири чи п’ять. Наша група складається із 70 людей, яких з деяких дисциплін розбивають на підгрупи. Тож є такий «стратегічний» челендж: перейти в іншу підгрупу, щоб створити кращий розклад.
«Поки що я готовий працювати суто за досвід й інші бонуси — ту ж електроніку»
Ще з минулого року я розробляю та тестую електронну пропускну систему для мого ліцею «Наукова зміна». У нас є спонсор — компанія Checkbox, яка займається віртуальними чеками. Її засновник — випускник ліцею. Фінансування відбувається так само, як із дронами: робиться список закупівлі, на який нам скидають гроші. Над проєктом працюємо вп’ятьох разом з моїми друзями. Ця система покликана замінити Smarsy, яка стоїть у більшості шкіл, але має специфічні нюанси та проблеми. Уже зараз наш аналог працює в ліцеї, нехай і з перемінним успіхом.
За свою роботу ми отримуємо невелику оплату. Але поки що я готовий працювати суто за досвід й інші бонуси — ту ж електроніку. Як так виходить? Я відразу наперед не знаю, яку мені треба зробити систему: прототип може бути на основі однієї моделі, а потім доводиться щось докупити, поміняти. У результаті в мене залишається якась кількість різних мікросхем. Тож з таких проєктів я отримую багато досвіду в хардвері та певну електроніку, яка залишається в мене.
Так, якби не було цієї прохідної системи, то зараз мені доводилось би вчити все з нуля. Утім, я вже мав досвід роботи з Arduino, ЕSP32, Rasberry Pi, знав, як «розмовляти» з мікроконтролерами тощо.
Щодо підробітку, то зараз я ще займаюсь репетиторством, вчу школярів програмувати — і мені це подобається. Звісно, працювати в компанії було б корисніше та прибутковіше. Але я не певен, чи знайдеться роботодавець, якому буде достатньо 10 робочих годин на тиждень (чи скільки у мене буде вільного часу). Зараз я не можу дозволити собі фіксований графік через навчання та мої проєкти.
«Я здобув золоту медаль на Genius Olympiad у США»
Ще минулого року я здобув золоту медаль у категорії «Програмування» на Genius Olympiad, яка відбувалася у США на базі Рочестерського технологічного інституту. Цікаво, що туди я вклав найменше ресурсів порівняно з іншими проєктами, але отримав хороший результат. Це міжнародна олімпіада й доволі крута — наприклад, поїздку до США повністю оплачували. Але змагання специфічне — суто екологічного спрямування, тому його переважно розглядають як конкурс наукових проєктів. Більшість їдуть туди з розробками про забруднення планети в галузі біології, хімії тощо. Ще там є креативне письмо, поезія — відомі категорії з великою конкуренцією, чого не скажеш про програмування.
Завдяки тому, що мало людей знають про це змагання, на всеукраїнському етапі було лише близько 80 учасників. Потрібно було подати портфоліо у вигляді PDF-файлу та написати олімпіаду. Як і зазвичай, там було п’ять задач на алгоритми (хитрі операції з масивами, обчислення, графіки, «дерева» тощо). Але якщо порівнювати зі всеукраїнськими олімпіадами з інформатики, вона була значно простішою. Тобто враховуючи те, що мені вже було що розказати про себе і я мав серйозний досвід в олімпіадному програмуванні, перемога далася неважко.
На Genius Olympiad, 2024 рік
Це змагання — командне. Я брав у ньому участь з другом, який добре знає Python, для мене ж основні мови — С# і C++. Серед близько 40 учасників олімпіади в Штатах, де найвищою нагородою було гран-прі, ми здобули золото.
Можна було написати розв’язки будь-якою мовою програмування, водночас за використання Python давали додаткові бали. Багато людей писали на C++, тому що це ідеальне комбо для олімпіадного програмування. Більшість задач були простими — тільки остання мала багато нюансів та складне рішення. Тому майже всі розв’язали перші чотири задачі, але писали на інших мовах програмування. Ми ж послуговувалися Python, завдяки чому отримали найбільший додатковий бонус. Ще можна припустити, що у нашому варіанті були доволі оптимальні розв’язки. Так ми посіли призове місце.
«Хардвер-напрям схожий на LEGO: можна отримати реальний результат, зробити те, що їздить, блимає, пищить»
Щодо майбутнього, з IT-напрямів мене найбільше цікавить хардвер. Так, програмування суто на комп’ютері — доволі цікаво, але воно суто віртуальне. Мені дуже подобається LEGO, і хардвер-напрям його нагадує: можна отримати реальний результат, зробити те, що в житті їздить, крутиться, блимає, пищить тощо. До того ж, наприклад, коли ти пишеш сервер, буває багато нудної роботи. А я програмую зазвичай тільки логіку, граюсь, збираючи різні компоненти разом.
У мене є мрія заснувати власну IT-компанію, але поки що вона доволі абстрактна. Можливо, в основі лежатиме одна з моїх поточних розробок. Думаю, це перспективніше, ніж просто працювати програмістом. Гарні спеціалісти отримують високу заробітну платню, але все одно впираються у верхню межу прибутку. У керівника компанії таких границь немає.
Є й інші переваги. Якщо сьогодні в мене виникає ідея, то я мушу пройти всі етапи її реалізації. На прикладі тих же дронів: розібратися, як воно працює; налаштувати все; зрозуміти, чому щось не хоче на нього вантажитись або неможливо по якомусь протоколу спілкуватись з БпЛА. На це можна витратити весь день і не завжди отримати хороший результат. Тож у майбутньому хочеться мати можливість делегувати й тим часом займатися завданнями до вподоби — програмуванням чогось цікавого або велоспортом.