[BACKPORT - #227] Check if parameter is already declared to avoid re-declaring it #228
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.
This is a backport of PR #227 to be used in galactic
A parameter can only be declared once. When implementing a LicecycleNode
one would normally do all the initialization in
on_configure()
and thecleanup, deinitialization in the
on_cleanup
method. Furthermore, thesetransitions could potentially be called multiple times, depending on how
the node is t ransitioned from the lifecycles are triggered. However,
this approach doesn't currently work well with Diagnostics since, in the
constructor, of
diagnostic_updater::Updater
it's declaring a staticparameter without checking whether that parameter has already been
declared. In subsequent calls to
on_configure
(and thus,if Diagnostics are initialized there, in subsequent calls to the
Updater
constructor, this results in the following message:To avoid this, until the Foxy version, the wrapper code could explicitly
call
undeclare_parameter
on the parameter that theUpdater
isdeclaring, but as of Galactic, undeclaring a static parameter is not
allowed anymore. See e.g., ros2/rclcpp#1850.
In this commit, I'm checking explicitly if the parameter has already
been registered and if so, I'm just reading its value before attempting
to re-declare it.