No version for distro humble showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro jazzy showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro kilted showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro rolling showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro ardent showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro bouncy showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro crystal showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro eloquent showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro dashing showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro galactic showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro foxy showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro iron showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

Package Summary

Tags No category tags.
Version 2.8.6
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version jade-devel
Last Updated 2018-07-23
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

Package Summary

Tags No category tags.
Version 2.8.6
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version indigo-devel
Last Updated 2018-07-23
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

Package Summary

Tags No category tags.
Version 2.7.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version hydro-devel
Last Updated 2015-07-21
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro melodic showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange

No version for distro noetic showing lunar. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 2.9.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/orocos/rtt_ros_integration.git
VCS Type git
VCS Version toolchain-2.9
Last Updated 2022-07-09
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The rtt_dynamic_reconfigure package

Additional Links

Maintainers

  • Orocos Developers

Authors

  • Johannes Meyer

rtt_dynamic_reconfigure

This package provides a way to manipulate the properties of an Orocos RTT component via the ROS dynamic_reconfigure interface.

Dynamic reconfigure uses a combination of ROS topics, services, and the parameter server to enable quick reconfiguration of parameters over the network.

Usage

With an automatically generated config

The easiest way to use rtt_dynamic_reconfigure is to use the special AutoConfig config type. AutoConfig automatically generates a dynamic_reconfigure config description from the set of properties of the TaskContext it is loaded into. No new properties will be created.

rtt_dynamic_reconfigure already comes with a precompiled service plugin for the AutoConfig type. Simply add a dynamic_reconfigure server to any component by loading the reconfigure service:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.advertise("/my_component")

The disadvantage of this method is that the minimum and maximum values requrired for dynamic_reconfigure are unknown. The current values of the properties are advertised as default values. However, you can overwrite the automatically choosen minimum/maximum values before calling the advertise() operation:

import("rtt_dynamic_reconfigure");
loadService("my_component", "reconfigure")
my_component.reconfigure.min.int_property = 0
my_component.reconfigure.max.int_property = 100
my_component.reconfigure.advertise("~/my_component")

Using a custom config file

The rtt_dynamic_reconfigure package comes with a templated rtt_dynamic_reconfigure::Server<ConfigType> class that implements the core functionality of a dynamic_reconfigure server. Usually the ConfigType class header is generated automatically from a *.cfg file by dynamic_reconfigure’s generate_dynamic_reconfigure_options() cmake macro. This config file describes all available parameters and their minimum, maximum and default values.

In order to use rtt_dynamic_reconfigure with a custom config, you first need to create the .cfg file as explained in this tutorial. Afterwards you can add a rtt_dynamic_reconfigure service plugin to your package:

