Geonhee-LEE / mpc_ros

Differential Wheeled Mobile Robot - Nonlinear Model Predictive Control based on ROS
https://www.youtube.com/watch?v=5IqFGBmDGjU
Apache License 2.0
727 stars 169 forks source link

Integration with costmap #6

Open Geonhee-LEE opened 3 years ago

Geonhee-LEE commented 3 years ago

Integration with costmap

Geonhee-LEE commented 3 years ago

TEB can actually be seen as a special realization of MPC:

So it is comparable with a point-to-point time-optimal model predictive control approach. Whereas the soft-constraint approximation and the dynamics description usually result in very fast computation times (compared to standard MPC), they are also introducing some restrictions:

During the last year I implemented a generic MPC framework at my department which can realize variable-horizon time-optimal MPC but also standard quadratic-form receding-horizon MPC, etc. I also wrote an mpc local planner plugin that includes the features of the TEB but with full state space robot models and hard-constraints. Also other MPC configurations are possible. The package is still private, however, I thought about pushing it in the next days to ros1 and ros2. Of course, computation time is larger than for the TEB, but still very fast to my mind.

I am reusing some classes from the teb_local_planner, like PoseSE2, obstacles, robot footprint models, distance computations. This could be related to your last paragraph, as this is all required by gradient-based optimization and is not yet part of navigation or navigation2. I thought about moving these classes to a separate ros repository which TEB and MPC planners depend on. This is also the reason why I am holding back the ros2 release of TEB right now.

Instead of copying the TEB (which I actually don't like as well), what about adding a dependency on it to navigation2 meta package? We can make sure to push the new TEB release quite soon after every new ROS release, as the number of dependencies is low. I could also add a further maintainer. What do you think? Edit: okay, the circular dependency could be a problem as bloom releases all projects at once...

REF

https://github.com/ros-planning/navigation2/issues/1277