java - (Project Tango)通过区域学习进行点云的旋转和平移

标签 java android google-project-tango

我有一个 java 应用程序,当我按下按钮时,它会记录点云 xyz 坐标以及正确的姿势。

我想要的是选取一个对象,在前面记录一个点云,在后面记录一个点云,然后合并 2 个云。

显然,为了获得合理的结果,我需要平移和旋转我记录的一个或两个云。但我是 Tango 项目的新手,有些东西我应该错过。

我在 this post 中读到过此内容.

@JasonGuo 谈论了这些矩阵:

start_service_T_device, imu_T_device , imu_T_depth

第一个矩阵是从服务开始设备,但我使用的是区域学习,所以我的 BaseFrame 是 TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION

  • 在我的情况下也可以使用相同的策略吗?
  • 只需将 start_service_T_device 替换为 area_description_T_device 即可?

附带问题

我想扩展这种方法来进行对象的 3D 重建。
我想获得同一对象的不同 View 的多个点云,将它们旋转和平移到一些固定轴上。然后,如果 x~=x' && y~=y' && z~=z',则假设 2 个点 (x,y,z) 和 (x',y',z') 是同一点。< br/> 这样我应该能够获得整个物体的点云,对吗?

  • 这种方法合适吗?
  • 有更好的选择吗?

最佳答案

原来的帖子有点过时了。以前,我们没有 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 重新定位后或在学习模式下。

关于java - (Project Tango)通过区域学习进行点云的旋转和平移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37949436/

相关文章:

java - 如何在 NavigationView 的项目上添加选取框文本?

java - Android Studio 如何在不破坏自动提示的情况下将 java 类放入不同的文件夹?

android - Project Tango Unity3d Area Learning Scene 不更新 ADF 和 Localization 的姿势数据

java - 检查加载的 ADF 中的区域是否已本地化

java - 插入行并获取生成的 ID

java - 正则表达式:必须以 'id-' 开头但不能等于但可以以 'id-bitcoin' 开头

android - 没有找到类 "android.support.constraint.Barrier"

java - 期望多个 ResultSet,但只得到一个

java - LibGDX - 如何将 LibGDX 中的两个点击监听器中的 Clicked() 方法与 Android 类似?

android - 无法连接到Tango - 倩如