Hi there - your friendly neighborhood navigator here with exciting news!
Complete Coverage Navigator, Server, Behavior Tree, and Demo!
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
- The
CoverageNavigator
is invoked using anav2_simple_commander
style 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!
Hey Friendly Neighborhood Navigator man, why is this not in Nav2 itself?
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
Nav2
otherwise 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!