Почему метод `session` с `didRemove [ARAnchor]` никогда не вызывается для `ARBodyTrackingConfiguration`?

Я использую ARSessionDelegate на ARView, где я инициализирую ARBodyTrackingConfiguration.

Методы session с didAdd: [ARAnchor] и didUpdate: [ARAnchor] вызываются правильно. Но didRemove: [ARAnchor] никогда не вызывается.

Согласно официальной документации, привязки "могут" автоматически удаляться из сеанс, в зависимости от конфигурации сеанса. Я не нашел настройки для этого, хотя.

Кто-нибудь знает, почему метод session с didRemove [ARAnchor] никогда не вызывается и какую настройку мне нужно изменить, чтобы заставить его работать?

import ARKit
import RealityKit
import UIKit

class AugmentedVideoView: ARView, ARSessionDelegate {
    func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
        print("didAdd") // called correctly
    }

    func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
        print("didUpdate") // called correctly
    }

    func session(_ session: ARSession, didRemove anchors: [ARAnchor]) {
        print("didRemove") // is never called :-(
    }

    required init(frame: CGRect) {
        #if targetEnvironment(simulator)
        super.init(frame: frame)
        handleError("Camera not available in simulator.")
        return

        #else
        super.init(frame: frame,
                   cameraMode: ARView.CameraMode.ar,
                   automaticallyConfigureSession: false)
        self.session.delegate = self

        guard ARBodyTrackingConfiguration.isSupported else {
            handleError("Your device does not support body tracking.")
            return
        }

        let configuration = ARBodyTrackingConfiguration()
        configuration.automaticSkeletonScaleEstimationEnabled = false
        self.session.run(configuration)
        #endif
    }

    @available(*, unavailable)
    dynamic required init?(coder decoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}


person Tobias Zucali    schedule 18.11.2019    source источник


Ответы (1)


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

person Tobias Zucali    schedule 04.12.2019