ARKit с несколькими пользователями

Как лучше всего использовать новый ARKit от Apple с несколькими пользователями / устройствами?

Кажется, что каждое устройство получает свое понимание сцены индивидуально. На данный момент я предполагаю использовать исходные позиции точек функций и пытаться сопоставить их на разных устройствах, чтобы склеить различные точки зрения, поскольку ARKit не предлагает никаких абсолютных ссылочных ссылок.

=== Edit1, Вещи пробовал ===

1) Особенности

Я поэкспериментировал с открытыми точками необработанных функций и теперь убежден, что в их текущем состоянии они являются тупиком:

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

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

2) QR-код

Как предложил @Rickster, я также попытался идентифицировать легко идентифицируемый объект, такой как QR-код, и получить относительное изменение ссылки из этой фиксированной точки (см. this question) Это немного сложно и подразумевает, что я использую некоторый openCV для оценки позы камеры. Но, что более важно, очень ограничивает


person Guig    schedule 13.06.2017    source источник
comment
Есть ли шанс отправить данные компаса устройства и / или данные ориентации на сервер, чтобы обеспечить перевод в систему координат другого устройства?   -  person Chris    schedule 26.07.2017
comment
Это возможно. Многопользовательский режим дополненной реальности, вероятно, в любом случае будет включать в себя синхронизацию, поддерживаемую сервером. Но это не дало мне точной разницы в переводе между двумя устройствами. Если бы картографирование можно было выполнять исключительно с помощью компаса, акселерометра и GPS, не было бы необходимости в сложной технологии SLAM, подобной той, что использует Apple.   -  person Guig    schedule 27.07.2017


Ответы (5)


Теперь, после выпуска ARKit 2.0 на WWDC 2018, можно создавать игры для 2-6 пользователей.

Для этого вам нужно использовать класс ARWorldMap. Сохраняя world maps и используя их для запуска новых сеансов, ваше приложение iOS теперь может добавлять новые возможности дополненной реальности: многопользовательские и постоянные возможности дополненной реальности.

Многопользовательская дополненная реальность. Теперь вы можете создать общий кадр ссылки, отправив заархивированные ARWorldMap объекты на ближайший iPhone или iPad. С несколькими устройствами, одновременно отслеживающими один и тот же world map, вы можете создать среду, в которой все пользователи (до 6) могут делиться и видеть один и тот же виртуальный 3D-контент (используйте новый формат файла Pixar USDZ для 3D в Xcode 10 и iOS 12).

session.getCurrentWorldMap { worldMap, error in 
    guard let worldMap = worldMap else {
        showAlert(error)
        return
    }
}

let configuration = ARWorldTrackingConfiguration()
configuration.initialWorldMap = worldMap
session.run(configuration)

Постоянный опыт дополненной реальности. Если вы сохраните world map, а затем ваше приложение iOS станет неактивным, вы можете легко восстановить его при следующем запуске приложения и в той же физической среде. Вы можете использовать ARAnchors из возобновленного world map, чтобы разместить тот же виртуальный 3D-контент (в формате USDZ или DAE) на тех же позициях из предыдущего сохраненного сеанса.

person Andy Fedoroff    schedule 07.06.2018
comment
Просто обратите внимание, что вы можете прикрепить обычное содержимое набора сцен к якорям и сохранить / получить его вместе с картой (не обязательно должен быть USDZ). У нашего стартапа есть SDK, который также может динамически загружать правильную карту в нужное время - [email protected], если кому-то интересно. - person Jordan; 12.06.2018
comment
полностью согласен)) - person Andy Fedoroff; 12.06.2018

Как добавили некоторые новые ответы, многопользовательская AR является основной функцией ARKit 2 (также известной как ARKit в iOS 12). Обсуждение WWDC18 по ARKit 2 содержит хороший обзор, а у Apple есть два разработчика примеры проектов кода, которые помогут вам начать работу: базовый пример, который получает всего 2+ устройств в общий опыт и SwiftShot, настоящую многопользовательскую игру, созданную для AR.

Основные моменты:

  1. ARWorldMap объединяет все, что ARKit знает о локальной среде, в сериализуемый объект, так что вы можете сохранить его на потом или отправить на другое устройство. В последнем случае перемещение на карту мира, сохраненную другим устройством в той же локальной среде, дает обоим устройствам одну и ту же систему отсчета (мировую систему координат).

  2. Используйте выбранную вами сетевую технологию для отправки ARWorldMap между устройствами: AirDrop, общие облачные ресурсы, почтовый голубь и т. Д. - все работает, но Multipeer Connectivity framework - хороший, простой и безопасный вариант, поэтому Apple использует его в своих примерах проектов.

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

    базовая многопользовательская демонстрация AR от Apple показывает кодирование ARAnchor и его отправку партнерам, чтобы один пользователь может нажать, чтобы разместить 3D-модель в мире, и все остальные смогут ее увидеть. Пример игры SwiftShot создает целый сетевой протокол, чтобы все пользователи получали одинаковый игровой процесс. действия (например, стрельба из рогаток друг в друга) и синхронизированные результаты физики (например, падение блоков после удара). Оба используют многопользовательское соединение.

(Кстати, второй и третий пункты выше - это то место, где вы получаете цифру от 2 до 6 из @andy answer - на стороне ARKit нет ограничений, потому что ARKit не знает, сколько людей могло получить карту мира, которую вы сохранили. Тем не менее, у многопользовательского подключения есть ограничение на 8 участников. И любая игра / приложение / опыт, который вы создаете поверх этого, может иметь проблемы с масштабированием задержки / производительности при добавлении дополнительных пиров, но это зависит от вашей технологии и дизайна.)

