-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Description
Summary
When reacting to navigation failures, it is essential to know why it failed to be able to react to it in a reasonable way.
Explanation
- Even inside the stack, planner's
ComputePathToPoseand controller'sFollowPathprovide no additional information than success/failure and astd_msgs/Empty. - From the outside of navigation, there is also no way of knowing the overall reason for a navigation failure (e.g. Planner or Controller failure, no progress, ...). Calling the
NavigateToPoseaction, the resulting response is just astd_msgs/Empty.
Example where feedback could be useful: In the behavior trees, we often see recovery actions for planner/controller failures. This makes sense if the computation failed because the robot is stuck somehow and turning/waiting can resolve the issue. But if the planner failed because the goal is occupied, it makes no sense that the robot backs up or turns around as soon as it sees it. Different reactions depending on the cause for failure are needed.
What can we do about it?
First of all: Do you agree that this is problematic?
I am not sure what the best way of dealing with this issue is and wanted to openly ask what you think about it.
Some ideas:
- Planner and controllers could loosely publish failure reasons on separate topics for anyone to react to it
- Alternatively, they could use the blackboard for this
- The action interfaces could have
errorfields
Still, I don't see a clean way of dealing with failure reasons in the behavior trees, the architecture doesn't seem to allow for it.