Why is SimpleGoalChecker so simple?
Hey guys,
I'm trying to understand the intent behind some of the design choices of nav2_controller::ControllerServer
and nav2_controller::SimpleGoalChecker
. Specifically, it looks like the goal checker will return true when it is in the vicinity of the target pose. Subsequently, the controller seems to constantly check if we have reached the goal. The result being that we can't give the controller a path that loops over itself, i.e., it will exit and return successful the first time it reaches the goal.
Example, suppose I want to have the robot drive 10 laps around a closed track and so I provide a path that goes around the track 10 times, but when I give the path to the controller it will exit after the first lap, in fact it might immediately exit since our initial pose and goal pose are the same.
Of course we can go with a different goal checker but the interface only provides the query pose, the target pose, and the velocity as input, thus it makes it hard to extend it to track the path until the robot has driven the entire path. Of course we could have it subscribe to the controller's action messages but that seems less than ideal, if this information was important then it should be provide it via a method call. Alternatively we could use the velocity to skip the other poses but that too seems to have limitations.
How was the above scenario intended to be solved? Thanks