ARCore - Какова роль Якорей, когда они прикреплены к Trackable? - PullRequest
1 голос
/ 25 марта 2019

У меня есть пример кода ARCore, в котором я прикрепляю Anchor к каждому новому обнаруживаемому треку. Я не понимаю полезности присоединения этих якорей, а также необходимости подключения нескольких якорей к одному трекабелю.

Я уже проверил документацию. Я не могу найти много объяснений.

Collection<AugmentedImage> updatedAugmentedImages =
    frame.getUpdatedTrackables(AugmentedImage.class);

// Iterate to update augmentedImageMap, remove elements we cannot draw.
for (AugmentedImage augmentedImage : updatedAugmentedImages) {
  switch (augmentedImage.getTrackingState()) {
    case PAUSED:
      // When an image is in PAUSED state, but the camera is not PAUSED, it has been detected,
      // but not yet tracked.
      String text = String.format("Detected Image %d", augmentedImage.getIndex());
      messageSnackbarHelper.showMessage(this, text);
      break;

    case TRACKING:
      // Have to switch to UI Thread to update View.
      this.runOnUiThread(
          new Runnable() {
            @Override
            public void run() {
              fitToScanView.setVisibility(View.GONE);
            }
          });

      // Create a new anchor for newly found images.
      if (!augmentedImageMap.containsKey(augmentedImage.getIndex())) {
        Anchor centerPoseAnchor = augmentedImage.createAnchor(augmentedImage.getCenterPose());
        augmentedImageMap.put(
            augmentedImage.getIndex(), Pair.create(augmentedImage, centerPoseAnchor));
      }

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

... Привет, Parul,

Якоря отображают реальный мир в расширенный мир и позволяют вам увидеть модель в определенной позиции.На самом деле якорь - это точка соприкосновения между виртуальным контентом и полученным датчиком контентом.

Я попытаюсь объяснить эту концепцию лучше:

Когда вы кладете 3d-модель куда-то, вам нужноопределить положение (x, y, z) и ориентацию модели в соответствии с началом координат.Вы знаете, где источник, потому что вы создаете этот мир неявно.Каждый раз, когда вы перемещаете свой телефон и работает ArCore, телефон хранит некоторую информацию о вашем движении, используя датчик (например, камера, гироскоп, акселерометр, ...), создавая представление в памяти пространства вокруг вас (как правило, разреженное облако точек).).

Как я могу сказать, что точка в моем виртуальном мире - это та же самая точка, присутствующая в этом новом пространстве, генерируемом телефоном?Я использую якорь.

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

Якоря будут обновлять каждый кадр ArCoreв соответствии с вашим движением позвольте контенту быть более реалистичным в соответствии с реальным миром.

зачем нужно прикреплять несколько якорей к одному отслеживаемому.

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

Нет необходимости создавать новый якорь для каждого объекта.Это хороший совет, чтобы использовать тот же самый якорь для моделей с некоторой пространственной взаимосвязью, предполагая также, что эти объекты не слишком далеко.Помните также, что использование и создание Anchor имеет стоимость с точки зрения используемых ресурсов вашим телефоном.Это может привести к потере производительности в вашем приложении, что испортит пользовательский опыт.

Надеюсь, это поможет.

Приветствия.

Вы также можете сослаться на эту статью:

https://developers.google.com/ar/develop/developer-guides/anchors

Также обязательно проверьте Визуальная инерциальная одометрия и SLAM , если вы хотите узнать больше о процессах, лежащих в основе этих методов.Просто Google, чтобы узнать больше.

0 голосов
/ 16 апреля 2019

В ARCore есть два простых понятия о Trackable и Anchor:

  • Trackable - это то, что ARCoreможет отслеживать и Anchors может быть присоединен к.

  • Anchor - это то, что может удерживать для вас трехмерную геометрию в ее положении в пространстве.

ArAnchor - это нулевой объект, который может содержать объект Renderable в мировых координатах, когда отслеживание ArSession равно ON.Думайте об ArAnchor так же, как о локальной оси вашего 3D-объекта.Каждый 3D-объект имеет точку поворота, верно?Таким образом, эта точка поворота должна соответствовать ArAnchor.

Любая трехмерная геометрия (также известная как Renderable) должна быть присоединена к ее собственной ArAnchor.Но один ArAnchor может содержать несколько трехмерных объектов.

Чтение Работа с якорями для получения дополнительной информации.

Надеюсь, это поможет.

...