(Project Tango) 带区域学习的点云旋转和平移
(Project Tango) Rotation and translation of point clouds with area learning
我有一个 java 应用程序,当我按下按钮时,它会记录点云 xyz 坐标以及正确的姿势。
我想要的是选取一个物体,在前面记录一个点云,在后面记录一个点云,然后合并2个点云。
显然,为了获得合理的结果,我需要平移和旋转我记录的一个或两个云。但我是 Tango 项目的新手,有些东西我应该遗漏。
我在 中读到过此内容。
在那里,@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
?
附带问题
我想将这种方法扩展到对象的 3D 重建。
我想获得同一对象的不同视图的多个点云,通过一些固定轴旋转和平移它们。然后我假设 2 点 (x,y,z) 和 (x',y',z') 是同一个点如果 x~=x' && y~=y' && z~=z'.
这样我应该能够得到整个物体的点云,对吗?
- 这种方法合适吗?
- 有更好的选择吗?
原来的post有点过时了。以前,我们没有 getMatrixTransformAtTime(). So you have to use 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 重新定位后或处于学习模式。
我有一个 java 应用程序,当我按下按钮时,它会记录点云 xyz 坐标以及正确的姿势。
我想要的是选取一个物体,在前面记录一个点云,在后面记录一个点云,然后合并2个点云。
显然,为了获得合理的结果,我需要平移和旋转我记录的一个或两个云。但我是 Tango 项目的新手,有些东西我应该遗漏。
我在
在那里,@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
?
附带问题
我想将这种方法扩展到对象的 3D 重建。
我想获得同一对象的不同视图的多个点云,通过一些固定轴旋转和平移它们。然后我假设 2 点 (x,y,z) 和 (x',y',z') 是同一个点如果 x~=x' && y~=y' && z~=z'.
这样我应该能够得到整个物体的点云,对吗?
- 这种方法合适吗?
- 有更好的选择吗?
原来的post有点过时了。以前,我们没有 getMatrixTransformAtTime(). So you have to use 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 重新定位后或处于学习模式。