Localization 如何检测已发生的本地化?

Localization 如何检测已发生的本地化?,localization,google-project-tango,Localization,Google Project Tango,当使用Tango时,我将使用什么、回调或其他方式来检测设备何时已定位到先前加载的ADF 这主要用于与Tango UX结合使用的UI目的,告诉用户在环境中漫游。当您的ADF恢复有效时,可能会检测到本地化 请看使用此简化逻辑的Tango Java示例: //tell tango to provide pose for ADF ArrayList<TangoCoordinateFramePair> framePairs = new ArrayList<TangoCoordinateF

当使用Tango时,我将使用什么、回调或其他方式来检测设备何时已定位到先前加载的ADF


这主要用于与Tango UX结合使用的UI目的,告诉用户在环境中漫游。

当您的ADF恢复有效时,可能会检测到本地化

请看使用此简化逻辑的Tango Java示例:

//tell tango to provide pose for ADF
ArrayList<TangoCoordinateFramePair> framePairs = new ArrayList<TangoCoordinateFramePair>();
framePairs.add(new TangoCoordinateFramePair(
        TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION,
        TangoPoseData.COORDINATE_FRAME_DEVICE));

//register a listener for the frames chosen
mTango.connectListener(framePairs, new OnTangoUpdateListener() {

  //listens for updates from tango pose
  public void onPoseAvailable(TangoPoseData pose) {

    //base frame of ADF provides coordinates relative to the origin of the ADF
    if (pose.baseFrame == TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION
        && pose.targetFrame == TangoPoseData.COORDINATE_FRAME_DEVICE)

      //if the status is valid then localization has succeeded
      if(pose.statusCode == TangoPoseData.POSE_VALID){
        Log.i(TAG,"Successfully localized with ADF");
      }
    }
  }
这个过程不容易从代码中观察到,但我在调试AreaLearningActivity示例时发现了它。Java API将受益于更高级别的抽象,使您请求的公共场景更明显,更易于使用:

TangoLocalizer.builder().register(myListener).adfId(myAdfId).build();

在Unity3D中,您可以使用
pose.status\u code
inside
OnTangoPoseAvailable(tangoposa)
检查已定义坐标帧对的姿势的状态(有效/无效)。 对于设备定位您需要将
targetFrame
设置为
TANGO\u坐标框架\u设备
baseFrame
设置为
TANGO\u坐标框架\u区域描述

public void OnTangoPoseAvailable(TangoPoseData pose)
{
    // Define the frame-pair 
    if (pose.framePair.baseFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION
        && pose.framePair.targetFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE)
    {

    // Check if the pose is VALID or INVALID
        if (pose.status_code == TangoEnums.TangoPoseStatusType.TANGO_POSE_VALID)
        {
            ////......if pose is VALID
        }
        else 
        {
            ////......if pose is INVALID
        }
    }
}
您还需要使用
m_tangoApplication.Startup(m_selectedADF)加载ADF也是

public void OnTangoPoseAvailable(TangoPoseData pose)
{
    // Define the frame-pair 
    if (pose.framePair.baseFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION
        && pose.framePair.targetFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE)
    {

    // Check if the pose is VALID or INVALID
        if (pose.status_code == TangoEnums.TangoPoseStatusType.TANGO_POSE_VALID)
        {
            ////......if pose is VALID
        }
        else 
        {
            ////......if pose is INVALID
        }
    }
}