-
Notifications
You must be signed in to change notification settings - Fork 160
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MBF must ensure that the robot is stopped when checking for goal reached #213
Comments
Actually, I'm rethinking the whole concept of MBF checking for goal reached and having its own tolerance values. Because:
So I wonder if we should improve it, implementing this and making |
I don't know exactly the history of this issue but it makes sense to give full responsibility to the controller plugin. I like the idea btw of passing goal tolerances in the |
If that is desired. Maybe check if the robot almost reached its end velocity (often zero)? |
Idea: add a method to the plugin interface to set the tolerances passed in the goal and restore the original values when done. Something like |
But what is wrong with the current approach: the |
No, no, nothing wrong with Much easier is to change the internal tolerance values that the controller plugin uses. We can do this in a new Thinking better, this last option makes the most sense. And indeed is the approach used for the global planner. Only problem I see is if the plugin uses the configured tolerance values outside of the |
I've looked at the controllers I've written, and these have custom logic to determine when the goal is reached. My only requirement is that that should always be possible. On the tolerance values, I'm using the same pattern as the DWA planner, i.e. a |
With the current state, with a small tolerance on the controller (teb) and a big one on the ExePath, once the goal is reached within the big tolerance, no more cmd vel are published. Potientially, the last published vel can be quite high. I don't know either what's the best solution. But I am interested in the discussion. On one hand, I like to have the controller configured with the smallest achievable tolerance and then having MBF overriding them according to the parameters of the action. On the other end, with the current implementation, no deceleration stop velocities are computed. Which is quite dangerous if you have no vel watchdog in your system (but nobody does that right?). This leaves it to your smoother or motor controller to stop the robot with the max configured deceleration after the watchdog expires. Maybe generating deceleration vels directly from MBF in case the goal is reached ? |
Yeah you're absolutely right, this can be dangerous. We're planning to go in the direction of #206 Then it's up to the user if MBF checks if the goal is reached or not. In combination with the |
As an interesting observation: navigation2 has split goal checking I'm curious what the implications of that choice are. And I'm not sure where my custom goal checking logic belongs :) |
By now the solution will be:
But implementing this issue (check for robot stopped) is much trickier, though. Because if MBF is configured to enforce looser tolerances than the controller (let's say 1m distance), the later won't slow down until closer to its own tolerance (let's say 10 cm). So checking that the robot is stopped won't work. But generating deceleration vels directly from MBF sounds like invading the competences of the controller, and so MBF is not the right place. So a final, more radical alternative, is to entirely remove this feature! But given it's already in use by some groups, doesn't sound a valid option |
Please don't remove it, we use it too!
What would be a proper alternative ? Using a cancel and ensure on the controller side that the robot is smoothly stopped ? Or adding a stop() function in the abstract interface and implementing it on the controller side ? Or wait for navigation2 to be mature enough for all of us to make the switch ? |
We could also add an |
Calling cancel on the controller sounds very reasonable.
…On Tue, Oct 6, 2020 at 6:39 PM Sebastian Pütz ***@***.***> wrote:
We could also add an outcome success code for that the goal is reached to
make it easier for developers. Which is then internally translated to
success and finishing the execution. @doisyg <https://github.com/doisyg>
We are not removing the MBF check for if the goal is reached.
If we implement a deceleration on the MBF side, then for sure with another
parameter to enable it ;)
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#213 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AACOYMX2VLOCOYRTI3GHFI3SJLQVNANCNFSM4O5LHYIA>
.
|
That is, when parameter
mbf_tolerance_check
is true, we also need to check that the robot is almost stopped. Like in the base_local_planner:But wee need to merge #189 to have actual robot speed to check that, so I'll do in a PR after merging that.
The text was updated successfully, but these errors were encountered: