I'm working on a differential drive mobile base and have navigated successfully with `move_base` and `teb_local_planner` and the `global_planner`.
The next navigation behaviour I would like to achieve is using **tracks** for navigation. I would like to define different waypoints and have pre-defined relationships between the edges (e.g. unidirectional or bidirectional), something like this image below:

The mobile base should navigate to the point closest to it on the track and plan a path to the goal using as much of these "preferred" tracks as possible, while being able to avoid obstacles in the path.
**Q1.** Are there any packages that are already doing this?
I tried out [waypoint_global_planner](https://github.com/gkouros/waypoint-global-planner) and it works great. You can manually define waypoints and have it linearly interpolate a path for you, albeit without collision avoidance.
But what I'm looking for is something that can be set-up and then used by just defining the tracks and giving the goal point, instead of defining waypoints for every run.
An option is to use custom costmap layers to "prefer" a certain track but i don't know if there exists a mechanism which forces the global planner to stick to the preferred path and only use the "non-preferred " path for obstacle avoidance.When an obstacle occurs in the "preferred" path i want the mobile base to navigate for a short period through the "non-preferred" path in order to avoid it, following which it should return to its original path. How do I go about achieving this?
Any help will be appreciated! Please let me know if anymore details are required.
↧