-
Notifications
You must be signed in to change notification settings - Fork 173
Modernize README #356
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Modernize README #356
Changes from all commits
4a2afe1
19bef5a
9c9995e
fae1ff4
88b285d
acde337
fda124c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,45 +1,51 @@ | ||
| This is the active ROS2 branch of this repository. If your are looking for the ROS1 version, checkout the [noetic](https://github.com/naturerobots/move_base_flex/tree/noetic) or [master](https://github.com/naturerobots/move_base_flex/tree/master) branches. | ||
|
|
||
| [](https://github.com/naturerobots/move_base_flex/actions/workflows/jazzy.yaml) | ||
| [](https://github.com/naturerobots/move_base_flex/actions/workflows/humble.yaml) | ||
|
|
||
| # Move Base Flex: A Highly Flexible Navigation Framework: | ||
| # Move Base Flex: A Highly Flexible Navigation Framework | ||
|
|
||
| This repository contains Move Base Flex (MBF), a backwards-compatible replacement for move_base. MBF can use existing plugins for move_base, and provides an enhanced version of the same ROS interface. It exposes action servers for planning, controlling and recovering, providing detailed information of the current state and the plugin's feedback. An external executive logic can use MBF and its actions to perform smart and flexible navigation strategies. For example, at [Magazino](https://www.magazino.eu/?lang=en) we have successfully deployed MBF at customer facilities to control TORU robots in highly dynamical environments. Furthermore, MBF enables the use of other map representations, e.g. meshes. The core features are: | ||
|
|
||
| * Fully backwards-compatible with current ROS navigation. | ||
| * Actions for the submodules planning, controlling and recovering, and services to query the costmaps are provided. This interface allows external executives, e.g. SMACH, or Behavior Trees, to run highly flexible and complex navigation strategies. | ||
| * Comprehensive result and feedback information on all actions, including error codes and messages from the loaded plugins. For users still relying on a unique navigation interface, we have extended move_base action with detailed result and feedback information (though we still provide the current one). | ||
| * Separation between an abstract navigation framework and concrete implementations, allowing faster development of new applications, e.g. 3D navigation. | ||
| * Load multiple planners and controllers, selectable at runtime by setting one of the loaded plugin names in the action goal. | ||
| * Concurrency: Parallel planning, recovering, controlling by selecting different concurrency slots when defining the action goal. Only different plugins instances can run in parallel. | ||
| Move Base Flex (MBF) is a modular and map-agnostic navigation framework for ROS that provides well-defined interfaces and action servers for path planning, control, and recovery behaviors. Rather than being a complete navigation stack, MBF serves as an adaptable interface layer that enables developers to design and integrate their own navigation systems using arbitrary map representations and custom plugin implementations. Key features are: | ||
|
|
||
| Please see also the [Move Base Flex Documentation and Tutorials](https://wiki.ros.org/move_base_flex) in the ROS wiki. And [this repository](https://github.com/Rayman/turtlebot3_mbf) contains a working minimal configuration for a turtlebot 3. | ||
| * **Map-Agnostic Interface Design** | ||
|
|
||
| MBF's interfaces are independent of any particular map representation (e.g., 2D costmaps, [meshes](https://github.com/naturerobots/mesh_navigation), or voxel grids), enabling seamless integration, scientific comparison, and context-aware selection of both navigation implementations and map types. | ||
|
|
||
| ## Announcements & News | ||
| ### 16.10.2024 First ROS2 Version of Move Base Flex | ||
| The first working ROS2 version of Move Base Flex has been published. | ||
| It targets the ROS2 distro `humble` and includes most components you know from ROS1: | ||
| - mbf_abstract_core & mbf_abstract_nav | ||
| - mbf_simple_core & mbf_simple_nav (for navigation components that need no map representation) | ||
| - mbf_utility | ||
| - mbf_msgs | ||
| * **Modular Action-Based Architecture** | ||
|
|
||
| Separate action servers for *path planning*, *control*, and *recovery* enable external [deliberation software](https://github.com/ros-wg-delib/awesome-ros-deliberation) (e.g., Behavior Trees, SMACH, or custom logic) to coordinate complex navigation strategies. | ||
|
|
||
| The ROS2 version comes with an additional package that helps with integration tests: | ||
| - mbf_test_utility (only a test dependency) | ||
| * **Extensible Plugin Framework** | ||
|
|
||
| Multiple planners, controllers, and recovery behaviors can be loaded simultaneously, selected at runtime, or executed in parallel using different concurrency slots. | ||
|
|
||
| These two packages not migrated: | ||
| - mbf_costmap_core & mbf_costmap_nav (for navigation components that utilize a 2D costmap). Nav2, which hosts the 2D costmap equivalent to the one from ROS1, and ROS1's move_base are quite different, so interfaces do not easily fit anymore. This makes migration hard. PRs are welcome for this. However, we might integrate another 2D grid map planning module soon. | ||
| * **Rich Feedback and Diagnostics** | ||
|
|
||
| All actions expose detailed feedback, results, and error codes, providing transparent runtime information for better debugging and system supervision. | ||
|
|
||
| Note that [mesh_navigation](https://github.com/naturerobots/mesh_navigation) is also available for ROS2, now. It provides navigation components that utilize 3D mesh maps. | ||
| * **Clear Separation of Interfaces and Implementations** | ||
|
|
||
| MBF's design facilitates reuse, experimentation, and the rapid development of new navigation approaches independent of any particular mapping or planning framework. | ||
|
|
||
| ## Concepts & Architecture | ||
|
|
||
| We have created Move Base Flex for a larger target group besides the standard developers and users of move_base and 2D navigation based on costmaps, as well as addressed move_base's limitations. Since robot navigation can be separated into planning and controlling in many cases, even for outdoor scenarios without the benefits of flat terrain, we designed MBF based on abstract planner-, controller- and recovery behavior-execution classes. To accomplish this goal, we created abstract base classes for the nav core BaseLocalPlanner, BaseGlobalPlanner and RecoveryBehavior plugin interfaces, extending the API to provide a richer and more expressive interface without breaking the current move_base plugin API. The new abstract interfaces allow plugins to return valuable information in each execution cycle, e.g. why a valid plan or a velocity command could not be computed. This information is then passed to the external executive logic through MBF planning, navigation or recovering actions’ feedback and result. The planner, controller and recovery behavior execution is implemented in the abstract execution classes without binding the software implementation to 2D costmaps. In our framework, MoveBase is just a particular implementation of a navigation system: its execution classes implement the abstract ones, bind the system to the costmaps. Thereby, the system can easily be used for other approaches, e.g. navigation on meshes or 3D occupancy grid maps. However, we provide a SimpleNavigationServer class without a binding to costmaps. | ||
| Since robot navigation can be separated into planning and controlling in many cases, even for outdoor scenarios without the benefits of flat terrain, we designed MBF based on abstract planner-, controller- and recovery behavior-execution classes. To accomplish this goal, we created abstract base classes for the nav core BaseLocalPlanner, BaseGlobalPlanner and RecoveryBehavior plugin interfaces, extending the API to provide a rich and expressive interface. The abstract interfaces allow plugins to return valuable information in each execution cycle, e.g. why a valid plan or a velocity command could not be computed. This information is then passed to the external executive logic through MBF planning, navigation or recovering actions’ feedback and result. The planner, controller and recovery behavior execution is implemented in the abstract execution classes without binding the software implementation to 2D costmaps. In our framework, SimpleNav (or MeshNav) is just a particular implementation of a navigation system: its execution classes implement the abstract ones, bind the system to the costmaps. Thereby, the system can easily be used for other approaches, e.g. navigation on meshes or 3D occupancy grid maps. However, we provide a SimpleNavigationServer class without a binding to costmaps. | ||
|
|
||
| MBF architecture: | ||
| **MBF architecture:** | ||
|  | ||
|
|
||
| ## History | ||
|
|
||
| MBF was originally developed for ROS 1 by [Magazino](https://www.magazino.eu/en/) (see [noetic](https://github.com/naturerobots/move_base_flex/tree/noetic) or [master](https://github.com/naturerobots/move_base_flex/tree/master) branch) as a backwards-compatible replacement for `move_base`, providing a more flexible and transparent architecture when no modular alternative was available. | ||
| It has been successfully deployed in production environments, for example at [Magazino](https://www.magazino.eu/?lang=en), to control TORU robots operating in dynamic warehouse scenarios. | ||
|
|
||
| Compared to `move_base`, MBF introduced: | ||
|
|
||
| * Separate action servers for path planning, control, and recovery | ||
| * Detailed feedback and error reporting | ||
| * Runtime selection of multiple plugin implementations | ||
| * Map-agnostic interface definitions | ||
|
|
||
| With the advent of ROS 2 and newer navigation frameworks such as Nav2, MBF continues to serve as a lightweight, interface-oriented foundation for research, prototyping, and customized navigation systems. | ||
|
|
||
| ## Future Work | ||
| MBF is an ongoing project. Some of the improvements that we have planned for the near future are: | ||
|
|
||
|
|
@@ -59,3 +65,32 @@ Move Base Flex was initially developed at Magazino. | |
|
|
||
| ### [<img width="25" height="25" src="doc/images/logos/nature_robots_icon.jpg"> Nature Robots](https://naturerobots.com/) | ||
| The latest version (ROS2) is developed and maintained by Nature Robots. | ||
|
|
||
| ## Further Resources | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. most of the resources are ROS1 only. Except: I think the resources that only work with ROS1 could be dropped from this list.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah yes, I will remove them with the next commit 👍 |
||
|
|
||
| * [**Mesh Navigation**](https://github.com/naturerobots/mesh_navigation) | ||
|
|
||
| Provides 3D navigation on mesh surfaces, implementing the MBF interfaces provided by this repository. | ||
|
|
||
| * [**MBF Deliberation Examples**](https://github.com/amock/mbf_deliberation) | ||
|
|
||
| Demonstrates how to invoke MBF actions using popular deliberation frameworks such as BehaviorTree.CPP and SMACH. These examples work independently of the chosen map representation. | ||
|
|
||
|
|
||
| ## Announcements & News | ||
|
|
||
| ### 16.10.2024 First ROS2 Version of Move Base Flex | ||
| The first working ROS2 version of Move Base Flex has been published. | ||
| It targets the ROS2 distro `humble` and includes most components you know from ROS1: | ||
| - mbf_abstract_core & mbf_abstract_nav | ||
| - mbf_simple_core & mbf_simple_nav (for navigation components that need no map representation) | ||
| - mbf_utility | ||
| - mbf_msgs | ||
|
|
||
| The ROS2 version comes with an additional package that helps with integration tests: | ||
| - mbf_test_utility (only a test dependency) | ||
|
|
||
| These two packages not migrated: | ||
| - mbf_costmap_core & mbf_costmap_nav (for navigation components that utilize a 2D costmap). Nav2, which hosts the 2D costmap equivalent to the one from ROS1, and ROS1's move_base are quite different, so interfaces do not easily fit anymore. This makes migration hard. PRs are welcome for this. However, we might integrate another 2D grid map planning module soon. | ||
|
|
||
| Note that [mesh_navigation](https://github.com/naturerobots/mesh_navigation) is also available for ROS2, now. It provides navigation components that utilize 3D mesh maps. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think keeping a high level overview over what has changed is useful.
I agree that this does not need to part of the readme, where the focus should be the current state, not the history.
I also we could lose some of the text I wrote regarding "16.10.2024 First ROS2 Version of Move Base Flex" :)
Can we move the info to another file or at the end of the readme?
Or do you think that this kind of info should not be present at all here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I also thought about keeping the news somewhere. It would be fine to move it to the end of the file. Or maybe put it to the docs? https://naturerobots.github.io/mbf_docs/ . But those are still ROS 1, I think (?).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
with the latest commit I readded the news to the end of the readme