我正在使用Project 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轴(穿过屏幕的轴)旋转时,会发生显著的平移漂移,而此时它应该保持在原位。这让我相信这是探戈的校准问题,而不是我的代码。
发布于 2015-07-01 20:37:36
暗算一下:确保你的平板电脑在开机时完全静止不动()。为什么?根据我使用Invensense 9150的经验,使用稳定输入可以改进初始化过程中的传感器校准。只需按下电源按钮,让它平放,直到它启动。
发布于 2015-06-18 01:54:05
我最近也注意到了同样的间歇性漂移。这似乎是在探戈游戏商店应用程序为Pythagoras更新的时候开始的,但在我的探戈设备推送Pythagoras之前。还在用纳什。漂移会突然开始和停止,并且似乎以几乎恒定的速度漂移。例如:使用Tangominitown Unity应用程序可以很好地启动。几秒钟后,当平板电脑静止不动时,应用程序会突然表现得好像我在快速前进一样。这将持续几秒钟,在此期间,速率似乎略有减慢,然后突然停止漂移。巧合的是,大约在同一时间,我开始频繁收到"Tegra服务已停止“的消息。这是对通常的Tango服务已经停止的补充。可能是无关的。编辑:我只是注意到在Google Maps中也出现了这种漂移。在静止时,地图位置偶尔会显示一个突然弯曲的轨迹,在大约3秒内覆盖大约1/3的直径为50英尺的圆,然后停止。
https://stackoverflow.com/questions/30876433
复制相似问题