PoseProvider.GetPoseAtTime之间的不匹配返回姿势和OnTangoPoseAvailable中返回的姿势

时间:2016-04-27 10:17:08

标签: unity3d google-project-tango

我根据OnExperimentalTangoImageAvailable中返回的时间戳查询PoseProvider的AD2Dev姿势,并且我看到了一些奇怪的结果。

记录来自OnTangoPoseAvailable的姿势,我看到这样的结果:

pose at time : 70595.754506

From Pose AD2Dev via callback
-0.2031748 -0.3201837 0.925312 -0.4358828
0.9790875 -0.0764451 0.1885304 -2.015653
0.01037121 0.9442661 0.3290197 0.1402309
0 0 0 1

我通过调用GetPoseAtTime与传入姿势的相同时间戳来检查这一点,并获得相同的结果:

from pose AD GetPoseAtTime
-0.2031748 -0.3201837 0.925312 -0.4358828
0.9790875 -0.0764451 0.1885304 -2.015653
0.01037121 0.9442661 0.3290197 0.1402309
0 0 0 1

此后的姿势看起来像这样:

pose at time : 70595.764504
-0.2031739 -0.3201777 0.9253144 -0.4358475
0.9790877 -0.07645106 0.1885275 -2.015655
0.01037896 0.9442677 0.3290148 0.1403415
0 0 0 1

在OnExperimentalTangoImageAvailable中,我像这样更新纹理框架:

frameTimestamp = VideoOverlayProvider.RenderLatestFrame(TangoEnums.TangoCameraId.TANGO_CAMERA_COLOR);

这给了我一个时间戳70595.755121338

为AD2Dev调用GetPoseAtTime,我期望得到一个姿势,它会使上面两个姿势产生影响。 但是,我得到以下结果:

TANGO_POSE_VALID 70595.755121338 TANGO_COORDINATE_FRAME_AREA_DESCRIPTION TANGO_COORDINATE_FRAME_DEVICE

-0.1990919 -0.3197772 0.9263396 -0.437389
0.9799466 -0.07286096 0.1854613 -2.02092
0.008187711 0.9446872 0.3278706 0.1360694
0 0 0 1

你可以看到位置不在两个边界姿势之间,旋转也是完全不同的。

任何人都可以解释我做错了什么,或者为什么从GetPoseAtTime回来的姿势不是先前和后续姿势之间的直接影响?由于漂移会发生某种形式的背部矫正吗?

1 个答案:

答案 0 :(得分:1)

我不相信你做错了什么。使用"低延迟模式"默认情况下启用,OnTangoPoseAvailable的姿势比使用GetPoseAtTime获取的姿势更粗糙,更准确。

我的理解是GetPoseAtTime基于30hz运行的鱼眼摄像机以及100hz运行的IMU来插入姿势。

因为IMU在鱼眼姿势之间收集更多运动数据,所以它永远不会是直线性插值。如果在IMU数据之间没有进行一些球面插值,除了在打开区域学习时自动校正过去的跟踪数据,我也不会感到惊讶。