Можно ли восстановить физическую (устройство) высоту камеры над физическим полом? - PullRequest
2 голосов
/ 29 мая 2019

Я разрабатываю приложение, используя ARCore .В этом приложении мне нужно:

1) разместить объект, всегда находящийся в одной и той же позе в мировом пространстве.Следуя рекомендациям к статье «Работа с якорями» (https://developers.google.com/ar/develop/developer-guides/anchors) Я прикрепляю якорь к ARCore Session . То есть я вообще не использую Trackables.

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

Мне удалось решить два реквизита, теперь объект «плавает» передо мной, таким образом (очень распространенный код):

private void onSceneUpdate(FrameTime frameTime) {
    ...
    if (_renderable!=null && _anchorNode==null) {            
        float[] position = {0f,0f,-10f};
        float[] rotation = {0,0,0,1};
        //
        Anchor anchor=_arFragment.getArSceneView().getSession().createAnchor(new Pose(position,rotation));
        //
        _anchorNode = new AnchorNode(anchor);
        _anchorNode.setRenderable(_renderable);
        _anchorNode.setParent(_arFragment.getArSceneView().getScene());
        _anchorNode.setLocalScale(new Vector3(0.01f,0.01f,0.01f)); //cm -> m
    ...
}

Поскольку я хочу, чтобы объект находился на полу, мне нужно выяснить, какова высота моей физической камеры (устройства) над полом, вЧтобы вычесть это число из координаты Y текущего объекта:

float[] position = {0f,HERE_THE_VALUE_TO_SUBTRACT_FROM_CAMERA_HEIGHT,-10f};

Конечно, это простая реализация, когда используются плоские Trackables, но здесь у меня есть реквизиты, названные выше.

I 'Нам удалось решить две задачи, теперь объект «плавает» передо мной.

Поскольку я хочу, чтобы объект находился на полу, мне нужно выяснить, какова высота моего физического (устройства).) пришелra над полом, для того чтобы вычесть это число из координаты Y текущего объекта.

Попытка с другой камерой / устройством Позы API поиска, а именно: frame.getAndroidSensorPose () , frame.getCamera (). GetPose () и frame.getCamera (). GetDisplayOrientedPose () показывают недопустимые значения.

Спасибо заВаш совет.

PS: Конечно, это легкая реализация, когда используются отслеживаемые плоскости, но здесь у меня есть другие реквизиты, как указано выше.


РЕДАКТИРОВАТЬпосле комментариев Майкла Дугана.

Что ж, я думаю, что у нас есть два способа получить необходимые реквизиты:

1) оставить код без изменений, продолжая использовать Session Anchor , попросив пользователя запустить приложение и выполнить «процесс калибровки», который устройство на полу.Поскольку это приложение для профессионального использования, а не для потребителя, мы считаем, что оно идеально подходит;

2) продолжайте использовать старые и добрые Trackables с помощьюобычный пол в качестве якоря, включая позу этого якоря при расчете положения 3D-модели.

...