binary occupancy map flipped after using A* algorithm
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
YAAQOB AL-JAMALI
il 11 Mar 2025
Commentato: YAAQOB AL-JAMALI
il 14 Mar 2025
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 Commenti
Risposta accettata
Cris LaPierre
il 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');
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Geographic Coordinate Reference Systems in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

