Ok, let me see…
Things to keep about the current navigation stack:
- All the dynamic reconfigure for sure.
- All the representations in rviz (necessary for tunning as well)
- I will keep the algorithms that are currently implemented in ROS1, if possible with the same parameters. This will make the transition smooth.
Things that I will change:
Please, correct me if I am wrong. Right now, if you want to use your own planner (local or global), you have to use the C++ API. The class that you provided was extremely convenient to minimize the flow of information and speed up the full Navigation Stack work.
However, ROS2 should be more efficient while handling messages right? Is it fast enough to deal with the idea of using a node for each planner? This node could receive all the information throw messages or is too much?
If this is the case, we should study the possibility of detaching the nav_core and the planners.
Maybe the community will be more comfortable with a publish/subscribing paradigm. Is just a thought, but this will make everything even more modular right?
Is the navigation stack too dependent on the position or is just my impression? If the robot does not start in his position, everything goes really crazy. The local planner and the local cost map can be more independent of the positioning system, right? Is a bad configuration of my navigation or is like that?
Things that I will add:
A simple system that tracks common problems. E.g: Hey, I am waiting for a map and it is not coming! Hey, I am sending cmd_vel commands but the position does not change! Things like that.
A simple undocking algorithm; I do not want my robot to move backward unless a recovery behavior specifies so. A tiny algorithm at the beginning that moves the robot backward x meters could be handy. Moreover, this can be attached to a simple boolean topic. There, a sensor can publish if the robot is at the docking station or not. If the robot is at the docker, you execute the undocking before moving, if not, just move as usual.
+1 to the idea of specifying the goal tolerance.