ARKit 对象随机摆动

Posted

技术标签:

【中文标题】ARKit 对象随机摆动【英文标题】:ARKit object randomly wiggles 【发布时间】:2019-01-28 13:11:33 【问题描述】:

在我们的 arkit 项目中,对象开始摆动。我们尝试使用较旧的代码,在我们遇到此问题之前它运行良好,但摆动并没有停止。 我们启用了调试选项来显示原点,它也会摆动。我们尝试将我们的应用程序用于不同的设备(iphone XS、Ipad pro 2018、ipad 2018,均使用 ios 12.1.3)和对象。 跟踪图像的大小合适。

这是我们的配置(Swift):

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "Photos", bundle: Bundle.main) else  return 
    let configuration = ARWorldTrackingConfiguration()
    configuration.detectionImages = referenceImages
    configuration.maximumNumberOfTrackedImages = 2
    let options: ARSession.RunOptions = [.resetTracking, .removeExistingAnchors]
    sceneView.session.run(configuration, options: options)
    sceneView.delegate = self

这是我们的渲染器:

 func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) 
        guard let imageAnchor = anchor as? ARImageAnchor else  return 
        let referenceImage = imageAnchor.referenceImage
        let imageName = referenceImage.name ?? "no name"


        let plane = SCNPlane(width: referenceImage.physicalSize.width, height: referenceImage.physicalSize.height)
        let planeNode = SCNNode(geometry: plane)
        plane.firstMaterial?.diffuse.contents = UIColor(white: 1, alpha: 0) //make the plane invisable

        let obj = SCNScene(named: "art.scnassets/obj.scn")!
        let objNode = obj.rootNode.childNodes.first!
        objNode.position = SCNVector3Zero
        objNode.eulerAngles.y = 90
        planeNode.addChildNode(objNode)
        node.addChildNode(planeNode)
    

任何人都可以帮助阻止摆动吗?

【问题讨论】:

【参考方案1】:

问题在于:“世界跟踪是一门不精确的科学。这个过程通常可以产生令人印象深刻的准确性,从而带来逼真的 AR 体验。但是,它依赖于设备物理环境的细节,这些细节并不总是一致或难以实时测量而不会出现一定程度的错误。要构建高质量的 AR 体验,请注意这些警告和提示”。 来自

来自Understanding World Tracking in ARKit。

为了获得更好的 AR 体验,请为您的应用提供适当的物理环境,包括良好的照明、带纹理的地板等... 希望对您有所帮助!

【讨论】:

以上是关于ARKit 对象随机摆动的主要内容,如果未能解决你的问题,请参考以下文章

对象检测 ARKit 与 CoreML

是否可以像在 Vuforia 中一样在 ARKit 中跟踪对象?

用于对象识别的 ARKit 和 Vision 框架

ARKit - 在场景编辑器中向对象添加纹理

ARKit 和 .dae 文件,对象之间的奇怪空间

ARKit 保存对象位置并在任何下一个会话中查看