ARKit – 如何为大环境生成世界地图?

ARKit – How to generate a worldMap for big environment?

我正在使用 ARKit 开发 4 人游戏。我知道如何保存然后得到 worldMap。这并不难。

sceneView.session.getCurrentWorldMap { worldMap, error in
    guard let map = worldMap
        else { self.showAlert(title: "Can't get current world map", message: error!.localizedDescription); return }

    guard let snapshotAnchor = SnapshotAnchor(capturing: self.sceneView)
        else { fatalError("Can't take snapshot") }
    map.anchors.append(snapshotAnchor)

    do {
        let data = try NSKeyedArchiver.archivedData(withRootObject: map, requiringSecureCoding: true)
        try data.write(to: self.mapSaveURL, options: [.atomic])
        DispatchQueue.main.async {
            self.loadExperienceButton.isHidden = false
            self.loadExperienceButton.isEnabled = true
        }
    } catch {
        fatalError("Can't save map: \(error.localizedDescription)")
    }
}

但我不知道如何跟踪 iPhone 以下位置(它是 50x50 米)来生成这个 worldMap

你能告诉我如何跟踪这个 space 吗?

如果你想在周围有 AR 对象的真实环境中有效地移动,你应该使用整个开发人员的武器库进行精确定位:Core Location 框架(它提供用于确定设备的地理位置、高度、方向或方向的服务)相对于附近 iBeacon 的位置)、iBeacon 框架和经过认证的硬件(iBeacon 位置感知的交互可能性对于室内导航来说特别酷)、Vision 和 Core ML 框架(设计用于使用经过训练的机器学习模型对输入数据进行分类像标志和图像)。

在使用上述框架之前,您应该多次跟踪 iPhone 整个环境(每次向现有特征数组添加新特征点)。看下图想象一下点云的样子:

P.S.

除上述内容外,ARKit 4.0 还为开发者提供了 ARGeoTrackingConfiguration with ARGeoAnchors and Scene Reconstruction 功能(当您的设备配备激光雷达扫描仪时可用)等工具。