НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ «КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ імені ІГОРЯ СІКОРСЬКОГО» Факультет інформатики та обчислювальної техніки Автоматизованих систем обробки інформації і управління «На правах рукопису» УДК 004.946 «До захисту допущено» Завідувач кафедри __________ О.А.Павлов «___»_____________2018 р. Магістерська дисертація на здобуття ступеня магістра зі спеціальності 121 Інженерія програмного забезпечення на тему: «Методи та програмні засоби формування доповненої реальності» Виконав: студент VI курсу, групи ІП-61м Гулак Олександр Сергійович __________ Керівник: Старший викладач Олійник Юрій Олександрович __________ Рецензент: __________________________ __________________________ __________ Засвідчую, що у цій магістерській дисертації немає запозичень з праць
95
Embed
kpi.ua€¦ · Web viewInstant Tracking, перша функція, що використовує SLAM, дозволяє розробникам легко створювати середовища
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
імені ІГОРЯ СІКОРСЬКОГО»Факультет інформатики та обчислювальної техніки
Автоматизованих систем обробки інформації і управління
«На правах рукопису»УДК 004.946
«До захисту допущено»
Завідувач кафедри
__________ О.А.Павлов
«___»_____________2018 р.
Магістерська дисертаціяна здобуття ступеня магістра
зі спеціальності 121 Інженерія програмного забезпеченняна тему: «Методи та програмні засоби формування доповненої
реальності»Виконав: студент VI курсу, групи ІП-61м Гулак Олександр Сергійович __________
Керівник: Старший викладачОлійник Юрій Олександрович __________
Засвідчую, що у цій магістерській дисертації немає запозичень з праць інших авторів без відповідних посилань.Студент (-ка) _____________
Київ – 2018 року
2
Національний технічний університет України«Київський політехнічний інститут імені Ігоря Сікорського»
Факультет інформатики та обчислювальної технікиАвтоматизованих систем обробки інформації і управління
Рівень вищої освіти – другий (магістерський) за освітньо-науковою програмоюСпеціальність (спеціалізація) – 121 «Інженерія програмного забезпечення» («Програмне забезпечення інформаційних управляючих систем та технологій»)
ЗАТВЕРДЖУЮ
В.о. завідувача кафедри
__________ І.П.Муха
«___»_____________2018 р.
ЗАВДАННЯна магістерську дисертацію студенту
Гулаку Олександру Сергійовичу
1. Тема дисертації «Методи та програмні засоби формування доповненої реальності», науковий керівник дисертації Олійник Юрій Олександрович, старший викладач, затверджені наказом по університету від «12» березня 2018 р. № 885-с
2. Термін подання студентом дисертації _________________________________
3. Об’єкт дослідження Процес формування доповненої реальності та орієнтування у навколишньому середовищі.
4. Предмет дослідження Швидкодія та ефективність методів формування доповненої реальності і орієнтування у навколишньому середовищі.
5. Перелік завдань, які потрібно розробити Аналіз сучасних методів та підходів формування доповненої реальності; розробка моделі формування доповненої реальності з одночасним відстеженням місцеположення; розробка експериментального мобільного застосунку для формування доповненої реальності з використанням розробленої моделі; експериментальне дослідження розробленої моделі.
6. Орієнтовний перелік графічного (ілюстративного) матеріалу
3
7. Орієнтовний перелік публікацій Дві публікації – тези доповідей на науковій конференції ISDMCI’2018 «Інтелектуальні системи прийняття рішень і проблеми обчислювального інтелекту» та конференції «Інформатика та обчислювальна техніка-ІОТ-2018»
8. Дата видачі завдання 11.02.2018
Календарний план№ з/п
Назва етапів виконання магістерської дисертації
Термін виконання етапів магістерської дисертації Примітка
1 Вивчення рекомендованої літератури 18.02.20182 Аналіз існуючих методів формування
доповненої реальності23.02.2018
3 Постановка, формалізація та розробка математичної моделі задачі
28.02.2018
4 Розробка методів розв’язання досліджуваної задачі
02.03.2018
5 Розробка інформаційного забезпечення 20.03.20186 Програмна реалізація 06.04.20187 Проведення експериментальних
досліджень08.04.2018
8 Оформлення документації 23.04.20189 Подання роботи на попередній захист 24.04.201810 Подання роботи на основний захист 04.05.2018
1.4 Порядок розміщення об’єктів доповненої реальності у навколишньому середовищі.............................................................................................................21
1.5 Популярні бібліотеки для формування доповненої реальності.................23
Розширений фільтр Калмана (EKF) дуже схожий на простий фільтр
Калмана, за тим винятком, що він може бути використаний в нелінійних
процесах.
37
EKF – це один з найбільш поширених методів рішення задачі SLAM. Він
дозволяє не тільки уточнювати оцінку становища робота на мапі, але і
положення всіх виявлених орієнтирів. Зазвичай процес оцінки стану системи, в
контексті SLAM, розбивають на три етапи.
Етап 1. Оновлення оцінки стану системи на основі одометричних
даних.
Етап 2. Оновлення оцінки стану системи на основі повторно
виявлених орієнтирів.
Етап 3. Додавання нових орієнтирів в систему.
Рисунок 2.2 – Приклад результатів виконання SLAM за EKF
На кожному кроці у нас є набір раніше отриманих особливостей і дані,
які щойно надійшли (дальномірні і RGB). На підставі нових і попередніх
кадрів ми можемо визначити зміщення камери (використовуючи методи
візуальної одометра) і передбачити нову позицію камери. З нового кадру ми
можемо виділити місце розташування особливостей і обчислити положення
камери щодо них [12]. На основі різниці між двома цими оцінками позицій
камери оновлюються ймовірності / ваги для всіх особливостей і коригуються
пози-траєкторія руху робота. Як структури для зберігання інформації про світ і
траєкторії руху робота – використовується розростається згодом матриця
38
коваріації, що містить на кожному кроці вичерпну інформацію про наш
поточному поданні світу.
Loop closure – виявлення петлею [12]. Відокремлено від завдань SLAM
стоїть питання як відслідковувати ситуації коли камера повертається туди, де
вже побувала (в літературі це називається loop closure - замикання, петля).
Одне з рішень – так звана корзина "слів". Кожному кадру ставиться у
відповідність дескриптор, який вираховується на основі візуальних
особливостей зображення. Для зберігання інформації про зображеннях, на
основі даних для навчання, формується словник у вигляді дерева, що містить
"слова" для подання дескрипторів і їх ваги (відображають наскільки часто
вони зустрічалися в наборі зображень для навчання). Для формування "слова"
проводиться пошук візуальних особливостей на основі даних для тренінгу і їх
подальша угруповання (за допомогою методу k-середнього). Кожен наступний
рівень дерева виходить шляхом повторення даної операції з дескриптором
батьківського вузла. В результаті, при аналізі ново-даних, що надійшли
проводиться швидке розкладання ідентифікатора поточного кадру в лінійну
комбінацію вузлів дерева, де в ролі коефіцієнтів виступають їх ваги -
ймовірності.
Як уже згадувалося вище, в даний час найбільш популярно уявлення
проблеми SLAM у вигляді графа, де вершини і ребра представляють позицію
робота і розташування особливостей сцени. iSam – одна з відкритих реалізацій,
побудована за цим принципом [12]. У iSam використовується двочастковий
граф складається з вузлів-поз, що містять результати обчислень координат
робота і вузлів-факторів, що містять результати оцінок візуальної одометра,
що відбиває зрушення між двома послідовними позами. Додатково
використовується безліч вузлів-особливостей, що містить обчислені
координати особливостей представлених на сцені. Вузли-пози і вузли-
особливості не можуть бути пов'язані один з одним безпосередньо, а тільки
через вузли-фактори. Як розширення можуть бути використані вузли-якоря -
39
особливості спостерігаються різними роботами (одночасно) або особливості
які бачить один і той же робот протягом декількох незалежних подорожей.
Ядро системи проводить оптимізацію даного графа вирівнюючи все вузли на
основі нових даних. Можлива робота і без особливостей і без вузлів-якорів -
тільки на основі результатів візуальної одометра.
При всій своїй привабливості, EKF проте має свої недоліки, до яких
можна віднести в першу чергу обмеження на кількість орієнтирів в системі.
Пов'язано це з тим, що матриця P має розмірність m на m, де m – кількість
виявлених орієнтирів. На кожному етапі оновлення матриці Р, повинен бути
оновлений кожен її елемент, в зв'язку з чим складність алгоритму O(m2). Таким
чином, EKF застосовується в ситуації, коли середовище має не дуже велику
кількість (кілька сотень) легко помітних орієнтирів.
2.2.2 Алгоритм FastSLAM
У описі застосування розширеного фільтра Калмана для вирішення
завдання картографії місцевості, була позначена основна проблема, що
обмежує можливості даного підходу, а саме неможливість його використання
на картах, які налічують більше кількох сотень орієнтирів.
Саме для вирішення цієї проблеми в 2002 році Montemerlo, Trun, Koller, і
Wegbreit розробили новий підхід до вирішення завдання SLAM [10].
FastSLAM розділяє завдання локалізації та картографії на безліч підзадач,
використовуючи незалежність стану окремих елементів моделі SLAM. B
основі алгоритму FastSLAM лежить застосування Байєсової мережі. З цього
слідує, що всі спостереження незалежні один від одного. Насправді, єдине, що
їх пов'язує – це помилка визначення положення робота. Таким чином, якщо
положення робота визначено абсолютно точно, то в цьому випадку не повинно
існувати жодних залежностей між окремими спостереженнями. Звичайно, в
реальності положення робота ніколи не відомо абсолютно точно, в цьому і
полягає сама сутність проблеми SLAM, але, тим не менше, сам факт
40
незалежності орієнтирів один від одного в достатній мірі мотивував творців
FastSLAM обробляти кожен орієнтир окремо.
При використанні цього алгоритму, задача SLAM розділена на кілька
підзавдань, і жодна з оцінок стану орієнтира не залежить від попередніх. Цей
факт, в свою чергу, дозволяє вирішити проблему поліноміальної складності
алгоритму на основі розширеного фільтра Калмана і уникнути її в FastSLAM.
Єдина ціна, яку доводиться платити за таке спрощення – це можливість
падіння точності, пов'язана з ігноруванням кореляції помилок оцінки положень
орієнтирів.
FastSLAM одночасно відстежує кілька можливих маршрутів, в той час як
розширений фільтр Калмана не зберігає навіть одного, а лише працює з
положенням робота – останнім кроком поточного маршруту. В оригінальному
вигляді, FastSLAM зберігає маршрут, але в обчисленнях використовує тільки
попередній крок.
В даний час в науковому світі для побудови систем локальної навігації і
картографії застосовується як підхід на основі розширеного фільтра Калмана,
так і на основі FastSLAM. Вибір того чи іншого методу залежить від
необхідної точності системи і її швидкодії, від параметрів середовища, таких
як наявність орієнтирів, їх кількість і фізичні характеристики і від багатьох
інших факторів. В останні роки все більшого поширення набуває алгоритм
FastSLAM і поступово витісняє розширений фільтр Калмана.
2.2.3 Алгоритм DP-SLAM
DP-SLAM – реалізація, що використовує свідчення лазерного далекоміра
і фільтр частинок для зберігання гіпотез про становище робота і конфігурації
навколишнього його сцени [10]. Фільтр частинок (послідовний метод Монте-
Карло) – рекурсивний алгоритм для чисельного вирішення проблем
оцінювання (фільтрації, згладжування), особливо для нелінійних випадків.
41
Метод полягає в тому, що в фільтрі підтримується безліч гіпотез про
поточний стан робота. У початковий момент генерується випадковий набір
гіпотез. В ході роботи алгоритму деякі з них будуть відсіюватися через
невідповідності вторинними ознаками системи, які можуть бути виміряні
більш точно. Після завершення циклу сканування вибирається найбільш
вірогідна з залишених в фільтрі гіпотез.
Для зберігання і структурування великого числа проміжних карт
авторами була реалізована деревоподібна структура (рисунок 2.3). Вся
інформація, необхідна для вирішення обох підзадач, локалізації і коригування
карти, поміщається в одному фільтр частинок.
Рисунок 2.3 – Деревоподібна система зберігання "гіпотетичних" карт
Розглянемо дві реалізації алгоритму DP-SLAM. Перша реалізація
одночасно підтримує до 9000 можливих гіпотез, і відсіває тільки ті з них, які в
силу невиконання яких-небудь умов абсолютно точно не можуть відповідати
реальному стану системи. Другий підхід на кожному кроці алгоритму вибирає
тільки одну найвірогіднішу гіпотезу і оновлює карту виходячи з неї. У цьому
випадку має перевагу реалізація, яка одночасно підтримує велику кількість
42
гіпотез, адже досить імовірна ситуація, при якій в силу шумів самої різної
природи найбільш імовірною стане гіпотеза, досить сильно відрізняється від
реального стану системи.
Висновки до розділу
У цьому розділі розкрито сутність концепції одночасного
картографування та локалізації SLAM. Описано різні алгоритми вирішення
цієї задачі. Алгоритм ORB-SLAM з використанням методу розширеного
фільтру Калмана найкраще підходить для використання у випадку з
монокулярними камерами через його розповсюдженість та простоту.
43
3 РОЗРОБКА АЛГОРИТМУ РОЗМІЩЕННЯ ОБ’ЄКТІВ ДОПОВНЕНОЇ
РЕАЛЬНОСТІ З ЗАСТОСУВАННЯМ SLAM
3.1 Постановка задачі
Існуючі бібліотеки для формування доповненої реальності спираються на
мітки у навколишньому середовищі. Деякі з них заявляють, що підтримують
SLAM, але на досвіді вони просто генерують мітки з початкової сцени. Тобто,
перед розміщенням об’єкта доповненої реальності, бібліотека генерує декілька
зображень-міток і далі спирається на них. Таким чином, практично ми бачимо
роботу без міток. Але фактично ці мітки просто генеруються при першому
запуску. Далі це часто призводить до погрішностей у роботі програмного
забезпечення, неплавної появи віртуальних об’єктів, якщо вони зникли з поля
зору, а потім знову з’явилися.
Задача полягає у тому, щоб інтегрувати алгоритми одночасного
картографування та локалізації для досягнення побудови доповненої
реальності без використання маркерів. Це дасть можливість більш плавно
відображати віртуальні об’єкти та будувати великі віртуальні локації поверх
зображення реального світу з використанням орієнтування у локації. При
цьому, будуть використані як зображення з камери, так і сенсори смартфону,
такі як акселерометр, гіроскоп та педометр.
3.2 Математична постановка задачі
Дано послідовність зображень Is, знятих камерою, що рухається з
відомими внутрішніми параметрами K у моменти часу ts, s = 1, 2…N. Дано
евклідові утворення Rs, ts, що описують положення камери для Is. Нехай xi – це
множина особливих точок, які можно побачити на Is. Для кожної xi дано xi,j ∈ R2 – упорядкована множина проекції особливої точки xi на Ij, j ∈ ts. Нехай xdi ∈ xi – множина особливих точок, що належить динамічним об’єктам.
44
Необхідно розробити алгоритм розпізнавання точок динамічних об’єктів,
що визначають множину xdi найкращим чином.
Розробити алгоритм реконструкції положення динамічного об’єкту, що
вираховує координати xdi,j, j ∈ ts у просторі особливих точок динамічних
об’єктів xdi. Орієнтуючись на ці координати, відображати об’єкти доповненої
реальності.
3.3 Алгоритм розв’язання
Будемо вважати камеру відкаліброваною, так що її внутрішня матриця K
з фокусом, оптичним центром та координатами дисторсії відома. Кожна точка
xi породжує трек проекцій {xi,j} у моменти j = ti,1, …, ti,ni, xi,j ∈ R2.
Положення камери задається матрицею повороту R 3x3, ri,j ∈ R і
вектором переносу t ∈ R3. Визначимо вектор параметрів θ, як вектор, по
якому можуть бути побудовані R, t. Відображення проекції π(θ, X) для точки X ∈ R3 на камеру з положенням θ при умові одиничної матриці K записується
наступним чином
π (θ , X )= 1r3
T X+t 3(r1
T X+t 1
r2T X+t 2
) ,
(3.1 )
де riT – рядок i матриці R;
t – компонента вектору переносу, для i = 1, 2, 3.
Якщо матриця K не є одиничною, ми можемо домножити усі проекції в
однородному вигляді на K-1.
Обчислення коефіцієнта Калмана K [9] розраховується, щоб з'ясувати,
наскільки ми будемо довіряти спостережуваним орієнтирів і скільки нових
даних в результаті ми хочемо з них взяти. Якщо ми побачимо, що камера
повинна бути переміщена на 10 см вправо, відповідно до попередніх
орієнтирів ми використовуємо коефіцієнт Калмана, щоб з'ясувати, наскільки
ми дійсно виправляємо становище. Це може бути тільки 5 см, тому що ми не
45
можемо довіряти орієнтирам повністю, а скоріше маємо знайти компроміс між
зміщенням орієнтира і корекцією, в тому числі від датчиків. Це робиться з
використанням невизначеності спостережуваних орієнтирів поряд з
вимірюванням якості замірів і характеристик датчиків. Якщо чіткість зміщення
орієнтирів працює дійсно погано, тобто з високою похибкою, в порівнянні з
показниками датчиків пристрою, ми, звичайно, не довіряємо йому, тому
коефіцієнт Калмана буде низьким. Навпаки, якщо зміщення орієнтирів
обчислюється чітко в порівнянні з показниками датчиків, то коефіцієнт
Калмана буде високим.
Визначення динамічних точок. Якщо деяка точка xi у полі зору камери
нерухома, то її проекції xi,j ∈ R2 задовольняють рівнянню
π (θc , j , X )=x i , j+v i , j ,(3.2 )
де vi,j - випадковий шум у спостереженнях;
{θc,j} - положення камери у моменти часу j = ti,1, …, ti,ni.
Точка класифікується як статична, якщо виконана умова (3.3) на середню
похибку перепроектування:
∃ X i∈R3: 1ni
|π (θ j , X i)−x i , j|<ε ,
(3.3 )
для деякого параметра похибки ε.
У обраному методі фільтрації Калмана, всі позиції, відмінні від поточної,
маргіналізуються після кожного кадру. Функції, які можуть бути виміряні
знову в майбутньому, зберігаються. Результатом є графік, який залишається
відносно компактним; він не буде рости довільно з часом і не буде рости
взагалі при повторному русі в обмеженій області, додавши постійні змінні
параметра тільки тоді, коли будуть досліджені нові області. Недоліком є те, що
графік швидко стає повністю взаємопов'язаним, оскільки кожне усунення
змінної минулої позиції призводить до заповнення новими зв'язками між
кожною парою змінних функцій, до яких вона була приєднана. Тому спільний
46
потенціал по всіх цих взаємопов'язаним змінним повинен зберігатися і
оновлюватися. Розрахункові витрати на поширення спільних розподілів погано
масштабуються з урахуванням числа змінних, і це головний недолік
фільтрації: в SLAM кількість функцій на карті буде сильно обмежена.
Стандартним алгоритмом фільтрації з використанням гауссових імовірнісних
розподілів є EKF, де щільні взаємозв'язки між ознаками проявляються в одній
щільності з'єднання за функціями, що зберігаються у вектором і великій
коваріаційній матриці.
Інший варіант полягає в тому, щоб зберегти підхід оптимізації BA,
дозволяючи будувати графік з нуля з плином часу, коли він росте, але для його
спрощення шляхом видалення невеликої підмножини минулих позицій. У
деяких додатках розумно, щоб збережені позиції були в ковзному вікні
останніх положень камери, але в цілому вони представляють собою набір
інтелектуальних або евристичний обраних ключових кадрів. Решта позицій, і
всі пов'язані з ними вимірювання, які не маргіналізуються, як в фільтрі, а
просто відкидаються – не вносять ніякого вкладу в оцінки поточної позиції. У
порівнянні з фільтрацією, цей підхід призведе до створення графіка, який має
більше елементів (оскільки багато минулі позицій збережені), але, що важливо
для виведення, відсутність маргіналізації означає, що він буде залишатися
слабко взаємозалежним. В результаті оптимізація графіка залишається
відносно ефективною, навіть якщо кількість функцій на графіку і вимірювань з
ключовими кадрами дуже велика. Можливість включення більшої кількості
вимірів об'єктів компенсує інформацію, втрачену з відкинутих кадрів.
Реконструкція положення динамічного об’єкту. Динамічний об’єкт і
складається з набору точок, представленого у деякій системі координат об’єкта
{Xi,j}, Xi,j ∈ R3. Ці точки рухаються узгоджено, і їх місцеположення у момент t
задається вектором параметрів θo,t. Нехай × – операція композиції евклідових
утворень, тоді θoc,j = θc,j × θo,j задає утворення з координат об’єкта у координати
камери, і проекції кожної точки динамічного об’єкта задовольняють умову
47
π (θo , t , X i ,k , l )=xi ,kl+v i ,k , l∀ k=1…N i ,(3.4 )
де і – номер об’єкта, Ni – число точок об’єкта, l – момент часу.
Починаючи з Ni ≥ 5, по двом кадрам можуть бути відновлені положення і
координати точок об'єкта. Для Ni ≤ 3 це неможливо без додаткових припущень
про положення або руху об'єкта (наприклад, положення або рух в площині).
У цій роботі будемо вважати Ni ≥ 5. Пропонується наступний алгоритм
реконструкції.
Якщо об'єкт спостерігається на двох досить віддалених кадрах,
розрахувати істотну матрицю для точок об'єкта, визначити консенсунсну
множину точок, що рухаються узгоджено з об'єктом, і відкинути викиди,
ініціалізувати координати точок об'єкта;
Для наступних кадрів, запустити метод OPnP [13] для точок
об'єкта і визначити його позицію на кожному кадрі;
Виконати bundle adjustment [13] для уточнення положення об'єкта
і точок на кожному кадрі.
Останнім часом значно зросло розуміння загального характеру проблем
локалізації та реконструкції. Зокрема, нещодавно у області досліджень
«Структура з руху» (Structure from Motion, SFM) [14] був виявлений розрив в
комп'ютерному баченні, принципи якого були отримані з фотограмметрії та
підполі одночасної локалізації і зіставлення (SLAM) досліджень мобільних
застосунків – звідси дещо неясна двозначна термінологія. Істотний характер
цих двох проблем, які оцінюють рух датчиків шляхом моделювання раніше
невідомого, але статичного середовища, той же, але мотивація дослідників
історично була іншою. SFM займався проблемами реконструкції 3D-сцени з
невеликих наборів зображень, а проектна геометрія і оптимізація були
поширеними методами рішення. З іншого боку, в SLAM класичною
проблемою є оцінка руху рухомого робота в режимі реального часу, оскільки
він постійно спостерігає і відображає його невідому середу за допомогою
48
датчиків, які можуть включати чи не включати камери. Тут на перший план
вийшли послідовні методи фільтрації.
Він повністю прийняв байєсовські методи, щоб вони могли бути
зрозумілі єдиною мовою і повним переходом до методологій. Але залишається
той факт, що в конкретному завданні відстеження монокулярних камер в
режимі реального часу найкращі системи були сильно прив'язані до одного з
підходів або до іншого. Питання в тому, чому і наскільки один підхід явно
перевершує інший, потребує вирішення для керівництва майбутніми
дослідженнями в цій важливій галузі застосування.
Висновки до розділу
В розділі сформовано поставку математичного завдання розробки
алгоритму одночасної локалізації та картографування SLAM. Розроблено
алгоритм побудови доповненої реальності з використанням відомого методу
ORB-SLAM для монокулярної камери та використанням фільтру Калмана, що
дозволяє розміщувати віртуальні об’єкти у невідомому середовищі без
використання заздалегідь заданих міток.
49
4 ОПИС ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
4.1 Засоби розробки
Для розробки програмного забезпечення під операційну систему Android
OS було використано такі мови програмування, як Java і Kotlin для розробки
самого мобільного додатку, та C++ для інтеграції алгоритму ORB-SLAM.
Інтеграція виконана з використанням інструментарію Android NDK. У якості
бібліотеки доповненої реальності було обрано Wikitude SDK.
У якості середовища розробки використано IDE Android Studio 3.0.1 для
Windows.
4.2 Вхідні та вихідні дані
Вхідними даними є відеопотік з камери смартфону та дані з його
датчиків, а саме:
акселерометра для відслідковування переміщення мобільного
пристрою у просторі;
гіроскопу для реагування на зміну кутів орієнтації мобільного
пристрою у просторі;
педометра для підрахунку кількості зроблених кроків.
На виході отримуємо той же відеопотік, але вже з накладеними поверх
нього об’єктами доповненої реальності. Положення об’єктів має динамічно
змінюватися з урахуванням переміщення мобільного пристрою у просторі.
4.3 Вимоги до архітектури програмного забезпечення
Система повинна підтримувати щонайменше 90% смартфонів з
операційною системою Android. Тому мінімальна версія API – 19.
Код програми має бути гнучким до змін, зокрема до правок у алгоритмі
одночасної локалізації та картографування. Це призводить до потреби в
50
модульності системи, інтеграції засобами Android NDK для легкого
використання вихідних кодів відомих реалізацій SLAM на C++.
Також важлива вимога ефективності та швидкодії процесу обробки
вхідного відеопотоку та відображення об’єктів доповненої реальності. Це
призвело до вибору нативних методів розробки у середовищі програмування
Android Studio з використанням мов програмування Java та Kotlin.
Для керування процесом виконання програми необхідно, щоб користувач
мав змогу розмістити об’єкт доповненої реальності, запустити
відслідковування місцеположення пристрою, спостерігати за зміною
положення віртуального об’єкта у навколишньому середовищі та зупинити
відслідковування місцеположення пристрою.
4.4 Структура класів програмного забезпечення
Інтерфейс TrackerListener надає методи для відслідковування стану
сцени навколишнього середовища. Метод onInitializationPoseChanged слугує
для прослуховування події зміни початкової позиції пристрою. Метод
onStateChanged – за зміни стану відслідковування об’єктів доповненої
реальності. onTracked – за подію появи об’єкта у полі зору камери. Метод
onTrackingStarted – за початок відслідковування об’єктів доповненої
реальності. onTrackingStopped – за кінець відслідковування.
Інтерфейс ExternalRendererListener слугує слухачем на подію кінця
процесу ініціалізації зовнішнього рендера onRenderExtensionCreated.
Інтерфейс InstantTracker надає проміжні методи для взаємодії з методами
відслідковування об’єктів за допомогою зовнішньої бібліотеки WikitudeSDK.
Основними методами є convertScreenCoordinatesToPointCloudCoordinate для
конвертації положення камери у координати навколишнього середовища,
метод setDeviceHeightAboveGround, що задає висоту камери над поверхнею
землі та метод setTrackingPlaneOrientation, що задає поточне положення
мобільного пристрою.
51
Абстрактний клас Renderable надає методи та поля для зберігання
відтворюваних об’єктів. Матриці projectionMatrix та viewMatrix зберігають
дані про положення об’єкту у просторі та його поточне положення на екрані.
Метод onDrawFrame малює об’єкт на екрані, в той час як метод
onSurfaceCreated викликається після першої ініціалізації об’єкту на екрані.
Клас GLRenderer містить відомості про усі об’єкти доповненої
реальності та відображає їх. У ньому є карта TreeMap<String, Renderable>
mRenderables з ключем – ідентифікатором об’єкта. Основні методи
onDrawFrame(GL10) для відмальовування об’єктів на фреймі та
onSurfaceChanged(GL10, int, int) для реагування на зміни на фреймі. Та методи
керування списком об’єктів, такі як додання setRenderableForKey, видалення
removeRenderableForKey та отримання getRenderableForKey.
Клас OrbSLAMHelper є проміжним між класами мобільного додатку та
алгоритмічною частиною вирішення задачі SLAM, написаною на C++. Метод
glesInit виконує підготовку до виконання локалізації та картографування.
Метод glesResize задає розміри вхідного відеопотоку даних. Метод
initSystemWithParameters ініціалізує систему зі шляхом до камери та
калібрування. Метод startCurrentORB починає локалізацію та картографування
SLAM.
Клас MainActivity є центральним класом для керування усіма складовими
програми. Він реалізує інтерфейси TrackerListener та ExternalRendererListener.
Містить у собі реалізації таких вищеназваних інтерфейсів так класів, як
InstantTracker, Driver, GLRenderer та OrbSLAMHelper. Містить поле
mWikitudeSDK для використовування методів побудови доповненої реальності
за допомогою бібліотеки Wikitude. Містить поле mSurfaceView для
відображення відеопотоку з камери разом з віртуальними об’єктами.