【问题标题】:Marker based initial positioning with ARCore/ARKit?使用 ARCore/ARKit 基于标记的初始定位?
【发布时间】:2018-05-28 09:33:08
【问题描述】:

问题情况:始终以舒适的方式在同一个地方(在桌子上)创建 AR 可视化。我们不希望客户像在无数 ARCore/ARKit 示例中那样自行放置对象。

我想知道是否有办法实现这些步骤:

  1. 检测桌子上的标记
  2. 使用marker的位置作为AR-Visualization的初始位置,继续SLAM-Tracking

我知道 TangoSDK 的最新版本中包含类似标记检测 API 之类的东西。但这项技术仅限于少量设备(确切地说是两个......)。

最好的问候,并提前感谢任何想法

【问题讨论】:

  • 您可以免费使用aruco检测marker。您不需要标记跟踪,因为您只想使用初始化阶段。
  • 您可以做的一件事是使用三点标记。点击它们并计算要放置的模型的位置和方向。如果标记放置在水平面上,它就可以工作。
  • 问题是如何将检测到的标记的方向/位置转移到在 ARKit/ARCore 中放置对象的工作流程中。我认为这些解决方案正在寻找诸如“检测检测到的平面上的点击事件并连接对象”之类的事件。在我的情况下,它将是“获取我的标记位置并将其应用于检测到的平面”。但是对于这些框架来说,这一步似乎不是一件小事(?)

标签: augmented-reality arkit arcore google-project-tango slam


【解决方案1】:

目前,ARKit 3.0 和 ARCore 1.12 都拥有所有必要的 API 工具,可以完成几乎所有基于标记的任务,以精确定位 3D 模型。

ARKit

开箱即用,ARKit 能够检测 3D 对象并将 ARObjectAnchors 放置在场景中,以及检测图像并使用 ARImageAnchors 用于准确定位。主 ARWorldTrackingConfiguration() 类包括两个实例属性 - .detectionImages.detectionObjects。毫不夸张地说,ARKit 最初具有来自多个框架的不可或缺的内置功能:

除此之外,ARKit 3.0 与全新的 RealityKit 模块紧密集成,有助于实现多用户连接,ARAnchors 列表和共享会议。

ARCore

虽然 ARCore 有一个名为 Augmented Images 的功能,但该框架没有内置机器学习算法,可以帮助我们检测真实环境的 3D 对象,但是 Google ML Kit strong> 框架确实有。因此,作为一名 Android 开发人员,您可以同时使用这两个框架在 AR 场景中的真实对象上精确地自动合成 3D 模型。

值得肯定的是,ARKit 3.0 比 ARCore 1.12 拥有更强大和先进的工具包

【讨论】:

    【解决方案2】:

    这就是我迄今为止为 ARKit 得到的。

    @objc func tap(_ sender: UITapGestureRecognizer){
        let touchLocation = sender.location(in: sceneView)
        let hitTestResult = sceneView.hitTest(touchLocation, types: .featurePoint)
    
        if let hitResult = hitTestResult.first{
            if first == nil{
                first = SCNVector3Make(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y, hitResult.worldTransform.columns.3.z)
            }else if second == nil{
                second = SCNVector3Make(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y, hitResult.worldTransform.columns.3.z)
            }else{
                third = SCNVector3Make(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y, hitResult.worldTransform.columns.3.z)
    
                let x2 = first!.x
                let z2 = -first!.z
                let x1 = second!.x
                let z1 = -second!.z
                let z3 = -third!.z
    
                let m = (z1-z2)/(x1-x2)
                var a = atan(m)
    
                if (x1 < 0 && z1 < 0){
                    a = a + (Float.pi*2)
                }else if(x1 > 0 && z1 < 0){
                    a = a - (Float.pi*2)
                }
    
                sceneView.scene.rootNode.addChildNode(yourNode)
                let rotate = SCNAction.rotateBy(x: 0, y: CGFloat(a), z: 0, duration: 0.1)
                yourNode.runAction(rotate)
                yourNode.position = first!
    
                if z3 - z1 < 0{
                    let rotate = SCNAction.rotateBy(x: 0, y: CGFloat.pi, z: 0, duration: 0.1)
                    yourNode.runAction(rotate)
                }
            }
        }
    }
    

    理论是:
    制作三个点 A,B,C 使得 AB 垂直于 AC。按 A-B-C 的顺序点击点。
    在 ARSceneView 的 x=0 中找到 AB 的角度,该角度为节点提供所需的旋转。
    可以参考任何一个点来计算放置节点的位置。
    从C中查找节点是否需要翻转。

    我仍在处理一些需要满足的例外情况。

    【讨论】:

      【解决方案3】:

      如果使用 Google Tango,您可以使用内置的区域描述文件 (ADF) 系统来实现这一点。 该系统有一个保持屏幕,您被告知“四处走动”。在几秒钟内,您可以重新定位到设备之前所在的区域。 (或从服务器等中提取信息。)

      Google 的 VPS(视觉定位服务)是一个类似的想法,(仍然是封闭的 Beta 版)应该会出现在 ARCore。据我了解,它将允许您使用来自所有扫描位置的全球共享地图的相机源来定位特定位置。我想,当它发布时,它会尝试填补AR Cloud类型系统的空白,为普通开发者解决这些问题。

      https://developers.google.com/tango/overview/concepts#visual_positioning_service_overview

      在学术界和其他 AR 产品、hololens 等中解决了仅使用空间和摄像头预知识重新定位到空间的一般问题......不需要标记/标签。 但是,我不确定还有哪些其他商业系统提供此功能。

      【讨论】:

        【解决方案4】:

        我也对这个话题感兴趣。我认为 AR 的真正力量只有在与环境理解相结合时才能发挥出来。

        我认为你有两个选择:

        1. 等待新的 Vuforia 7 发布,据说它将支持带有 ARCore 和 ARKit 的视觉标记。
        2. 参与 CoreML / 计算机视觉 - 理论上这是可能的,但我没有看到很多示例。我认为开始可能有点困难(例如构建和校准模型)。

        但是 Apple 已对其进行了排序: https://youtu.be/E2fd8igVQcU?t=2m58s

        【讨论】:

          猜你喜欢
          • 2020-12-06
          • 1970-01-01
          • 1970-01-01
          • 2022-07-12
          • 2011-02-16
          • 1970-01-01
          • 2020-09-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多