динамическое обновление координат в проекте танго

private void setTangoListeners() {
        // Select coordinate frame pairs
        ArrayList<TangoCoordinateFramePair> framePairs = new ArrayList<TangoCoordinateFramePair>();
        framePairs.add(new TangoCoordinateFramePair(
                TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,
                TangoPoseData.COORDINATE_FRAME_DEVICE));

private void setTangoListeners() {
        // Select coordinate frame pairs
        ArrayList<TangoCoordinateFramePair> framePairs = new ArrayList<TangoCoordinateFramePair>();
        framePairs.add(new TangoCoordinateFramePair(
                TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,
                TangoPoseData.COORDINATE_FRAME_DEVICE));

        // Add a listener for Tango pose data
        mTango.connectListener(framePairs, new OnTangoUpdateListener() {

            @Override
            public void onPoseAvailable(TangoPoseData pose) {
                // Format Translation and Rotation data
                final String translationMsg = String.format(sTranslationFormat,
                        pose.translation[0], pose.translation[1],
                        pose.translation[2]);
                final String rotationMsg = String.format(sRotationFormat,
                        pose.rotation[0], pose.rotation[1], pose.rotation[2],
                        pose.rotation[3]);

                // Output to LogCat
                String logMsg = translationMsg + " | " + rotationMsg;
                Log.i(TAG, logMsg);

                final double deltaTime = (pose.timestamp - mPreviousTimeStamp)
                        * SECS_TO_MILLISECS;
                mPreviousTimeStamp = pose.timestamp;
                mTimeToNextUpdate -= deltaTime;

                // Throttle updates to the UI based on UPDATE_INTERVAL_MS.
                if (mTimeToNextUpdate < 0.0) {
                    mTimeToNextUpdate = UPDATE_INTERVAL_MS;

                    // Display data in TextViews. This must be done inside a
                    // runOnUiThread call because
                    // it affects the UI, which will cause an error if performed
                    // from the Tango
                    // service thread
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mRotationTextView.setText(rotationMsg);
                            mTranslationTextView.setText(translationMsg);
                        }
                    });
                }
            }

Приведенный выше код дает нам координаты перемещения и вращения в 3D. Когда мы перемещаем или меняем ориентацию танго, табличка mtango. setclicklistener вызывается, и внутренний код запускается и обновляет координаты.

Чего я не могу понять, так это того, как координата обновляется при вызове setclicklistener? кто-нибудь может объяснить мне работу кода внутри onposeavailable()?


person Avinash Saraf    schedule 14.03.2016    source источник


Ответы (1)


Что ж, setTangoListener() вызывается только один раз, но при этом вы создаете экземпляр прослушивателя, в котором вы переопределяете функцию onPoseAvailable(), которая, в свою очередь, будет вызываться каждый раз, когда слушатель обнаруживает, что Tango обновил свою позу с помощью объекта TangoPoseData (pose) в качестве аргумента, содержащего последние данные позы.

Таким образом, фактическое изменение информации о позе выполняется в ядре танго и доступно для вас через аргумент pose в слушателе. Поэтому при доступе к переводу и повороту он уже будет обновлен.

Так что вы правы в том, что поза никогда не обновляется внутри функции onPoseAvailable(), так как она уже сделана при ее вызове. Единственное, что происходит внутри onPoseAvailable(), это то, что вы читаете значения поворота и перевода и помещаете их в строки, которые можно отобразить с помощью первого LogCat. После этого он проверяет, сколько времени прошло с момента последнего обновления, и пришло ли время для обновления textViews (было бы трудно прочитать, если бы вы обновляли его каждый раз, когда доступна новая поза).

Я надеюсь, что это помогает :)

person rasan076    schedule 16.03.2016
comment
Спасибо @ rasan076 .. это очень помогло. - person Avinash Saraf; 17.03.2016