我有一个Java应用程序,当我按下按钮时,它会记录点云xyz坐标以及正确的姿势。
我想要的是选择一个对象,在前面记录一个pointCloud,在后面记录一个pointCloud,然后合并2个云。
显然,要获得合理的结果,我需要平移和旋转记录的一个或两个云。但是我是Tango Project的新手,我应该缺少一些东西。
那里,@ Jason Guo讨论了这些矩阵:
start_service_T_device,imu_T_device,imu_T_depth
start_service_T_device
imu_T_device
imu_T_depth
getMatrixTransformAtTime()
第一个矩阵是从 服务开始 到 设备 ,但是我正在使用区域学习,所以我的BaseFrame是TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION。
TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION
area_description_T_device
我想将此方法扩展为对象的3D重建。 我想获得同一对象不同视图的多个点云,旋转并转换它们为一些固定轴。然后我假设如果x〜= x’&& y〜= y’&& z〜= z’,则2个点(x,y,z)和(x’,y’,z’)是相同的点。 这样,我应该能够获得整个对象的点云,对吗?
原始帖子有点过时了。以前,我们没有getMatrixTransformAtTime()。因此,您必须使用Tango.getPoseAtTime来查询每个转换,然后使用矩阵将它们链接起来。
但是现在,使用getMatrixTransformAtTime,即使在opengl框架中,您也可以直接查询area_description_T_depth。为了将点云转换为opengl中的ADF框架,可以使用以下代码(伪代码):
TangoSupport.TangoMatrixTransformData transform = TangoSupport.getMatrixTransformAtTime(pointCloud.timestamp, TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE, TangoPoseData.COORDINATE_FRAME_CAMERA_DEPTH, TangoSupport.TANGO_SUPPORT_ENGINE_OPENGL, TangoSupport.TANGO_SUPPORT_ENGINE_TANGO); // Convert it into the matrix format you use in render. // This is a pure data structure conversion, transform is // in opengl world frame already. Matrix4x4 model_matrix = ConvertMatrix(transform); foreach (Point p in pointCloud) { p = model_matrix * p; } // Now p is in opengl world frame.
但请注意,在使用ADF重新定位或处于学习模式后,您必须具有有效的区域描述框架才能根据区域描述查询姿势。