Оглавление:

Размещение объектов AR в координатах GPS в дополненной реальности: 8 шагов (с изображениями)
Размещение объектов AR в координатах GPS в дополненной реальности: 8 шагов (с изображениями)

Видео: Размещение объектов AR в координатах GPS в дополненной реальности: 8 шагов (с изображениями)

Видео: Размещение объектов AR в координатах GPS в дополненной реальности: 8 шагов (с изображениями)
Видео: Visual Positioning System. SDK для ваших AR приложений 2024, Июль
Anonim
Размещение объектов AR в координатах GPS в дополненной реальности
Размещение объектов AR в координатах GPS в дополненной реальности

В этом руководстве мы поговорим о создании мобильного приложения для размещения объектов AR в координатах GPS с помощью ARkit и ARCore с использованием Unity3D. Я проведу вас через настройку проекта, который я сделал с помощью Mapbox, который позволяет нам помечать сообщения в определенных местоположениях GPS и записывать их в базу данных GameSparks.

Все программное обеспечение и проекты, которые мы здесь будем использовать, бесплатны.

Загрузите Unity 3D здесь, если у вас его еще нет:

unity3d.com/

Шаг 1. Препятствия…

Препятствия…
Препятствия…

Так что это не самое простое приложение с учетом текущих ограничений мобильного GPS и мобильного компаса.

Честно говоря, объекты появляются там, где должны, примерно в 50% времени. Так что результаты невысокие, но они становятся тем точнее, чем ближе вы подходите к объектам.

В любом случае, я думаю, что лучшим способом AR на основе GPS на данном этапе было бы использование карты, такой как pokemon go, и когда вы приближаетесь к объекту, камера открывается, и вы видите только этот объект прямо перед собой. В будущем я хотел бы сделать полное руководство по более простой реализации, подобной этой.

В любом случае я использовал Mapbox раньше, и я знаю, что у них есть класс преобразования, который имеет функции для преобразования координат GPS в мировые координаты Unity. Я думал, что могу просто передать некоторые координаты GPS, и они появятся там, где я хотел. Не сработало.

Объекты отображаются правильно относительно друг друга, но они никогда не были в нужном месте. Поэтому я провел небольшое исследование и обнаружил, что моя камера Unity должна быть выровнена по истинному северу, чтобы объекты отображались в нужном месте.

Проблема в том, что компас в вашем телефоне никогда не бывает абсолютно точным.

Шаг 2: глупый компас

Глупый компас
Глупый компас
Глупый компас
Глупый компас

Основная проблема заключается в том, что когда вы размещаете объекты далеко от камеры, если ваши телефоны представляют истинный север даже на несколько градусов, объекты на расстоянии будут казаться очень далекими.

Я почти отказался от этой затеи, но друг рассказал мне об этом проекте на GitHub:

github.com/mapbox/mapbox-ar-unity

Это попытка создать дополненную реальность "мирового масштаба" из Mapbox, где объекты привязаны к координатам GPS, чтобы дополненная реальность могла работать снаружи на больших расстояниях, а не только внутри небольшой комнаты в вашем доме.

Их проект использует дельты положения AR и дельты положения GPS для вычисления угла, который представляет собой смещение от камеры AR к истинному северу. Так что в основном возьмите одно показание GPS, когда пользователь запускает приложение, и пусть они идут по прямой и снимают еще одно показание GPS. Затем с помощью этих двух точек вы можете определить, в каком направлении шел этот человек (при условии, что его камера направлена в том направлении, в котором он идет). Они обнаружили, что это было более точным, чем использование компаса на телефоне.

Другая проблема, которую они пытаются решить, - это дрейф с ARkit. Отслеживание в маленькой комнате нормально, но когда вы идете на большие расстояния, объекты AR в конечном итоге дрейфуют далеко от того места, где они должны быть.

Шаг 3. Наконец-то решение

Наконец-то решение!
Наконец-то решение!

Таким образом, этот проект Mapbox предлагал способ получить надежное направление взгляда относительно истинного севера, поэтому все, что оставалось, - это просто разместить объекты в мире.

В итоге я немного расширил этот пример, чтобы я мог пометить текстовое сообщение в определенном месте GPS, а затем записать эту информацию в базу данных GameSparks. Это то, что я собираюсь показать вам, как использовать.

Единственная проблема с этим проектом заключается в том, что вы должны получить хорошее выравнивание, прежде чем его можно будет использовать.

Под выравниванием я подразумеваю то, что, поскольку Mapbox использует дельты положения для расчета курса, когда вы впервые открываете приложение, вы должны убедиться, что наземная плоскость обнаружена, а затем пройти некоторое время по прямой, пока не будет рассчитано правильное выравнивание.

В этом смысле UX - еще одно препятствие, но в усовершенствованиях проекта они дают пример размещения кубиков перед пользователем, чтобы пройти через них, чтобы обеспечить хорошее выравнивание.

Итак, теперь, когда вы знаете ограничения этого проекта, позвольте мне показать вам, как его использовать, чтобы ребята могли поиграть. В конечном итоге вам нужно будет создать учетную запись mapbox и учетную запись gamesparks, обе из которых бесплатны. Я использовал gamesparks, чтобы я мог где-нибудь сохранить GPS-координаты, потому что во время тестирования вы будете часто перезапускать и перестраивать приложение.

