Hi there - your friendly neighborhood navigator here with exciting news!
In close partnership with Bonsai Robotics, there is a brand new, major feature available to the ROS Community! Complete Coverage Navigator, Server, Behavior Tree, and Demo!
This server it built using the fabulous Fields2Cover library enabling modular coverage algorithms to be composed for a complete application. This server wraps it - with the ability to be extended with new features from F2C or new capabilities within the server itself - as a Nav2 Task Server analogous to the Planner Server used for point-to-point navigation in Nav2.
That means you can visualize the paths, call the action to obtain a result, and so forth as a drop-in replacement for coverage-style tasks easily! How about a demo?
This video shows a full simulation where:
- The navigation system is brought up without a planner server at all, only the coverage server
CoverageNavigatoris invoked using a
nav2_simple_commanderstyle API to perform a navigation task for complete coverage of a given field
- The BT XML is configured to call the coverage server and then naively provide the path to the Controller Server running the RPP controller. This uses new BT nodes for the Coverage Server also included in this work!
- And presto!
The server can provide you with the specific swath-row and turn-path components separated so you can perform operations in the rows separate of those of the turns (e.g. for agricultural tooling, perhaps). It can also provide the full sequence as a
nav_msgs/Path for simple following for cleaning tasks or testing like shown above. The field parameters are fully reconfigurable via the Action goal, default parameters set on bringup, or using dynamic parameters all.
It has 90%+ unit test coverage and great documentation you can see in the repo below! Documentation on Coverage Server — Nav2 1.0.0 documentation available now!
Great question, my curious inquirer. There are three major reasons:
The Fields2Cover library is very powerful, but missing some important advanced features that I feel are necessary to consider this a “complete” solution to the problem sufficiently to be used for all ‘normal’ coverage applications. You can read more about what’s missing in the README, but the highlights are around the final-touches. I would love your help from the community to tackle some of these so that we can!
Fields2Cover is currently not available in binary formats and must be built from source. That may change shortly, but for the moment, that means it would block
Nav2otherwise from binary release jobs passing successfully, so a temporary separation is required.
As part of the launch of Open Navigation LLC, the rootin-tootin best place for all your navigation and navigation accessories, we want to start supplying additional advanced features from partnerships with companies, organizations, and researchers worldwide. Some of these features may be WIP for long stretches, licensed restrictively, or sufficiently complex and specialized that merging them into Nav2 itself would cause some headaches or misunderstandings with the community.
As such, it makes sense for us to start a trend of having users check out our GitHub Organization for these things that may be more appropriate to live in Open Navigation’s domain than Nav2/
ros-planning. I hope that makes sense, but if anyone has concerns about this, I’m happy to chat about it.
PS Please thank Bonsai Robotics for their commendable donation to the ROS community! Bonsai is hiring here.
Special thanks to @emersonknapp for his awesome
ros-tooling work which made setting up CI a breeze using Github Actions!