В Лаборатории Google мы добрались до самого инновационного и многообещающего устройства. Project Tango - платформа компьютерного зрения для мобильных устройств, разработанная группой инженеров ATAP (Advanced Technology and Projects). Работающее на Android референсное устройство вы можете взять на тест и использовать данные платформы в своих приложениях. Навигация внутри помещений, построение 3D-карт помещений, измерение расстояний, дополненная реальность – лишь малая часть задач, которые вы можете решить при помощи Project Tango. О том, как разрабатывать приложения для платформы – в нашей статье.
Project Tango это проект ATAP (Advanced Technology and Projects, исследовательское подразделение Google, образованное на основе Motorola Mobility и оставшееся после передачи всей остальной компании как раз в Lenovo), цель которого состоит в том, чтобы дать мобильным устройствам человеческое понимание пространства и движения.
За организацией ATAP в Google стоит легендарная Регина Дуган, глава DARPA, исследовательского отдела Министерства обороны, позже работавшая в Motorola. В Google она стала вице-президентом по инжинирингу, передовым технологиями и проектам. Под ее началом в ATAP, кроме Project Tango, разработали еще и Project Ara, первый модульный смартфон, который сейчас также готовится к выпуску.
В основе технологии – точное соединение данных от всех сенсоров и их быстрая обработка. Данные устройство получает от инфракрасных датчиков, нескольких фотокамер, точных акселерометров, гироскопов и барометров. Все вместе это позволяет создать точную трехмерную картину мира вокруг устройства, обновлять в режиме реального времени, определять положение внутри нее, передавать эти данные всем приложениям, и накладывать слои с информацией поверх. Можно сказать, что в одном смартфоне у вас совмещены сразу два подхода – сканер трехмерного окружающего пространства и пульт управления, отслеживающий движения в нем.
Возможности, которые дает такая платформа, вполне удивительны. Например, вы можете измерять расстояния до удаленных предметов. Или играть в игры с предметами своей обстановки. Делать макеты и планы внутренних помещений со всей обстановкой. Примерять мебель еще до покупки. В дополнение к очкам виртуальной реальности Google Cardboard – моделировать ваш дом для дальнейшего использования в играх или приложениях.
Возможности, которые дает такая платформа, вполне удивительны. Например, вы можете измерять расстояния до удаленных предметов. Или играть в игры с предметами своей обстановки. Делать макеты и планы внутренних помещений со всей обстановкой. Примерять мебель еще до покупки. В дополнение к очкам виртуальной реальности Google Cardboard – моделировать ваш дом для дальнейшего использования в играх или приложениях.
Разработка
Сама большая технология Tango на самом деле подразделяется еще на три (важно понимать, что сами названия, скажем так, немного избыточно описывают технологии):
- Отслеживание движений (Motion Tracking) – это позволяет устройству понимать позицию и ориентацию, движение в трехмерном пространстве (устройство выдает вам координаты и вектор движения);
- Изучение области (Area Learning) - Tango-устройство может использовать визуальные подсказки для распознавания мира вокруг, самостоятельно исправляя ошибки в отслеживании движений и переопределяя себя в тех местах, где оно уже было (устройство распознает место и корректирует движения на основе этого);
- Восприятие глубины (Depth Perception) – сенсоры могут «говорить» вам о формах реального мира вокруг, выстраивая взаимодействие с миром виртуальным (устройство может получить облако точек для текущего места).
//Для размещения приложений в Google Play вам в манифест надо добавить следующее:
<uses-library android:name="com.projecttango.libtango_device2" android:required="true" />
//Тогда оно будет устанавливаться только на совместимые устройства.
Вся работа Tango устройства руководствуется позами. По мере того, как устройство движется сквозь трехмерное пространство, оно до 100 раз в секунду высчитывает, где оно находится (позицию) и как оно повернуто (ориентацию). Одна единица таких объединенных данных называется "Позой" (pose). Это ключевая часть работы со всеми тремя концепциями, входящими в технологию – отслеживание движения, изучение области и восприятие глубины.
Вы как разработчики можете запрашивать позы двумя способами – для момента времени (через TangoService_getPoseAtTime()) или при доступности новых данных (коллбэк onPoseAvailable() для TangoService_connectOnPoseAvailable().)
В результате вы получаете такие данные:
Вы как разработчики можете запрашивать позы двумя способами – для момента времени (через TangoService_getPoseAtTime()) или при доступности новых данных (коллбэк onPoseAvailable() для TangoService_connectOnPoseAvailable().)
В результате вы получаете такие данные:
typedef struct TangoPoseData {
int version;
double timestamp; // в миллисекундах
double orientation[4]; // как кватернион, вектора
double translation[3]; // в метрах
TangoPoseStatusType status_code; // статус может измерения быть и некорректным, что надо учесть в своих приложениях
TangoCoordinateFramePair frame;
int confidence; // не используется
float accuracy; // не используется
} TangoPoseData;
Важна также ещё одна вещь в описании платформы – «События» (Events). По сути это уведомление о важных для устройства событиях, таких как, например, слишком яркая или темная картинка, которая не дает возможности системе определить положение. Получать такие события можно через коллбэк TangoEvent для функции TangoService_connectOnTangoEvent().
ОК, с получением собственных данных более или менее понятно. Но изучение области – немногим более сложная задача. Оно дает устройству возможность «видеть» и запоминать ключевые визуальные элементы физического пространства – грани, углы и прочее – распознавая их в последующем. Для этого устройство создает и хранит математическое описание всех этих визуальных особенностей в своей базе.
Полученные данные можно использовать для улучшения отслеживания движения – улучшая аккуратность («корректировка дрифта») и позиционируя себя в ранее изученных областях («локализация»).
Описания мест хранятся в Area Description File (ADF). Самый простой способ создать ADF – использовать приложение Tango Explorer, которое предустановлено на устройстве. Более сложный – Tango API для изучения, сохранения или загрузки данных в ваше приложение. Это может понадобиться вам, например, если вы захотите, чтобы виртуальные объекты появлялись у пользователя в том же месте, в котором он их оставил. Тут вам и понадобится локализация – вы загружаете ADF и перемещаете устройство в новую область. Как только оно «увидит» совпадение области и ADF, оно мгновенно узнает свое местоположение. Без локализации начальная точка будет все время теряться и системе надо будет заново строить модели.
Третья часть работы – чувство глубины. Оно дает приложению возможность измерять расстояние между объектами реального мира, пока устройство лучше всего работает в закрытых помещениях – на расстоянии около 3 метров оно уже практически не применимо из-за проблем с инфракрасным датчиком.
Tango API выдает данные о глубине в виде облака точек. Это набор координат (x, y, z) для такого количества точек в сцене, которое возможно. Само облако регулируется структурой TangoXYZij, а получение - коллбэком onXYZijAvailable() для connectListener().
ОК, с получением собственных данных более или менее понятно. Но изучение области – немногим более сложная задача. Оно дает устройству возможность «видеть» и запоминать ключевые визуальные элементы физического пространства – грани, углы и прочее – распознавая их в последующем. Для этого устройство создает и хранит математическое описание всех этих визуальных особенностей в своей базе.
Полученные данные можно использовать для улучшения отслеживания движения – улучшая аккуратность («корректировка дрифта») и позиционируя себя в ранее изученных областях («локализация»).
Описания мест хранятся в Area Description File (ADF). Самый простой способ создать ADF – использовать приложение Tango Explorer, которое предустановлено на устройстве. Более сложный – Tango API для изучения, сохранения или загрузки данных в ваше приложение. Это может понадобиться вам, например, если вы захотите, чтобы виртуальные объекты появлялись у пользователя в том же месте, в котором он их оставил. Тут вам и понадобится локализация – вы загружаете ADF и перемещаете устройство в новую область. Как только оно «увидит» совпадение области и ADF, оно мгновенно узнает свое местоположение. Без локализации начальная точка будет все время теряться и системе надо будет заново строить модели.
Третья часть работы – чувство глубины. Оно дает приложению возможность измерять расстояние между объектами реального мира, пока устройство лучше всего работает в закрытых помещениях – на расстоянии около 3 метров оно уже практически не применимо из-за проблем с инфракрасным датчиком.
Tango API выдает данные о глубине в виде облака точек. Это набор координат (x, y, z) для такого количества точек в сцене, которое возможно. Само облако регулируется структурой TangoXYZij, а получение - коллбэком onXYZijAvailable() для connectListener().
Уже этой осенью в продажу поступит первый фаблет Lenovo Phab 2 Pro. Большой смартфон, в золотом или сером цвете, это 6.4-дюймовый QHD экран, Snapdragon 652, 4 Гб оперативной памяти, батарея 4,050 мАч, звук Dolby Atmos 5.1. Плюс четыре камеры, включая 16 МП заднюю и 8 МП фронтальную, а также самое главное — 2 специальные Tango-камеры, одна для определения «глубины», а вторая для определения движения.
Первый проект
В качестве первого своего приложения для Tango вы можете использовать наработки из проекта Солнечной системы, разработанного студентами Университета Сан-Франциско. Он позволяет людям физически видеть нашу систему и совершать виртуальные прогулки по ней.
Проект написан на Unity как на самом быстром средстве разработки 3D-приложений.
Поднимается он всего за несколько простых шагов:
Поднимается он всего за несколько простых шагов:
- Скачайте Unity SDK.
- Создайте новый проект Unity и импортируйте Tango SDK.
3. В качестве примера планеты разместите сферу в центре:
4. Замените Главную камеру на Tango AR Camera и подключите Tango Manager через префабы. Для этого сначала удалите игровой объект Главной Камеры со сцены. Затем перетяните Tango AR Camera и Tango Manager из TangoPrefabs в папку проекта. Иерархия сцены должна выглядеть так:
5. В Tango Manage есть несколько настроек. Вам нужно включить автоматическое подключение к сервису (Tango Manage), отслеживание движений и накладывание видео.
6. Измените настройки сборки так, как написано в этом руководстве.
И вот ваш первый проект готов. Выглядеть он должен примерно так:
И вот ваш первый проект готов. Выглядеть он должен примерно так:
Студенты сделали пивной пинг-понг на Unity в дополненной реальности:
Интересные проекты, реализованные с помощью Project Tango
Приложение дополненной реальности для шоппинга
В магазинах Walgreens устройства будут помогать находить продукты. Понимая свою позицию внутри магазина, приложение сможет точно указывать путь к определенному товару. Кроме того, прямо в дополненной реальности будут показываться выгодные предложения и скидки, мимо которых иначе покупатели просто прошли бы (без преувеличения, они буду и правда "выскакивать с полок").
Навигация в Национальном музее искусств Каталонии
Навигация внутри помещений – одно из самых очевидных применений Project Tango. Одним из первых стал проект навигации для Национального музея искусств Каталонии. Этот гигантский музей, построенный в 1929 году, состоит из множества залов и переходов, так что заблудиться в нем не составляет труда. Project Tango может вести вас по музею, а попутно ещё и рассказывать о полотнах, выставленных в нём.
Измерение расстояний
Ещё одно понятное применение для Project Tango – измерение расстояний между точками. Если вы можете построить карту точек в трехмерном пространстве, то наверняка можете посчитать и расстояния между ними. Сколько метров в длину ваш стол, какова высота окна, влезет ли в этот проем диван – все это может измерить устройство, просто "посмотрев" на пространство перед собой.
Построение 3D-карт помещений
Следующий шаг в технологии после измерения расстояний – построение полноценных 3D-карт. Такое приложение сделали в компании Matterport. И вам не нужны больше специальные 3D-камеры, все делается с помощью Project Tango:
Дополнительные материалы
Как отслеживать движения в Unity:
https://youtu.be/UMKMuYA_FcM
Канал с несколькими роликами о разработке приложений на Unity:
https://www.youtube.com/channel/UCXh6fg2Lq3EC5FqwMzbFqtg/videos
Project Tango на GitHub:
https://youtu.be/UMKMuYA_FcM
Канал с несколькими роликами о разработке приложений на Unity:
https://www.youtube.com/channel/UCXh6fg2Lq3EC5FqwMzbFqtg/videos
Project Tango на GitHub: