Skip to content

Add easynav_bigmap_maps_manager; navmap_planner: weighted A*, replan hysteresis, cheaper plans, multi-floor fixes; regulated_pp: height-aware goal - #177

Open
jmguerreroh wants to merge 3 commits into
EasyNavigation:rollingfrom
jmguerreroh:rolling
Open

jmguerreroh wants to merge 3 commits into
EasyNavigation:rollingfrom
jmguerreroh:rolling

Conversation

@jmguerreroh

Copy link
Copy Markdown
Contributor

Summary

  • New plugin easynav_bigmap_maps_manager: a maps manager for maps too big to plan on at full resolution. It holds one NavMap that is fine around the robot and coarse far away, re-meshes it as the robot moves and puts the sensor obstacles on it. Planners and controllers read it through the NavState (map.navmap) like any other NavMap.
  • easynav_navmap_planner: weighted A*, a replanning hysteresis, plans that cost what they explore and not the size of the map, and fixes for floors over each other. Everything new is off by default except the floor fixes.
  • easynav_regulated_pp_controller: a goal on another floor no longer counts as reached when the robot passes above or below it.

easynav_bigmap_maps_manager

Two engines, chosen by multilevel.enabled: the grid engine (outdoor terrain: a height grid meshed with RTIN) and the hierarchy engine (buildings with floors over each other: the NavMap's own triangles merged by clustering).

  • NavMap layers occupancy, obstacles, inflated_obstacles, obstacle_hits, elevation, lod_size, traversed, published on <node>/bigmap/map.
  • NavCels no bigger than needed: lengths.cell_size.min near the robot up to cell_size.max far away, and always fine over ramps, narrow passages and the ground the robot has driven over.
  • Holes are obstacles, exactly; obstacles seen from near stay seen (lod.observed); a finer map when there is no path (recovery.*); optional re-mesh in a worker (lod.async_remesh).
  • Obstacles from the sensors with a memory, and the NavMap filters of easynav_navmap_maps_manager applied on top.
  • Services to save the map and to forget the obstacles.
  • Two documented example configurations (config/example_indoor.yaml, config/example_outdoor.yaml) and a README.

easynav_navmap_planner

  • heuristic_weight (default 1, the admissible A* as before): weighted A* without re-opening; each NavCel is expanded once and paths are at most that factor longer.
  • A plan costs what it explores: the cost layer is read directly when it is uint8 of the map's size (no copy per plan), and the search buffers are validated by an epoch stamp instead of being reset.
  • replan_hysteresis, replan_hysteresis_horizon (default 0, off): the path being followed is kept while it stays traversable unless a new one is shorter by that fraction, against the oscillation of replanning on a level-of-detail map. What is left of the path is measured in 3D and never starts behind the robot. Documented in the README of the package.
  • Floors over each other: shortcuts no longer cross a gap over another floor or end under a goal on another floor (NavMap's search returns the surface nearest in height, however far).
  • last_search_stats_ (NavCels expanded and pushed), for measurements.

easynav_regulated_pp_controller

The robot passing right above or below the goal in the plane was taken as at the goal. It now uses the system's goal_tolerance.height. The default (10000 m) and a NavState without it ignore the height, as before.

CI and README

easynav_bigmap_maps_manager is added to the packages that rolling.yaml builds and to the table of the README.

Testing

colcon test in a clean build from source (18 packages up to these three):

Package Tests Failures Skipped
easynav_navmap_planner 78 0 5
easynav_regulated_pp_controller 106 0 11
easynav_bigmap_maps_manager 315 0 44

The counts include the lint tests (cpplint, uncrustify...). Same result with NavMap at rolling and with the NavMap branches navmap-core-fixes and navmap-tools-dem. 17 new tests: weighted A*, hysteresis, floors, search statistics, a non-uint8 cost layer, 10 plans in a row equal to the first of a new planner, and the goal on another floor. Skipped: tests that need data of your own (see the README of the plugin).

Notes

  • The planner test with a non-uint8 cost layer originally re-created obstacles with another type, which crashed NavMap::operator= (fixed in NavMap's navmap-core-fixes). The test now uses a layer of its own (inflated_obstacles), so it passes with or without that fix.
  • The README of the plugin points to bigmap_bringup (the application and its parameter files) and easynav_playground_bigmap (the simulations), which live in other repositories. Neither is needed to build or use the plugin.
  • easynav_bigmap_maps_manager needs navmap_core, navmap_ros and easynav_navmap_maps_manager.

…floor fixes; regulated_pp: height-aware goal

Signed-off-by: Jose Miguel <josemiguel.guerrero@urjc.es>
…oarse far away

Signed-off-by: Jose Miguel <josemiguel.guerrero@urjc.es>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant