如何检测到本地化已发生?

时间:2015-09-04 16:52:28

标签: localization google-project-tango

当使用Tango时我会使用什么,回调或以其他方式检测设备何时已本地化为先前加载的ADF?

这主要是为了与Tango UX结合使用UI,告诉用户在环境中走动。

2 个答案:

答案 0 :(得分:0)

TangoPoseData ADF frame恢复有效时,可能会检测到本地化。

使用这个简化的逻辑来查看AreaLearningActivity的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");
      }
    }
  }

您的配置必须指明感兴趣的ADF:

 config.putString(TangoConfig.KEY_STRING_AREADESCRIPTION,adfId);

从代码中不容易看到这个过程,但我发现它调试了AreaLearningActivity示例。 Java API将受益于更高级别的抽象,使您所请求的常见场景更加明显且易于使用:

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

答案 1 :(得分:0)

在Unity3D中,您可以使用pose.status_code内的OnTangoPoseAvailable(TangoPoseData)来检查姿势w.r.t的状态(VALID / INVALID)。定义的坐标系对。 对于设备本地化,您需要将targetFrame设置为TANGO_COORDINATE_FRAME_DEVICE并将baseFrame设置为TANGO_COORDINATE_FRAME_AREA_DESCRIPTION

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。