Filter löschen
Filter löschen

BinaryOccupancyGrid map created with Image Labeler

1 Ansicht (letzte 30 Tage)
Ivan Enzo
Ivan Enzo am 4 Feb. 2024
Kommentiert: Ivan Enzo am 17 Feb. 2024
Dear MATLAB Community,
CONTEXT: I am working on a global planner based on a multilayermap where there is a layer coming from a DEM file and a layer where obstacles are specified (very similar to this example, just for reference -> https://it.mathworks.com/help/nav/ug/offorad-planning-on-digital-elevation-models.html). In a similar way to what has been performed in the use case shown here (webinar: https://it.mathworks.com/videos/design-and-simulating-autonomy-for-construction-vehicles-1679066541903.html) i used the Image Labeler to have a labeled image with obstacles, which then i successfully converted in a binaryOccupancyGrid object.
PROBLEM: after the previous passages, my map is ready to be used for planning. I tried to use PlannerAstrGrid as in the first example. When i specify the start and goal positions (in grid coords because i manually choose them from the displayed map), i check their validity on the map using checkOccupancy(map, start) and for both start and goal i get "0". However, when i call the plan function, i get an error from the plannerAStarGrid/validateStartGoal telling me that the start position is not valid because its occupied (despite the checkOccupancy result).
MY GUESS: to me i seems like the map is good but actually not, like there is some sort of mismatch i cannot directly see (maybe coming from the Labeler itself?) because when i create the multilayermap project eerything works fine, i can even see the occupancygrid map itself and both the start/goal poses to be in free space indeed. It might be me being wrong in defining the coordinates (like messing with word/grid/local reference frames).
Anyway ,here is my code (unfortunatley I am not able to share the map file due to permissions issues)
Thank you in advance for any answer/support!
start = [838 207]; % [x, y] , GRID COORDS
goal = [510 1116];
map = multimap.getLayer('envObstaclesFilt');
dummyplanner = plannerAStarGrid(map);
show(dummyplanner.Map)
path = plan(dummyplanner, start, goal, "grid");

Akzeptierte Antwort

Cameron Stabile
Cameron Stabile am 5 Feb. 2024
Bearbeitet: Cameron Stabile am 5 Feb. 2024
Hi Ivan,
Based on your problem description, it appears that start/goal are defined with respect to the world frame (i.e. xy cartesian) since that is the default frame when calling checkOccupancy(map,xy), whereas your planner is accepting those same values as though they were "grid" (IJ with respect to top-left corner of the matrix inside the map) coordinates (which is the default for plannerAStarGrid.plan).
Can you verify whether the issue resolves itself by either removing "grid" from your call to plan, or by converting your xy start/goal to grid using world2grid.
You can also use the Occupancy Grids documentation page if you need to double check the different coordinate systems and the location of their origins with respect to each other.
Best,
Cameron
  1 Kommentar
Ivan Enzo
Ivan Enzo am 17 Feb. 2024
Dear Cameron, sorry for the delayed responde
The day after I posted this question, I made your suggested changes and it worked well so, yes indeed that was the problem.
Thank you for the help.
Best,
IE

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by