(探戈项目)点云的旋转和平移与区域学习
我有一个java应用程序,当我按下按钮时,记录点云xyz坐标和正确的姿势。
我想要的是选择一个对象,在前面记录一个pointCloud,在后面记录一个,然后合并2个云。
显然,为了获得合理的结果,我需要翻译和旋转我记录的一个或两个云。 但我是Tango Project的新手,我应该遗漏一些东西。
我在这篇文章中读过这篇文章 。
在那里,@ Jason Guo谈到了那些矩阵:
start_service_T_device
,imu_T_device
,imu_T_depth
- 我怎么能得到它们?
- 我应该使用
getMatrixTransformAtTime()
吗?
第一个矩阵是从服务开始到设备 ,但我正在使用区域学习,所以我的BaseFrame是TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION
。
- 在我的情况下是否也可以使用相同的策略?
- 只是用
area_description_T_device
替换start_service_T_device
?
边题
我想扩展这种方法来进行对象的三维重建。
我想获得几个相同对象的不同视图的pointClouds,旋转并将它们转换成一些固定的轴。 然后我假设如果x~ = x’&& y~ = y’&& z~ = z’,则2点(x,y,z)和(x’,y’,z’)是相同的点。
这样我就能够得到整个物体的点云,我是对的吗?
- 这种方法适合吗?
- 有更好的选择吗?
原帖有点过时了。 以前,我们没有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重新定位后或在学习模式下。