Unity3d PoseProvider.GetPoseAtime返回的姿势与OnTangoPoseAvailable中返回的姿势不匹配

Unity3d PoseProvider.GetPoseAtime返回的姿势与OnTangoPoseAvailable中返回的姿势不匹配,unity3d,google-project-tango,Unity3d,Google Project Tango,我正在根据OneExperimentAltangoImageAvailable中返回的时间戳查询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 -

我正在根据OneExperimentAltangoImageAvailable中返回的时间戳查询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
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
我使用传入姿势的相同时间戳调用GetPoseAtime来检查这一点,并得到相同的结果:

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.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
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
在OneExperimentAltangoImageAvailable中,我更新纹理帧,如下所示:

frameTimestamp = VideoOverlayProvider.RenderLatestFrame(TangoEnums.TangoCameraId.TANGO_CAMERA_COLOR);
这给了我一个70595.755121338的时间戳

调用GetPoseAtime for AD2Dev,我希望得到一个可以忽略上述两个姿势的结果姿势。 但是,我得到了以下结果:

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
您可以看到位置不在两个边界姿势之间,并且旋转也非常不同


有谁能解释我做错了什么,或者为什么从GetPoseAtime返回的结果姿势不是先前和后续姿势之间的直接lerp?漂移是否会导致某种形式的反向修正?

我不认为你做错了什么。在默认情况下启用“低延迟模式”时,OnTangoPoseAvailable中的姿势比使用GetPoseAtime获取的姿势更粗糙、更不精确

我的理解是GetPoseAtime基于运行频率为30hz的鱼眼摄像头以及运行频率为100hz的IMU对姿势进行插值


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

谢谢Sam,我会继续挖掘。我在纹理回调中查询AD2Dev姿势时得到的偏移量始终不同(非常极端,有时大约厘米),这就是为什么我惊讶于通过POSEAAvailable回调得到与姿势相同的值(当我使用GetPoseAtime查询时);我希望在这一点上也能进行任何形式的漂移修正。我会收集更多的数据,看看是否能获得更多的洞察力。