project(my_package)
find_package(dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

orocos_plugin(my_package_reconfigure_service src/reconfigure_service.cpp)
add_dependencies(rtt_dynamic_reconfigure_tests_service ${PROJECT_NAME}_gencfg)

The reconfigure_service.cpp source file instantiates the rtt_dynamic_reconfigure::Server<ConfigType> for the new config type MyPackageConfig, implements the rtt_dynamic_reconfigure::Updater<ConfigType> class that explains how to fill the config from a PropertyBag and vice-versa and registers the server as a service plugin:

#include <rtt_dynamic_reconfigure/server.h>
#include <my_package/MyPackageConfig.h>         // <-- This header is created by generate_dynamic_reconfigure_options(cfg/MyPackage.cfg)

using namespace my_package;

namespace rtt_dynamic_reconfigure {

template <>
struct Updater<MyPackageConfig> {
  static bool propertiesFromConfig(MyPackageConfig &config, uint32_t level, RTT::PropertyBag &bag) {
    setProperty<int>("int_param", bag, config.int_param);
    setProperty<double>("double_param", bag, config.double_param);
    setProperty<std::string>("str_param", bag, config.str_param);
    setProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
  static bool configFromProperties(MyPackageConfig &config, const RTT::PropertyBag &bag) {
    getProperty<int>("int_param", bag, config.int_param);
    getProperty<double>("double_param", bag, config.double_param);
    getProperty<std::string>("str_param", bag, config.str_param);
    getProperty<bool>("bool_param", bag, config.bool_param);
    return true;
  }
};

} // namespace rtt_dynamic_reconfigure

RTT_DYNAMIC_RECONFIGURE_SERVICE_PLUGIN(MyPackageConfig, "my_package_reconfigure")

The rtt_dynamic_reconfigure::setProperty<T>(...) and rtt_dynamic_reconfigure::getProperty<T>(...) helper functions can be used in the Updater implementation. Properties that do not exist yet in the owner’s TaskContext will be created automatically.

Alternatively, the TaskContext in which the service is loaded can inherit and implement the Updater<MyPackageConfig> class directly. In this case you do not need to provide a specialized version of it.

Note: The Updater<ConfigType>::propertiesFromConfig(...) implementation should create properties that are references to the respective fields in the ConfigType struct. This is the case if the properties are added with bag->addProperty(const std::string &name, T &attr) or with the rtt_dynamic_reconfigure::setProperty<T>(...)

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package rtt_dynamic_reconfigure

2.9.2 (2019-05-15)

2.9.1 (2017-11-16)

  • Merge with version 2.8.6

2.9.0 (2017-05-02)

  • rtt_dynamic_reconfigure: create a partially filled PropertyBag from a Config message that only has a subset of fields
  • rtt_dynamic_reconfigure: support both, non-const and const updateProperties callback signatures This is an improved version of https://github.com/orocos/rtt_ros_integration/pull/81 that is backwards-compatible to existing components that provide the const-variant of the callback.
  • rtt_dynamic_reconfigure: allow the update callback to change the values in the propertybag This fixes a thread-safety issue with the previous commit b603585e9f74b3a553347301b44c73b0249856a1. But the user-defined update callback has to update the referenced bag manually in case it modified some property values.
  • rtt_dynamic_reconfigure: publish updated property values in setConfigCallback() instead of desired once Rebuild new_config ConfigType from owner's PropertyBag before serializing and publishing dynamic_reconfigure msg from PropertyBag. The user might have modified the property values in one of the callbacks.
  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9 We do not know for sure which thread is calling this method/operation, but we can check if the current thread is the same as the thread that will process the update/notify operation. If yes, we clone the underlying OperationCaller implementation and set the caller to the processing engine. In this case RTT <2.9 should always call the operation directly as if it would be a ClientThread operation: https://github.com/orocos-toolchain/rtt/blob/toolchain-2.8/rtt/base/OperationCallerInterface.hpp#L79 RTT 2.9 and above already checks the caller thread internally and therefore does not require this hack.
  • Added individual changelogs and bumped versions to 2.9.0
  • Contributors: Johannes Meyer, Viktor Kunovski

2.8.6 (2017-11-15)

  • rtt_dynamic_reconfigure: fix a bug that duplicate ids when generating a parameter description from a property tree The [id]{.title-ref} field of each groups in a dynamic_reconfigure/ConfigDescription message must be unique and some groups might reference another as their parent. Without this patch the ids were assigned locally and were only unique within the same group, which confused rqt_reconfigure and the dynparam console client when they try to rebuild the tree hierarchy in more complex cases.
  • Contributors: Johannes Meyer

2.8.5 (2017-03-28)

  • Merge pull request #86 from orocos/rtt_dynamic_reconfigure-check-updated-properties rtt_dynamic_reconfigure: report updated property values in the service response (indigo-devel)
  • Contributors: Johannes Meyer

2.8.4 (2016-11-26)

2.8.3 (2016-07-20)

  • rtt_dynamic_reconfigure: fixed potential deadlock in refresh() for RTT prior to 2.9
  • rtt_dynamic_reconfigure: set owner of default updateCallback implementation
  • Contributors: Johannes Meyer

2.8.2 (2015-06-12)

  • rtt_dynamic_reconfigure: added support for Property composition and decomposition and fixed reconfiguration of nested properties
  • rtt_dynamic_reconfigure: fixed AutoConfig maximum value for type unsigned int
  • rtt_dynamic_reconfigure: fixed property updating from config in AutoConfig
  • Contributors: Johannes Meyer

2.8.1 (2015-03-16)

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged rtt_dynamic_reconfigure at Robotics Stack Exchange