我如何检测到本地化已经发生?
How do I detect that localisation has occured?
在使用 Tango 时,我会使用什么,回调或其他方式来检测设备何时本地化到先前加载的 ADF?
这主要用于 UI 结合 Tango UX 的目的,告诉用户在环境中走动。
当您的 ADF TangoPoseData with a 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();
在Unity3D中,您可以在OnTangoPoseAvailable(TangoPoseData)
中使用pose.status_code
来检查位姿w.r.t的状态(VALID/INVALID)。定义的坐标系对。
对于 Device Localization,您需要将 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。
在使用 Tango 时,我会使用什么,回调或其他方式来检测设备何时本地化到先前加载的 ADF?
这主要用于 UI 结合 Tango UX 的目的,告诉用户在环境中走动。
当您的 ADF TangoPoseData with a 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();
在Unity3D中,您可以在OnTangoPoseAvailable(TangoPoseData)
中使用pose.status_code
来检查位姿w.r.t的状态(VALID/INVALID)。定义的坐标系对。
对于 Device Localization,您需要将 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。