运动跟踪丢失后重新定位不良

时间:2015-10-17 16:41:08

标签: google-project-tango

我的团队希望在我们的项目中实现区域学习以实现重定位目的。

我添加了这个功能,似乎运行良好。但是当发生漂移灾难(运动跟踪丢失)并且主摄像机瞬间投射到“宇宙的另一侧”时,该程序无法重新定位它:摄像机位于距离下方2米处或者3米处。它应该在哪里。

是区域描述错误(因为它没有足够的兴趣点)? 或者我还没有理解如何使用区域学习?

非常感谢。

P.S .: 我使用Unity SDK。

public void Update()
{
    TangoPoseData pose = new TangoPoseData ();
    TangoCoordinateFramePair pair;

    if(poseLocalized)
    {
        pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION;
        pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE;
    }
    else
    {
        pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_START_OF_SERVICE;
        pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE;
    }
    double timestamp = VideoOverlayProvider.RenderLatestFrame(TangoEnums.TangoCameraId.TANGO_CAMERA_COLOR);
    PoseProvider.GetPoseAtTime (pose, timestamp, pair);
    m_status = pose.status_code;

    if (pose.status_code == TangoEnums.TangoPoseStatusType.TANGO_POSE_VALID)
    {
        // it does not differ with the pair base frame
        Matrix4x4 ssTd = UpdateTransform(pose); 
        m_uwTuc = m_uwTss * ssTd * m_dTuc;
    }
}

public void OnTangoPoseAvailable(TangoPoseData pose)
{
    if (pose == null)
    {
        return;
    }

    // Relocalization signal
    if (pose.framePair.baseFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION &&
        pose.framePair.targetFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_START_OF_SERVICE)
    {
        poseLocalized = true;
    }

    // If pose status is not valid, nothing is valid 
    if (!(pose.status_code == TangoEnums.TangoPoseStatusType.TANGO_POSE_VALID))
    {
        poseLocalized = false;
        // Do I forget something here ?
    }
}

1 个答案:

答案 0 :(得分:1)

我经常观察到区域学习的定位和重新定位可以产生几米的x,y姿势坐标。

如果在搬到新区域之前我更加小心地记录一个区域,那么坐标可以更准确。

重新定位后,如果平板电脑能够在前往新区域之前使用缓慢,一致的运动观察该区域,则会提高坐标精度。

如果我学习了一个新区域,我总是会回到一个众所周知的区域以获得更高的准确度,如drift correction所述:

enter image description here

我有两个使用Java应用程序的Tango平板电脑,它可以自动导航我家中的iRobot。我使用1米的磁带标记设置了一个网格测试站点来进行观察。