/// <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(); } }
public void GetTrackingStatus(out SlamInterop.TrackingStatus feedback) { feedback = SlamInterop.GetTrackingStatus(); }