【问题标题】:Check if area is localized in loaded ADF检查区域是否在加载的 ADF 中本地化
【发布时间】:2016-05-21 12:55:05
【问题描述】:

更新:

我找到了重新本地化的行,但设备不本地化本身。加载 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);
    }

旧:

在我的应用程序中,用户可以决定是开始新会话还是加载以前记录的 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);

我使用的帧对是:

private static final TangoCoordinateFramePair FRAME_PAIR = new TangoCoordinateFramePair(
        TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION,
        TangoPoseData.COORDINATE_FRAME_DEVICE);

【问题讨论】:

    标签: java android google-project-tango


    【解决方案1】:

    “加载 ADF 开启学习模式”和“加载 ADF 关闭学习模式”都很好。 目前他们正在使用不同的位置管道。 所以第一个本地化的时间比第二个要长得多。 ADF Inspector 用于加载 ADF 并关闭学习” Tango Explorer 应使用“Load ADF on with Learning on”重新本地化

    有关如何检查 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));
    

    【讨论】:

    • 感谢您的回答。但是有没有办法减少“Loaded ADF on with Learning mode on”的时间?因为在这种情况下,如果您必须等待 5 分钟直到设备本地化,这完全没有用。
    • 在重新定位后是否可以在运行时启用学习模式?
    • 对不起,你现在做不到
    • 有没有人能够让这个功能在任何时间都可以工作?我尝试使用具有许多功能的相对较小的空间重新本地化,并尝试了超过 5 分钟,但它从来没有工作(即使使用资源管理器)。就像其他人报告的一样,leanringmode=off 可以正常工作
    【解决方案2】:

    我在这里发现了一些关于同一主题的非常相似的问题:

    1. question

    2. question

    3. question

    4. question

    所以我认为答案如下: 使用已加载的 ADF 和学习模式进行重新定位可以正常工作,但需要相当长的时间(最多 3-5 分钟)。四处走走,不要放弃。

    在已加载的 ADF 和 学习模式关闭的情况下重新定位有效。

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 2017-01-02
      • 1970-01-01
      • 2013-02-05
      • 2017-12-22
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多