我有一个java应用程序,当我按下按钮时,会记录点云xyz坐标和正确的姿势。
我想要的是选择一个物体,在前面记录一个pointCloud,在后面记录一个,然后合并两个云。
显然,要获得合理的结果,我需要翻译并旋转我录制的云中的一个或两个。但我是Tango Project的新手,有一些我不应该错过的东西。
我已在this post中了解到这一点。
在那里,@ Jason Guo谈到了这些矩阵:
start_service_T_device
,imu_T_device
,imu_T_depth
getMatrixTransformAtTime()
吗?第一个矩阵是从服务开始到设备,但我使用区域学习,所以我的BaseFrame是TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION
。
start_service_T_device
替换为area_description_T_device
?我想扩展这种方法来进行物体的三维重建
我想得到几个相同对象的不同视图的pointClouds,旋转并将它们转换成一些固定的轴。然后我假设如果x~ = x'那么2个点(x,y,z)和(x',y',z')是相同的点。 &安培;&安培; Y〜= Y' &安培;&安培; ž〜= Z&#39 ;.
通过这种方式,我应该能够获得整个物体的点云,对吗?
答案 0 :(得分:1)
原帖有点过时了。以前,我们没有getMatrixTransformAtTime()。因此,您必须使用Tango.getPoseAtTime来查询每个转换,然后使用矩阵将它们链接起来。
但现在,使用getMatrixTransformAtTime,您可以直接查询area_description_T_depth,即使在opengl框架中也是如此。为了在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重新定位后或在学习模式下。