Оригинальный ответ ниже для исторического интереса ...


Кажется, это область активных исследований в сообществе разработчиков iOS - на прошлой неделе я встретил несколько команд, пытающихся разобраться в этом, на WWDC, и никто еще даже не начал его взламывать. Так что я не уверен, что есть лучший способ, если вообще возможный.

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

Режим выравнивания сеанса gravityAndHeading может оказаться полезным: он устраняет все направления к (предполагаемому / предполагаемому) абсолютному опорному кадру, но позиции по-прежнему относятся к тому месту, где находилось устройство в момент начала сеанса. Если бы вы могли найти способ связать это положение с чем-то абсолютным - широтой / долготой или, возможно, iBeacon - и сделать это надежно, с достаточной точностью ... Что ж, тогда у вас не было бы только системы отсчета, которая могла бы быть совместно используемый несколькими пользователями, у вас также будут основные ингредиенты для AR на основе местоположения. (Вы знаете, как плавающая виртуальная стрелка, которая говорит: поверните прямо здесь, чтобы добраться до выхода на посадку A113 в аэропорту, или что-то еще.)

Еще один подход, о котором я слышал, - это анализ изображений. Если бы вы могли разместить несколько реальных маркеров - легко распознаваемые машиной вещи, такие как QR-коды - с точки зрения нескольких пользователей, вы могли бы использовать некоторую форму распознавания или отслеживания объектов (возможно, модель машинного обучения?), Чтобы точно идентифицировать положение и ориентацию маркеров. относительно каждого пользователя, а затем вернитесь к нему, чтобы вычислить общую систему отсчета. Не знаю, насколько это возможно. (Но если вы пойдете по этому или подобному пути, обратите внимание, что ARKit предоставляет пиксельный буфер для каждого захваченного кадра камеры.)

Удачи!

person rickster    schedule 14.06.2017
comment
gravityAndHeading - хороший звонок. Я попробую это использовать. Я не могу полагаться на QR-коды или маяки, но, возможно, смогу идентифицировать некоторые другие изображения. Я рассмотрю распознавание объектов с помощью новых функций машинного обучения в iOS 11. Я подумываю сначала посмотреть на предметы на стенах, потому что они представляют только одно лицо, но это может быть не очень важным выводом. - person Guig; 14.06.2017
comment
Функциональные точки слишком беспорядочные, чтобы быть надежными: они добавляются и удаляются таким образом, что их трудно понять, и у них нет больше информации, чем предполагаемое трехмерное позиционирование, поэтому их действительно сложно сопоставить с кадрами Accros, не говоря уже о разных устройствах. . Я начал работать над подходом с использованием QR-кода в качестве первого шага к этому, но я застрял в математике .. stackoverflow.com/questions/44579839/ - person Guig; 16.06.2017
comment
gravityAndHeading на самом деле очень глючит. Ось -z вообще не соответствует северу и может отклоняться на 150 градусов (пока что в моих тестах). - person dmr07; 05.08.2017

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

  1. DIY ARKit настраивает свою мировую систему координат быстро после начала сеанса AR. Так что, если вы можете попросить всех игроков, одного за другим, поставить и выровнять свои устройства в одном и том же физическом месте, и позволить им начать сеанс там, то готово. Представьте себе внутренние края квадратной линейки L, прикрепленные ко всему доступному. Или любая плоская поверхность с отверстием: удерживайте телефон против поверхности, глядя через отверстие с помощью камеры, (повторная) инициализация сеанса.

  2. Средний Сохраните проигрыватель, выравнивая телефон вручную, вместо этого обнаруживайте маркер реального мира с помощью анализа изображений, как описано в @Rickster.

  3. Участвует. Обучите модель Core ML распознавать iPhone и iPad и их расположение камеры. Как будто это сделано с человеческим лицом и глазами. Соберите данные на сервере, затем выключите ML для экономии энергии. Примечание: убедитесь, что ваша модель защищена от крышки. :)

person diviaki    schedule 18.08.2017

Я занимаюсь обновлением инфраструктуры игрового контроллера (https://github.com/robreuss/VirtualGameController) для поддержки возможности совместно используемого контроллера, чтобы все устройства получали ввод от элементов управления на экранах всех устройств. Целью этого улучшения является поддержка многопользовательской функциональности на основе ARKit. Я предполагаю, что разработчики будут использовать первый подход, упомянутый diviaki, где общее позиционирование виртуального пространства определяется запуском сеанса на каждом устройстве из общей точки физического пространства, общей ссылки, и, в частности, я имею в виду, что по разные стороны стола. Все устройства будут запускать игру одновременно и использовать общее пространство координат относительно физического размера, а при использовании входных данных от всех контроллеров игра теоретически останется синхронизированной на всех устройствах. Все еще тестирую. Очевидная потенциальная проблема - это задержка или сбой в сети, и синхронизация разваливается, и ее будет трудно восстановить, кроме как путем перезапуска игры. Подход и структура могут достаточно хорошо работать для некоторых типов игр - например, для простых аркадных игр, но, конечно, не для многих других - например, для любой игры со значительной случайностью, которая не может быть скоординирована между устройствами.

person Rob Reuss    schedule 25.09.2017

Это чрезвычайно сложная проблема: самый известный стартап, который над ней работает, - это 6D.ai.

«Многопользовательская дополненная реальность» - та же проблема, что и постоянный SLAM, когда вам нужно позиционировать себя на карте, которую вы, возможно, не построили сами. Это проблема, над которой активно работают большинство производителей беспилотных автомобилей.

person Jordan    schedule 23.02.2018