Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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
Create subscriber on constructor #4859
base: main
Are you sure you want to change the base?
Create subscriber on constructor #4859
Changes from 3 commits
cd9c4e2
c65bdfe
99c1359
12249d0
ad45545
e981817
e420aeb
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't we do
initialize()
here because initialize gets the input portsThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In general, should we change them all from
createROSInterfaces()
in the constructor toinitalize()
so that if there are other non-ros-interface making initialization steps that might be important for the interface definitions, we perform them here too?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think consistently calling
initialize()
in the constructor is a good idea, and I agree with that approach.However, limiting
createROSInterfaces()
to only withininitialize()
and not calling eithercreateROSInterfaces()
orinitialize()
from the constructor would not resolve the issue mentioned in the issue, where the behavior during the first execution becomes undefined. Therefore, I would like to avoid this.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK! I see you updated that in this case on battery low, but not in the other cases. Can you update all the BT nodes for that change so they're all consistent? I think with that, this is ready to merge.
I'm saying that we should call
initialize()
in the constructor and also in the pattern below we've added to all of thetick()
's. Shouldn't that handle the situation?I'm basically just saying I want you to replace
createROSInterfaces()
in the constructor withinitialize()
, who itself callscreateROSInterfaces()
. That way, if there are additional steps to initialization beyond just creating ROS interfaces, we call all of that stuff in the constructor as well as on the firsttick()
so the behavior is totally consistent between them.Basically, use
initialize()
in both locations andcreateROSInterfaces()
should only ever be called byinitialize()
and no one else as a general design pattern across all nodes.