更新
我找到了重新定位的行,但设备本身没有本地化。加载ADF后,我总是得到状态码 POSE_INITIALIZING 。此外,Java Area_Description_Example中的重新本地化也不起作用。谁有同样的问题? 唯一有重新本地化工作的应用程序是“Explorer”和“ADF Inspector”,但我没有它的源代码。
以下是我的第一个问题的解决方案,即加载ADF后检查重新定位的代码:
TangoPoseData lastFramePose = mTango.getPoseAtTime(mRgbTimestampGlThread,
FRAME_PAIR);
if (lastFramePose.statusCode == TangoPoseData.POSE_VALID) {
// Device is re-located!
// Update the camera pose from the renderer
mRenderer.updateRenderCameraPose(lastFramePose);
mCameraPoseTimestamp = lastFramePose.timestamp;
} else {
Log.w(TAG, "Can't get device pose at time: " + mRgbTimestampGlThread);
}
OLD:
在我的应用程序中,用户可以决定是启动新会话还是加载以前记录的ADF(区域描述文件)。我加载了ADF(adfUUID)并将它添加到Tango类对象(mTango)中,如下所示:
TangoConfig config = mTango.getConfig(TangoConfig.CONFIG_TYPE_CURRENT);
config.putString(TangoConfig.KEY_STRING_AREADESCRIPTION, adfUUID);
mTango.setRuntimeConfig(config);
所以现在我的问题是,我如何检查该区域是否已加载ADF本地化?我希望有一个坐标参考框架到加载的ADF的服务开始,而不是我的新会话。 这是我在connectTango()函数中的设置:
TangoConfig config = mTango.getConfig(TangoConfig.CONFIG_TYPE_DEFAULT);
config.putBoolean(TangoConfig.KEY_BOOLEAN_LOWLATENCYIMUINTEGRATION, true);
config.putBoolean(TangoConfig.KEY_BOOLEAN_DEPTH, true);
config.putBoolean(TangoConfig.KEY_BOOLEAN_LEARNINGMODE, true);
config.putBoolean(TangoConfig.KEY_BOOLEAN_COLORCAMERA, true);
mTango.connect(config);
我使用的fram对是:
private static final TangoCoordinateFramePair FRAME_PAIR = new TangoCoordinateFramePair(
TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION,
TangoPoseData.COORDINATE_FRAME_DEVICE);
答案 0 :(得分:1)
两者"在学习模式下加载ADF"和"在关闭学习模式的情况下加载ADF"很好。 目前他们正在使用不同的位置管道。 因此,第一个将比第二个更长时间本地化。 ADF Inspector用于加载ADF on with Learning off" Tango Explorer应该使用"使用学习加载ADF"
重新本地化有关如何检查ADF本地化的问题,请参阅示例java代码:
// Check for Device wrt ADF pose, Device wrt Start of Service pose,
// Start of Service wrt ADF pose (This pose determines if the device
// is relocalized or not).
if (pose.baseFrame == TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION
&& pose.targetFrame == TangoPoseData
.COORDINATE_FRAME_START_OF_SERVICE) {
if (pose.statusCode == TangoPoseData.POSE_VALID) {
mIsRelocalized = true;
} else {
mIsRelocalized = false;
}
在第三个上提供数据:
ArrayList<TangoCoordinateFramePair> framePairs = new ArrayList<TangoCoordinateFramePair>();
framePairs.add(new TangoCoordinateFramePair(
TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,
TangoPoseData.COORDINATE_FRAME_DEVICE));
framePairs.add(new TangoCoordinateFramePair(
TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION,
TangoPoseData.COORDINATE_FRAME_DEVICE));
framePairs.add(new TangoCoordinateFramePair(
TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION,
TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE));
答案 1 :(得分:0)
我在这里找到了关于同一主题的一些非常类似的问题:
所以我认为答案如下: 使用加载的ADF和学习模式重新定位可以正常工作,但需要很长时间(最长3-5分钟)。四处走走,不要放弃。
使用加载的ADF重新定位并关闭学习模式。