Your Friendly Neighborhood Navigator here with a hot-hot-hot and extra special announcement.
A massive development campaign spanning a plurality of my 2022 working time has finally met the last few requirements set out and has been released into the wild into Nav2. I’m super happy to announce the release of the New MPPI Controller, the first predictive controller in the Navigation Stack in ROS 1 or ROS 2 to continue progressing the themes of modern capabilities in the framework. This addresses one of the longest standing issues in ROS Navigation.
This project is the brainchild of Aleksei Budyakov (@artofnothingness) developed as a prototype at FastSense. I was so impressed by what I was seeing I dedicated my major development effort of 2022 to refining it, adding new critics, pluginizing the critics, tuning (and retuning [and retuning]), designing new behaviors I think are optimal for realistic robotic systems from my experience, battling the limitations of compute on your behalf to make it real-time, and more. All that said, Aleksei deserves a great deal of the credit and this project wouldn’t have been possible without his initial development and on-going support for my efforts to harden and expand it for use in the Nav2 system.
This controller is a predictive controller, a variant of MPC which is quite special in my opinion. While I won’t go into the nitty-gritty details of MPPI (there are papers for that), a notable element of this approach is that it enables the use of non-convex and non-differentiable objective functions to create optimal trajectories. This is quite important for realistic robotic applications where we want to do a bit more than just follow a carrot and minimize cross-track error. That opens the door to a whole new set of object functions in the MPC world (which we developed for this work) which can create truly fantastic behavior.
And truly fantastic behavior, I thinks this has. I encourage everyone to try it out and tell me what you think. I painstakingly tuned the system to provide really good out of the box behavior without you having to touch any of the dials for most situations (and where required, it is noted with guides in the readme).
- It will really nicely back away from obstacles if close up to them and then go around smoothly – where ROS 1 and previous ROS 2 methods get stuck in local minima.
- You don’t have to “choose” if you want to have exact path-following behavior or highly dynamic behavior due to obstacles. I’ve baked in the ability to do both simultaneously, whereas it will follow the path closely when not near dynamic obstacles but can be highly dynamic off the route when necessary
- Of the 3 companies that I’ve been working with in recent months as beta testers, 2 have decided to move their primary systems over to it immediately and 1 is seriously considering it.
- Work with differential, omnidirectional, and ackermann vehicles alongside highly configurable and replaceable objective functions
Per what I hope you’ve come to expect from Nav2, we have extensive configuration documentation, a fantastic 97% unit test coverage (those darn 20 lines escaped me this time rattles fist), and extremely well calibrated out of the box behavior.
I would be inundated with messages regarding TEB if I did not address it here. While TEB is quite a fantastic piece of software, the maintainer has since moved on from his academic career into a position where it is not possible to maintain it into the future. As such, its largely unmaintained and represents techniques which are bordering on a decade old. This work is very modern and state of the art in the same vertical of techniques as TEB (MPC) so it meets the same need that TEB serves. With MPPI’s modern methodology, performance, active maintenance, and documentation, I hope you all will agree with me over time that this is an improvement. There are certain characteristics of the Elastic Band approaches that I did not like in a production setting that are not present in this work.
Happy predictive controlling,