我正在使用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校准的一个问题,而不是我的代码。
答案 0 :(得分:2)
我已经尝试了Java和带有Ramanujan版本1.17的c点云示例
depth test显示任意方向的漂移。我在测试时打印了平移和旋转值。尽管探戈是静止的而且没有移动。此外,探戈浏览器应用程序也有类似的行为。
tx | ty | tz | rx | ry | rz | rw
AVERAGE | -0,0005 | -0,0027 | 0,0134 | 0,6890 | 0,0518 | -0,0060 | 0,7228
MAX | 0,0206 | 0,0092 | 0,0281 | 0,6901 | 0,0546 | -0,0023 | 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
上面的值显示了很小的差异,在合并点云之后没有那么显着。
但问题是它在移动时会漂移。并且上面的错误累积起来。
还有其他相关主题:
google plus有一个讨论。 ADF可以提供帮助,我会试一试!
答案 1 :(得分:1)
在黑暗中拍摄:在启动过程中确保平板电脑完全静止。为什么?根据我对Invensense 9150的经验,初始化期间的传感器校准通过稳态输入得到改善。只需按下电源按钮,让它平放,直到它启动。
答案 2 :(得分:0)
我最近注意到了同样的间歇性漂移。关于Pythagoras的探戈游戏商店应用程序的更新时间似乎已经开始,但在我的探戈设备让Pythagoras推到它之前。纳什还在这里。漂移将突然开始和停止,并且似乎以几乎恒定的速率漂移。例如:使用Tangominitown Unity应用程序,它会很好。在平板电脑保持静止几秒钟后,应用程序会突然表现得好像我正在快速向前移动。这将持续几秒钟,在此期间速率似乎略微减慢然后它会突然停止漂移。巧合的是,我开始频繁出现#34; Tegra的服务已经停止了#34;消息大约在同一时间。这是除了通常的Tango服务已停止。可能不相关。编辑:我刚刚注意到漂移也出现在Google地图中。在静止时,地图位置偶尔会显示一个突然弯曲的轨迹,在大约3秒内覆盖大约50英尺直径圆的1/3,然后停止。