Кроме того, это должно работать как с ARkit, так и с ARcore, но на данный момент у меня есть только iPhone, так что это все, что я мог протестировать.

Шаг 4. Давайте запустим приложение

Давайте заставим приложение работать!
Давайте заставим приложение работать!

Перво-наперво загрузите этот проект с GitHub:

Сохраните файл на рабочий стол и откройте его в Unity.

Перейдите в файл, настройте параметры и переключите платформу на Android или IOS.

Теперь перейдите на Mapbox.com и создайте учетную запись, если у вас ее еще нет.

Возьмите свой ключ API и вернитесь в Unity, щелкните вкладку Mapbox вверху и щелкните настроить. Вставьте туда свой ключ API.

Теперь создайте учетную запись на GameSparks.com и нажмите кнопку в правом верхнем углу, чтобы создать новое приложение.

Назовите его как хотите и скопируйте свой ключ API и секрет приложения. Вернитесь в Unity и найдите вкладку GameSparks вверху. Нажмите «Настроить» и также вставьте туда свои учетные данные.

Шаг 5: Настройте GameSparks

Настройте GameSparks
Настройте GameSparks

Теперь, прежде чем приложение заработает, нам нужно настроить нашу базу данных.

GameSparks использует noSQL, поэтому нам нужно сначала создать коллекцию и добавить события, которые наше приложение использует для чтения, записи и удаления с сервера.

Сначала создайте новую коллекцию на сайте GameSparks и назовите ее как хотите.

Теперь нам нужно создать 3 события.

Первое, что нужно сделать приложению, - это записать объект сообщения в базу данных.

В сообщении указывается широта, долгота и затем текст сообщения.

Так что зайдите в конфигуратор и добавьте новое событие. Сделайте короткий код «SAVE_GEO_MESSAGE».

Добавьте все, что хотите, для названия и описания.

Добавьте краткий код для 3 атрибутов:

«ЛАТ» «ЛОН»

"ТЕКСТ"

Установите для каждого типа данных строковый и установите значение по умолчанию на 0. Сделайте тип агрегирования по умолчанию для каждого типа «используется в скрипте».

Шаг 6. Добавьте финальные события…

Добавить финальные события…
Добавить финальные события…

Приложению также необходимо загрузить все сообщения из базы данных и прочитать их в Unity при запуске приложения, чтобы мы могли разместить сообщения AR, которые хранятся в базе данных.

Создайте другое событие и назовите его "LOAD_MESSAGE"

Это событие не требует никаких атрибутов. Снова вставьте все, что хотите, для имени и описания.

Сделайте то же самое для другого мероприятия и назовите его "REMOVE_MESSAGES"

Для этого даже не нужны никакие атрибуты.

Теперь последнее, что нам нужно сделать, это добавить некоторый «облачный код» или код на стороне сервера, который вызывается при запуске каждого события из нашего приложения.

Шаг 7: Добавьте облачный код

В GameSparks перейдите в конфигуратор и облачный код.

Нам нужно добавить сценарий к каждому событию, которое мы только что создали.

В событии LOAD_MESSAGE добавьте этот код и сохраните его:

var messageData = Spark.runtimeCollection ("GeoMessage");

var cursor = messageData.find ();

var allMessages = ;

while (cursor.hasNext ()) {

var obj = cursor.next ();

удалить (obj ["_id"]);

allMessages.push (объект);

}

Spark.setScriptData («all_Messages», allMessages); // возвращаем все данные

В событии REMOVE_MESSAGES добавьте этот код:

var messageData = Spark.runtimeCollection ("GeoMessage");

messageData.remove ({});

Наконец, в событии SAVE_MESSAGES добавьте следующее:

var geoMessageList = Spark.runtimeCollection ("GeoMessage");

var messageLat = Spark.getData (). LAT;

var messageLon = Spark.getData (). LON;

var messageText = Spark.getData (). ТЕКСТ;

var currentMessage = {

"messLat": messageLat,

"messLon": messageLon,

"messText": messageText,

};

geoMessageList.insert (currentMessage);

Шаг 8: МЫ ЗАВЕРШЕНО

МЫ СДЕЛАЛИ!
МЫ СДЕЛАЛИ!

Этот проект использует уникальный идентификатор вашего устройства для аутентификации на сервере GameSparks, поэтому теперь вы можете вернуться в Unity и нажать кнопку воспроизведения, и вы должны увидеть в консоли «устройство аутентифицировано…»

Теперь перейдите к файлу, настройкам сборки и нажмите build. Если вы никогда не создавали приложение для Android или IOS, вам может потребоваться создать учетную запись разработчика в Google или Apple.

Как только приложение будет на вашем телефоне, вам нужно сначала убедиться, что ARKit или ARCore обнаруживают плоскость заземления. Теперь нажмите кнопку журнала в нижнем левом углу. Пройдите несколько шагов вперед, и вы увидите, что «вычисленное выравнивание» отображается голубым цветом. Теперь должны появиться кнопки пользовательского интерфейса, и если какие-либо сообщения загружены в вашу базу данных, они будут размещены в мире.

Чтобы пометить новое сообщение GPS AR где-нибудь, пройдите в нужное место и щелкните значок сообщения в правом верхнем углу экрана. Введите любое сообщение и нажмите кнопку с булавкой!

Рекомендуемые: