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. (#227)
* 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. * Replaced try-catch with has_parameter check. Co-authored-by: Nikos Koukis <nikolaos@slamcore.com> Co-authored-by: Ralph Lange <ralph-lange@users.noreply.github.com>
- Loading branch information