%% Move Local Map and Sync with World Map
% This example shows how to move a local egocentric map and sync it with a larger world map. This process emulates a vehicle driving in an environment and getting updates on obstacles in the new areas.
% Load example maps. Create a binary occupancy map from the complexMap.

load exampleMaps.mat
map = binaryOccupancyMap(complexMap);
show(map)

%
% Create a smaller local map.

mapLocal = binaryOccupancyMap(complexMap(end-20:end,1:20));
show(mapLocal)

%
% Follow a path planned in the world map and update the local map as you move your local frame.
% Specify path locations and plot on the map.

path = [5 2
        8 2
        8 8
        30 8];
show(map)
hold on
plot(path(:,1),path(:,2))
hold off

% Create a loop for moving between points by the map resolution. Divide the difference between points by the map resolution to see how many incremental moves you can make.

for i = 1:length(path)-1
    moveAmount = (path(i+1,:)-path(i,:))/map.Resolution;
    for j = 1:abs(moveAmount(1)+moveAmount(2))
        moveValue = sign(moveAmount).*map.Resolution;
        move(mapLocal,moveValue, ...
            "MoveType","relative","SyncWith",map)
 
        show(mapLocal)
        drawnow limitrate
        pause(0.2)
    end
end

% Copyright 2019 The MathWorks, Inc.