binary occupancy map flipped after using A* algorithm

2 views (last 30 days)
I am trying to explore A* algorithm which is built-in MATLAB algorithm, but when creating enviornment for simulation and then show the outcome of the planner the result is flipped compared to original map.
the code used as follow:
clearvars;
close all;
% Parameters
x_max = 500;
y_max = 500;
mapRes = 1; % 1 cell per meter (or per unit)
% number of obstacles
numObstacles = input('Enter the number of rectangular obstacles: ');
% Obstacle size
obsWidth = 40;
obsHeight = 40;
% Create empty map
mapMatrix = zeros(y_max, x_max); % Rows = Y, Columns = X
% Add rectangular obstacles
for i = 1:numObstacles
x = randi([1, x_max - obsWidth]);
y = randi([1, y_max - obsHeight]);
mapMatrix(y:(y+obsHeight), x:(x+obsWidth)) = 1; % Occupied = 1
end
% Flip the map vertically so that origin is at bottom-left (for A*)
mapMatrix = flipud(mapMatrix);
% Create binary occupancy map
map = binaryOccupancyMap(mapMatrix, mapRes);
% Flip axis for plotting purposes
figure;
show(map);
set(gca, 'YDir', 'normal'); % Flip Y axis so origin is bottom-left
title('Click to select START (green) and GOAL (red)');
hold on;
% Select start point
disp('Click on the map to select the START point');
[startX, startY] = ginput(1);
start = round([startY, startX]);
plot(start(2), start(1), 'go', 'MarkerSize', 10, 'LineWidth', 2);
% Select goal point
disp('Click on the map to select the GOAL point');
[goalX, goalY] = ginput(1);
goal = round([goalY, goalX]);
plot(goal(2), goal(1), 'ro', 'MarkerSize', 10, 'LineWidth', 2);
% % Flip the map
% mapFliped = flipud(map);
% figure;
% show(mapFliped)
% Plan using A* algorithm
planner = plannerAStarGrid(map);
[path, debugInfo] = plan(planner, start, goal);
% Display results
figure;
show(planner);
% plot(path(:,2), path(:,1))
set(gca, 'YDir', 'normal'); % Flip Y axis again
axis xy;
title('A* Path Planning Result');
% legend('Path','Start','Goal','Explored');
  4 Comments
YAAQOB AL-JAMALI
YAAQOB AL-JAMALI on 12 Mar 2025
i have commented it out, yet the content of the map still flipped. I do think there is some feature in A* algorithm which cause this but not really sure. If you know a step to overcome such nature, I would appreciate it.

Sign in to comment.

Accepted Answer

Cris LaPierre
Cris LaPierre on 13 Mar 2025
You need to specify 'world' as an additional input to plan when start and goal are specified as [x y] in world coordinate frame with origin at bottom-left corner.
With this setting, you do not need to worry about flipping or setting axis Y direction.
% Parameters
x_max = 500;
y_max = 500;
mapRes = 1; % 1 cell per meter (or per unit)
% number of obstacles
numObstacles = 8;%input('Enter the number of rectangular obstacles: ');
% Obstacle size
obsWidth = 40;
obsHeight = 40;
% Create empty map
mapMatrix = zeros(y_max, x_max); % Rows = Y, Columns = X
% Add rectangular obstacles
for i = 1:numObstacles
x = randi([1, x_max - obsWidth]);
y = randi([1, y_max - obsHeight]);
mapMatrix(y:(y+obsHeight), x:(x+obsWidth)) = 1; % Occupied = 1
end
% Create binary occupancy map
map = binaryOccupancyMap(mapMatrix, mapRes);
figure;
show(map);
hold on;
start = [28 48];
plot(start(2), start(1), 'go', 'MarkerSize', 10, 'LineWidth', 2);
goal = [481, 418];
plot(goal(2), goal(1), 'ro', 'MarkerSize', 10, 'LineWidth', 2);
hold off
planner = plannerAStarGrid(map);
[path, debugInfo] = plan(planner, start, goal,'world');
% Display results
figure;
show(planner);
title('A* Path Planning Result');
  1 Comment
YAAQOB AL-JAMALI
YAAQOB AL-JAMALI on 14 Mar 2025
thank you so much, that is really work more better than the way i figure it out.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!