当使用Tango时我会使用什么,回调或以其他方式检测设备何时已本地化为先前加载的ADF?
这主要是为了与Tango UX结合使用UI,告诉用户在环境中走动。
答案 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。