Танцюють роботи Tango

Tango Project від Google — проект по створенню мобільних пристроїв, здатних аналізувати простір навколо себе в трьох вимірах. Завдяки проекту Device Lab мені вдалося погратися одним з таких пристроїв.


Стаття автора Сергія Меліхова, в рамках конкурсу «Device Lab від Google».

Мені здалося цікавим зробити робота, який буде використовувати Tango для орієнтування у просторі та уникнення зіткнень з перешкодами.

Три базові функції Tango
Motion tracking

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


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

Depth perception
Завдяки наявності спеціальних датчиків — інфрачервоної камери та інфрачервоного лазера, проектує двовимірну сітку на простір перед пристроєм, Tango може отримувати хмара точок, тобто тривимірну картинку простору, що знаходиться перед пристроєм.



Area learning
Об'єднавши motion tracking, depth perception і додавши чорної алгоритмічної магії, в реальному часі об'єднує point cloud на манер панорами, ми отримуємо можливість будувати повну модель навколишнього простору в пам'яті пристрою і потім точно визначати своє положення всередині цієї моделі.


Основні застосування
  • Доповнена реальність (віртуальні об'єкти дійсно «прилипають» до реальних поверхонь, а не парять над ними або занурюються всередину, як це буває без Tango)
  • Точна навігація в приміщеннях
  • Ігри
  • Картографування приміщень
  • Створення 3D моделей (поки досить грубих, але все ж)
Насправді, найкращий спосіб зрозуміти що може Tango не маючи пристрою — подивитися на існуючі програми Play Market:





TangoBot
В понеділок я отримав довгоочікуване пристрій. Звичайно воно було розряджена в нуль. Я зарядив до 100% і включив.



Спочатку перепробував все, що було вже встановлено на пристрої, потім понаскачивал в Play Market всього підряд. Найбільший захват викликав Tango Constructor, що дозволяє сканувати навколишній простір і зберігати текстуровану 3D-модель.

Але пограли і вистачить — у мене всього 3 дні на те, щоб зробити робота і навчити його орієнтуватися в просторі.

Першим ділом — документація. https://developers.google.com/tango/ є все що потрібно для того, щоб почати розробляти для Tango в найкоротші терміни. Я почав з вивчення стандартних прикладів тут.

Для мого проекту я вирішив не заглиблюватися в Area Learning а просто аналізувати Point Cloud в реальному часі. Звичайно перший варіант був би набагато цікавіше, але я боявся не вкластися в термін.

Для «тушки» робота я взяв Arduino Mega з Motor Shield і двома моторами. Запрограмував Arduino так, щоб вона слухала і виконувала команди, що приходять по послідовному порту (який емулюється на USB). Платформу вирізав з 3мм фанери лазером, саме по собі захоплююче.



Скетч для ардуинки можна взяти тут. Сам пристрій Tango несе на борту Android 4.4, тому керуюча програма буде додатком Android. Для спілкування з Arduino я використовував бібліотеку usb-serial-for-andoid.

Протокол спілкування з Arduino вибрав найпростіший — всього 5 однобайтных команд:

  • F — їдемо вперед
  • B — їдемо назад
  • L — повертаємо вліво
  • R — поворачивам вправо
  • S — зупиняємося
У конфігурації Tango задаю, що мені потрібно point cloud «KEY_BOOLEAN_DEPTH»:

private TangoConfig setupTangoConfig(Tango tango) {
// Create a new Tango Configuration and enable the Depth Sensing API.
TangoConfig config = new TangoConfig();
config = tango.getConfig(config.CONFIG_TYPE_DEFAULT);
config.putBoolean(TangoConfig.KEY_BOOLEAN_DEPTH, true);
return config;
}

Tango повертає карту глибин (point cloud) у вигляді одновимірного масиву чисел з плаваючою комою. Перший за рахунком (а за індексом — нульовий елемент масиву — координата x першої точки, другий — у першої точки, третій — координата z першої точки. Четвертий елемент — це координата x вже для другої точки. Ну і так далі.

Я не сильний в робототехніці і геометрії, тому алгоритм аналізу карти глибин висмоктав з пальця. Кхм, ну тобто вивів емпірично.

До перешкоди я відношу точки, що потрапляють в параболічну область перед пристроєм, задану квадратичної формулою:



Коефіцієнти підібрані так, щоб парабола була витягнута глиб і в широчінь (у), трохи зміщена вниз (на 10 см).

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

Щоб мати можливість керувати роботом віддалено, я додав в проект підтримку Firebase і при зміні параметра stateString на сервері посилаю відповідну команду Arduino.



Робот катається, відвертається від стін і меблів, управляється віддалено, чим дуже мене радує.

Ось так він катається:



Мене порадувала простота розробки — на софт у мене пішло два дні, при тому що я не Android і навіть не Java розробник — витрачав час на війну з gradle і не розумів, чому не можна итерировать за ітератора.

Так що можу констатувати, що майбутнє настало — поріг входу в розробку продуктів на базі Tango вкрай низький. Tango SDK досить простий і логічний, на ринку з'являються вже звичайні користувальницькі пристрої з підтримкою Tango.

Проект можна зробити цікавіше, якщо використовувати не хмара точок, а модель, побудовану за допомогою Area Learning. Можна спробувати класифікувати навколишні предмети за допомогою TensorFlow, благо 192 ядра Cuda на пристрої дозволяють.

Спасибі за увагу, і поменше вам перешкод на шляху!

Джерело
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.