将激光雷达的深度数据与 ARKit iOS 检测到的壁面关联

时间:2021-07-26 06:21:59

标签: ios arkit

我想从从激光雷达接收到的深度数据中删除属于墙壁的深度数据。

我启用了垂直平面检测,我可以检索平面锚几何体和平面中心。我也通过计算平面法线来计算平面方程。

法线计算是基于从平面 Anchor 的顶点列表中取两个顶点(点 P 和 Q)并创建从中心到点 P 和 Q 的两个向量来完成的。

  • 如何将来自激光雷达的深度数据与 ARKit 报告的特定平面相关联。

这是我迄今为止尝试过的,

let planeCenter = planeAnchor.transform * simd_float4(planeAnchor.center,1)
                        let numberOfVertices = planeAnchor.geometry.vertices.count/2
                        //print ("Wall Plane Abs Center: ", planeCenter)
                        
                        let p1 = planeAnchor.transform * simd_float4(planeAnchor.geometry.vertices[0],1)
                        let p2 = planeAnchor.transform * simd_float4(planeAnchor.geometry.vertices[numberOfVertices],1)
                        let origin = simd_float3(planeCenter[0],planeCenter[1],planeCenter[2])
                        
                        let p1_f3 = simd_float3(p1[0],p1[1],p1[2])
                        let p2_f3 = simd_float3(p2[0],p2[1],p2[2])
                        
                        let v1 = p1_f3 - origin
                        let v2 = p2_f3 - origin
                        

                        let planeNormalUn = ( cross(v1, v2))

所以现在我假设我在世界坐标中有点 P1 和 P2 以及原点。这个假设是真的吗?

如果是这样,那么这意味着我对从激光雷达接收到的深度数据使用 frame.camera.transform 将它们转换为世界坐标,结果点应该位于平面上(如果它们在现实世界中的平面上) .

如果我在某处错了,请纠正我,因为这不起作用。

0 个答案:

没有答案
相关问题