Hi all, friendly neighborhood navigator here.
I’m super happy this week to announce the release of the
smac_planner package! This has been an on-going R&D project of mine for the majority of 2020 I’ve been working on between leading community development and working on Nav2 architecture. I think it comes as no surprise that I’m terrible at naming things (come’n STVL & SLAM Toolbox, its a low bar) so I took some creative license to mirror the DLux Global Planner’s naming system .
smac_planner package is interesting for a few reasons:
- Contains a highly optimized, templated, A* search algorithm.
- This algorithm is then used with custom node templates to create any A*-driven planning behavior required. We provide implementation nodes for 2D A* search (similar to NavFn but without some of the odd artifacts NavFn’s A* has) and more to the point a hybrid-A* implementation built for Ackermann steering, car-like, car and high speed vehicles. Because it does SE2 collision checking, it is also suitable for differential/omnidirectional robots that are large and non-round that require full pose-base collision checking.
- Includes a Conjugate-Gradient path smoother, costmap downsampler, and a few other bells and whistles.
The original Hybrid-A* paper talks about being able to plan in about 50-300 ms. Our implementation is able to plan in 2-120 ms across maps many multiples larger than those they tested on as part of the DARPA Urban Challenge. If you check out my readme, I also provide some additional analysis, metrics, descriptions, and parameter descriptions. https://github.com/ros-planning/navigation2/tree/main/smac_planner
The full configuration guide is also already available on the Navigation2 documentation and has over 80% unit test coverage (integration tests to follow to push to 90%+): https://navigation.ros.org/configuration/packages/configuring-smac-planner.html.
This marks the first time in ROS Navigation’s history that we have full support for Ackermann steering and cars. Using the Hybrid-A* planner, you will be able to generate 100% kinematically valid paths for ackermann steering vehicles and generate local trajectory plans using the ROS2 TEB local planner. Moreover, additional templated nodes can be added in the future to support new uses like:
- 3D A* planning
- Generic State Lattice primitive planners
- Route planning
Huge thanks to Carlos Luis for helping out with sections of the implementation and @jrw for helping me get this across the finish line and testing on his Ackermann platforms.
As a general announcement, the working group meeting Oct 15 will be cancelled, the next meeting will be Oct 29.
As a general reminder, if you’re interested in mobile robots or navigation, please reach out to us! If you’d like to learn about navigation systems, working on a product, or implementing research, please let us know and we can help you get involved and meet your goals! The navigation working group is a really diverse group of researchers, students, engineers, and executives that are working on our own separate applications but offer community support and working on solutions for everyone in open source. There’s a link to our Slack group in the Navigation2 readme.