Ios ARKit-继续获取相机位置的[0,0,0]

Ios ARKit-继续获取相机位置的[0,0,0],ios,iphone,swift,scenekit,arkit,Ios,Iphone,Swift,Scenekit,Arkit,我试图得到摄像机在三维空间中全局坐标的位置 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. sceneView.delegate = self sceneView.showsStatistics = true sceneV

我试图得到摄像机在三维空间中全局坐标的位置

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        sceneView.delegate = self
        sceneView.showsStatistics = true
        sceneView.session.delegate = self
    }

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // Create a session configuration with plane detection
    let configuration = ARWorldTrackingConfiguration()
    configuration.worldAlignment = .gravityAndHeading
    // Run the view's session
    sceneView.session.run(configuration)
}

func session(_ session: ARSession, didUpdate frame: ARFrame) {
        print(frame.camera.transform)
    }
我运行上面的代码,下面是一个示例输出

可选(simd_浮动4x4([-0.739868,-0.052769,-0.670678,0.0)], [-0.569322, 0.580241, 0.582402, 0.0)], [0.358422, 0.812733, -0.459345, [0.0,0.0,0.0,1.0)])可选(simd_浮动4x4([-0.790284,-0.0315036,-0.611929,0.0)],[-0.510883,0.585261,0.629656,0.0)],[0.338302,0.810233,-.478617,0.0)],[0.0,0.0,0.0,1.0])) 可选(simd_浮动4x4([-0.828626,-0.0174089,-0.559531,0.0)], [-0.458209, 0.595292, 0.660054, 0.0)], [0.321594, 0.803321, -0.501252, [0.0,0.0,0.0,1.0)])可选(simd_浮动4x4([-0.862658,-0.00656158,-0.505744,0.0)],[-0.404869,0.608273,0.682703,0.0)],[0.303151,0.793701,-0.527388,0.0)],[0.0,0.0,0.0,0.0] 可选(simd_浮动4x4([-0.898201,0.0059859,-0.43954,0.0)], [-0.337589, 0.631021, 0.698458, 0.0)], [0.28154, 0.775742, -0.564764, 0.0],[0.0,0.0,0.0,1.0)])可选(simd_浮动4x4([-0.920434,0.0197568,-0.390395,0.0)],[-0.284616,0.650707,0.703969,0.0)],[0.267941,0.759072,-0.593311,0.0)],[0.0,0.0.0,0.0] 可选(simd_浮动4x4([-0.940432,0.041811,-0.337396,0.0)], [-0.224465, 0.668996, 0.708559, 0.0)], [0.255342, 0.742089, -0.619762, 0.0],[0.0,0.0,0.0,1.0)])可选(simd_float4x4([-0.960581,0.0803864,-0.266119,0.0)],[-0.141218,0.683463,0.716193,0.0)],[0.239455,0.725546,-0.64517,0.0)],[0.0,0.0.0,0.0] 可选(simd_浮动4x4([-0.969532,0.108638,-0.219551,0.0)], [-0.0873999, 0.683869, 0.724349, 0.0)], [0.228836, 0.721471, -(0.653539,0.0)],[0.0,0.0,0.0,1.0)])

如您所见,即使在我移动手机时,第四列也始终为[0.0,0.0,0.0,1.0]。
有人能帮我理解这个4x4矩阵吗(我认为它是相机旋转与全局坐标中的位置相连,即相机外部参数)。

ARKit可能需要一段时间(以我的经验,在iPhone 7上10-15秒)才能获得足够的相机/运动数据来提供位置跟踪;在那之前,它只能给你方向,而位置将是你正在观察的-(0,0,0)。要处理此问题,您可以执行此方法并检查摄像头-当它从
notAvailable
limited
切换到
normal
时,您可以开始使用位置数据。

我认为[0,0,0,1]是第四行,始终保持不变。这只是一个填充行,可以使矩阵乘法很好地工作。

我让我的应用程序运行了一分钟多,但在第四列中仍然没有得到任何结果。。。出于某种原因,我收到一个错误“类型为'ARCamera'的值没有成员'trackingState'”。感谢您的帮助。事实证明,我有一个过时的SDK。更新后,一切正常!我无法在我的设备上复制这个。您可能希望尝试附上一个完整的项目。此问题的答案似乎表明您需要查看第三列中的位置: