binary occupancy map flipped after using A* algorithm
조회 수: 3 (최근 30일)
이전 댓글 표시
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
채택된 답변
Cris LaPierre
2025년 3월 13일
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');
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Geographic Coordinate Reference Systems에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

