/// <summary> 
        /// Override of ILocalizer.
        /// </summary>
        public void UpdateLocalizer()
        {
            if (_slamInterop != null)
            {
                _slamInterop.TargetGO = _targetGO;
                _slamInterop.Update(_fromCompositor);

                if (_loadMapAtInitRequested && SensorsReady() )
                {
                    LoadSlamMap(_loadMapName);
                    _loadMapAtInitRequested = false;
                    _waitForSlamLoadingCoroutine = StartCoroutine(WaitForSlamLoading());
                }

                _slamInterop.GetTrackingStatus(out _status);
                ProcessSlamFeedback(_status, _lastStatus);
                _lastStatus = _status;

                if (_rotationOnlyTracking != _rotationOnlyTrackingPrevious)
                {
                    if (_rotationOnlyTracking)
                    {
                        onSlamTrackingLost.Invoke();
                    }
                    else
                    {
                        onSlamTrackingRelocalized.Invoke();
                    }

                    ToggleRotationOnlyTracking();
                    _rotationOnlyTrackingPrevious = _rotationOnlyTracking;
                }
            }
        }
        private void ProcessSlamFeedback(SlamInterop.TrackingStatus thisFrame, SlamInterop.TrackingStatus previousFrame)
        {
            if (thisFrame.state == SlamInterop.TrackingStatus.State.INITIALIZING
                && previousFrame.state == SlamInterop.TrackingStatus.State.NOT_READY)
            {
                onSlamSensorsReady.Invoke();
            }

            if (thisFrame.state == SlamInterop.TrackingStatus.State.INITIALIZING
                && thisFrame.reason == SlamInterop.TrackingStatus.Reason.ESTIMATING_SCALE
                && previousFrame.state == SlamInterop.TrackingStatus.State.INITIALIZING
                && previousFrame.reason == SlamInterop.TrackingStatus.Reason.VISUAL_INIT)
            {
                onSlamMappingInProgress.Invoke(1.0f);
                SetState(SlamInitializationState.Mapping);
            }


            if (thisFrame.state == SlamInterop.TrackingStatus.State.TRACKING
                && previousFrame.state == SlamInterop.TrackingStatus.State.INITIALIZING)
            {
                SetState(SlamInitializationState.Finished);
                onSlamMappingComplete.Invoke();
            }

            if (thisFrame.state == SlamInterop.TrackingStatus.State.LIMITED_TRACKING
                && thisFrame.reason == SlamInterop.TrackingStatus.Reason.LOST
                && previousFrame.state == SlamInterop.TrackingStatus.State.TRACKING)
            {
                onSlamTrackingLost.Invoke();
            }

            if (thisFrame.state == SlamInterop.TrackingStatus.State.TRACKING
                && previousFrame.state == SlamInterop.TrackingStatus.State.LIMITED_TRACKING
                && previousFrame.reason == SlamInterop.TrackingStatus.Reason.LOST)
            {
                onSlamTrackingRelocalized.Invoke();
            }
        }
Пример #3
0
 public void GetTrackingStatus(out SlamInterop.TrackingStatus feedback)
 {
     feedback = SlamInterop.GetTrackingStatus();
 }