-
Notifications
You must be signed in to change notification settings - Fork 0
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
Update chooser composite (on Failure case of current child) #6
Comments
This issue was concluded that it was intended, but I think this can make unpredictable or unexpected results. I'll update the examples of unexpected results soon. |
@GTedHa I'd like to hear the examples for which you find it unpredictable/unexpected. |
Update Chooser composite for issue #6 Failure handling 2nd Related PR: https://bitbucket.org/yujinrobot/gopher_cns/pull-requests/82/failure-handling-1st-2nd-iter/diff This issue is not clearly solved in the main stream. but we can use our own forked branch by when we have a conclusion.
I agree with GTedHa, the current implementation just isn't faithful to what the Chooser is supposed to do according to the documentation. Definitely confused me and got me searching until I found these issues. |
For reference, the Chooser documentation...
I wouldn't say that it isn't faithful to the documentation, in particular note Having said that, I appreciate that there are multiple ways you might want a Chooser behaviour to function. None is really right or wrong, just a different logic. So what is needed in the reference implementation? a) It's logic should be crystal clear and to make it clear, this is a wonderful example (thanks @GTedHa!) I should add to the documentation/tests. It should also serve the most common use case or utilise policies for the different variants (like what is done for parallels). Which brings us to the question - should the reference implementation change? I've never been a fan of Choosers - have often considered dropping them in later versions. Composites exponentially increase the complexity of following and programming behaviour trees - the less the better. So far any desired composite we've had can be implemented by some Selector-Sequence-Parallel-Behaviour pattern (when they're common, I bring them in as idioms). Choosers are no exception, they can be handled with blackboard setters and checkers. Until I deprecate them though, I'm not against this change and created an issue over in the upstream repository for it. I won't be backporting it to any of the ROS1 releases though since it will be an API breaking change and might affect other users - feel free to make the patch in this fork until such a time you upgrade / switch to ROS2. |
Hi Daniel, thanks for taking the time to look at the comment. Strictly speaking you are absolutely right, as far as the low level description of the logic goes. But at least on spirit, @GTedHa 's implementation is closer to "Choosers are Selectors with Commitment" , as a Selector would have ticked failing children in order, without jumping out and proceeding on the parent level... To be fair, like you say, as long as the documentation is clear there should be no confusion, and this amazing library is exquisitely done so huge thanks. Overriding the tick method with @GTedHa 's approach is simple enough . In an ideal world, instead of choosers there would be an "Uninterruptible" or "DoNotDisturb" decorator or something like that, but implementing that is probably cumbersome. Thanks for the tips in your comments and thanks again for this amazing work! |
A duplicated issue of stoniers/py_trees issue #50.
The text was updated successfully, but these errors were encountered: