Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Check if parameter is already declared to avoid re-declaring it.
A parameter can only be declared once. When implementing a LicecycleNode one would normally do all the initialization in `on_configure()` and the cleanup, deinitialization in the `on_cleanup` method. Furthermore, these transitions 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 static parameter 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: ``` Original error: parameter 'diagnostic_updater.period' has already been declared ``` To avoid this, until the Foxy version, the wrapper code could explicitly call `undeclare_parameter` on the parameter that the `Updater` is declaring, 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.
- Loading branch information