1

Unity3D SDK Area Learning Scene で数時間を費やして、OOTB を使用しながら ADF をロードしてローカライズする方法を見つけようとしました。ただし、m_useADF を true に設定し、UUID が有効で、TangoApplication オブジェクトに渡されたことを確認した後、システムはポーズ情報の ADF およびローカライズされた部分の更新を返しません。私の理論では、それらはコールバックへのパイプラインに沿ってどこかで生成されたり失われたりすることはありません。

これは、対応するコードの最初の部分です: public bool m_useADF = true;

        if(m_useADF)
            {
                // Query the full adf list.
                PoseProvider.RefreshADFList();
                // loading last recorded ADF
                string uuid = PoseProvider.GetLatestADFUUID().GetStringDataUUID();
                m_tangoApplication.InitProviders(uuid);
                Debug.Log ("HERE IS THE UUID: " + uuid);
            }

これは、ADF と再ローカリゼーション データが報告される場所ですが、更新されることはありません。コントローラは PoseListener として正しく登録され、ステータス POSE_VALID でデバイスが動き回ると、MotionTracking ポーズ データが正しく更新されます。ADF がロードされていないというエラー メッセージは検出されていませんが、ADF と再ローカリゼーションの両方のデータのステータスが TANGO_POSE_INITIALIZING を過ぎて更新されることはありません。

        // ADF
        GUI.Label( new Rect(Common.UI_LABEL_START_X, 
                            Common.UI_LABEL_START_Y + Common.UI_LABEL_OFFSET * 3, 
                            Common.UI_LABEL_SIZE_X , 
                            Common.UI_LABEL_SIZE_Y), "ADF1: <size=15>" + String.Format(Common.UX_TARGET_TO_BASE_FRAME,
                                                             TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE,
                                                             TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION) + "</size>");

        GUI.Label( new Rect(Common.UI_LABEL_START_X, 
                            Common.UI_LABEL_START_Y + Common.UI_LABEL_OFFSET * 4, 
                            Common.UI_LABEL_SIZE_X , 
                            Common.UI_LABEL_SIZE_Y), "ADF2: <size=15>" + String.Format(Common.UX_STATUS,
                                                             m_status[1],
                                                             m_frameCount[1],
                                                             m_frameDeltaTime[1],
                                                             m_tangoPosition[1],
                                                             m_tangoRotation[1]) + "</size>");
        // RELOCALIZATION
        GUI.Label( new Rect(Common.UI_LABEL_START_X, 
                            Common.UI_LABEL_START_Y + Common.UI_LABEL_OFFSET * 5, 
                            Common.UI_LABEL_SIZE_X , 
                            Common.UI_LABEL_SIZE_Y), "RELOCALIZED1: <size=15>" + String.Format(Common.UX_TARGET_TO_BASE_FRAME,
                                                             TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION,
                                                             TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_START_OF_SERVICE) + "</size>");

        GUI.Label( new Rect(Common.UI_LABEL_START_X, 
                            Common.UI_LABEL_START_Y + Common.UI_LABEL_OFFSET * 6, 
                            Common.UI_LABEL_SIZE_X , 
                            Common.UI_LABEL_SIZE_Y), "RELOCALIZED2: <size=15>" + String.Format(Common.UX_STATUS,
                                                             m_status[2],
                                                             m_frameCount[2],
                                                             m_frameDeltaTime[2],
                                                             m_tangoPosition[2],
                                                             m_tangoRotation[2]) + "</size>");

誰もこれに直面して解決したことがありますか? これが既知の問題かどうかは誰にもわかりませんか?

クリストホッパー

4

1 に答える 1

1

これが役立つかどうかはわかりませんが、サンプルを C# に移植するときに同じことを経験したということだけで、何が起こっているのかを知っているかもしれません。Unity SDK は使用していません。

AD のレンダリングをサポートする同様の TangoUtilities プロジェクトまたは関数があり、それを参照しているか、同様のものを実装している場合、レンダラーの軌跡を参照する OnPoseAvailable 実装内のコードがあります。

例えば

        // Update the trajectory, model matrix, and view matrix, then
        // render the scene again
        if (updateRenderer && (mRenderer.Trajectory != null))

上記の私のバージョンでは、&& (mRendered.Trajectory != null) を追加しました。これは、最初の数回のパスがまだ null であるためです。

私が思い出すと、これはサイレント エラーを引き起こし、そのいずれかのレンダリングを許可しなくなりました。

共有する価値があると思いました。それがあなたの解決策になることを願っています.

于 2014-11-15T19:08:00.063 に答える