我正在使用Project Tango创建增强现实应用程序。其中一个重要部分是精确的位置跟踪。我当然知道没有惯性跟踪系统是完美的,但是到目前为止,Tango似乎运行得很好。

但是,在过去的几天中,即使将设备保持静止,来自Tango的翻译数据(x,y,z)似乎也会出现轻微漂移。我让设备在屏幕上写入X,Y和Z坐标,当设备静止不动时,其视场没有任何变化,X值缓慢上升,而Y和Z值缓慢下降。旋转值保持稳定并且始终准确。漂移有时会改变方向,也可以提高速度,有时会以每秒0.1个单位的速度增加。

旋转设备还会产生奇怪的平移行为,在绕三个轴中的任何一个旋转时都会发生较大的漂移。可以预测地移动设备会导致较大的漂移,并且似乎会增加事件的“速度”。

通常,我会将此归结为设备的不准确性,但是自从两周前我开始使用它以来,它的性能似乎受到了影响。该值曾经更加稳定。有什么我可以做的事情来将其“重置”为以前的样子,还是我做过的某件事可能导致这种情况?

下面附加的是姿势数据的回调函数:

        @Override
        public void onPoseAvailable(final TangoPoseData tangoPoseData) {
            if (tangoPoseData.baseFrame == TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION
                        && tangoPoseData.targetFrame == TangoPoseData.COORDINATE_FRAME_DEVICE) {
                rotationQuat = new vec4((float) tangoPoseData.rotation[TangoPoseData.INDEX_ROTATION_X],
                        (float) tangoPoseData.rotation[TangoPoseData.INDEX_ROTATION_Y],
                        (float) tangoPoseData.rotation[TangoPoseData.INDEX_ROTATION_Z],
                        (float) tangoPoseData.rotation[TangoPoseData.INDEX_ROTATION_W]);

                rotationMat = rotationQuat.toMatrix();
                Matrix.rotateM(rotationMat, 0, 90, 1.f, 0.f, 0.f);


                position = new vec3(SCALE_FACTOR * (float) tangoPoseData.translation[TangoPoseData.INDEX_TRANSLATION_X],
                        SCALE_FACTOR * (float) (tangoPoseData.translation[TangoPoseData.INDEX_TRANSLATION_Z]),
                        SCALE_FACTOR * (float) (-1 * tangoPoseData.translation[TangoPoseData.INDEX_TRANSLATION_Y]));

                float[] translationMatrix = new float[16];

                Matrix.setIdentityM(translationMatrix, 0);
                Matrix.translateM(translationMatrix, 0, -1.0f * position.x, -1.0f * position.y, -1.0f * position.z);

                SceneCamera.Instance().setEye(position);
                SceneCamera.Instance().setCameraOrientation(rotationMat);
                SceneCamera.Instance().setCameraTranslation(translationMatrix);

                main.displayVals(position, rotationQuat);
            }
        }


SceneCamera是用于在空间中移动“相机”的类。

SCALE_FACTOR = 1.0

要转换为OpenGL坐标,必须平移切换Y和Z轴。

对此问题的任何指导将不胜感激。

编辑:漂流似乎也出现在Project Tango Explorer应用程序中。当使用该应用程序的区域学习功能时,设备的位置在静止不动时会抖动和漂移,并且在绕Z轴(穿过屏幕的轴)旋转时,应将其保持在原位,会发生明显的平移漂移。这使我相信这是Tango校准的问题,而不是我的代码。

最佳答案

我已经尝试了Java和Ramanujan版本1.17的c点云示例

depth test显示任意方向的漂移。在测试时,我打印了平移和旋转值。尽管探戈是静态的,但并没有动。探戈浏览器应用程序也具有类似的行为。

tx | ty | tz | rx | ry | rz | w

平均-0,000 | -0,0027 | 0,0134 | 0,6890 | 0,0518 | -0,0060 | 0,7228

MAX | 0,0206 | 0,0092 | 0,0281 | 0,6901 | 0,0546 | -0,002 | 0,7238

MIN | -0,0159 | -0,0244 | 0,0022 | 0,6880 | 0,0495 | -0,0080 | 0,7217

DIFF(MAX; MIN)| 0,0366 | 0,0336 | 0,0258 | 0,0021 | 0,0051 | 0,0057 | 0,0021

上面的值显示出很小的差异,在合并点云之后这些差异并不明显。

但是问题是它在四处移动时会漂移。并且上面的错误会累积。


这样的值是“正常”的吗?而且我要处理吗?
还是探戈问题?


还有其他相关主题:


Transforming and registering point clouds
Project Tango: Converting between coordinate systems and merging point clouds
Future prospects for improvement of depth data on Project Tango tablet


关于google plus的讨论。 ADF可以帮助您,我将尝试一下!

关于google-project-tango - Project Tango Pose数据在静止和运动时产生漂移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30876433/

10-11 02:40