====== Dynamic Reconfigure ======
The dynamic_reconfigure package provides a means to change node parameters at any
time without having to restart the node.
To create parameters that can be dynamically reconfigured do the following:
===== Setup the package dependencies =====
If starting a new package do:
catkin_create_pkg package_name ropsy roscpp dynamic_reconfigure
If modifying existing package:
dynamic_reconfigure
roscpp
rospy
dynamic_reconfigure
roscpp
rospy
dynamic_reconfigure
roscpp
rospy
===== Make a .cfg file. =====
Add a config file and call it Something.cfg. Place it in package/cfg directory.
#!/usr/bin/env python
PACKAGE = "dynamic_tutorials"
from dynamic_reconfigure.parameter_generator_catkin import *
gen = ParameterGenerator()
gen.add("int_param", int_t, 0, "An Integer parameter", 50, 0, 100)
gen.add("double_param", double_t, 0, "A double parameter", .5, 0, 1)
gen.add("str_param", str_t, 0, "A string parameter", "Hello World")
gen.add("bool_param", bool_t, 0, "A Boolean parameter", True)
size_enum = gen.enum([ gen.const("Small", int_t, 0, "A small constant"),
gen.const("Medium", int_t, 1, "A medium constant"),
gen.const("Large", int_t, 2, "A large constant"),
gen.const("ExtraLarge", int_t, 3, "An extra large constant")],
"An enum to set size")
gen.add("size", int_t, 0, "A size parameter which is edited via an enum", 1, 0, 3, edit_method=size_enum)
# This is important. The second parameter should be the name of the pacakge
# and the third parameter is the prefix of the generated libaries
exit(gen.generate(PACKAGE, "dynamic_tutorials", "Tutorials"))
Set the config file to be exectutable:
chmod a+x cfg/Tutorials.cfg
Add the following to the CmakeLists.txt:
# add dynamic reconfigure api
#find_package(catkin REQUIRED dynamic_reconfigure)
generate_dynamic_reconfigure_options(
cfg/Tutorials.cfg
)
# If using a c++ node, make sure that you add this dependency so that
# the library gets generated before building the node
# add_dependencies(example_node ${PROJECT_NAME}_gencfg)
===== Using the .cfg library in your node =====
You can do this in python or c++. Import the generated Config library and attach a
callback function to get the parameter updates. Then do whatever you want with the
parameters! Yay! Follow these tutorials:
[[http://wiki.ros.org/dynamic_reconfigure/Tutorials/SettingUpDynamicReconfigureForANode%28python%29|Python]]
[[http://wiki.ros.org/dynamic_reconfigure/Tutorials/SettingUpDynamicReconfigureForANode%28cpp%29|C++]]