Robotics StackExchange | Archived questions

Validating non-consecutive enums in dynamic reconfigure

I'm using dynamic reconfigure to set a property to three possible values: 1, 3 or 5. I've used the edit_method as per the tutorials to limit the user's input to these 3 enum values.

#!/usr/bin/env python

PACKAGE='example_node'
import roslib; roslib.load_manifest(PACKAGE)

from dynamic_reconfigure.parameter_generator_catkin import *

gen = ParameterGenerator()

test_enum = gen.enum([ gen.const("1m", int_t, 1, "1 meter"),
                       gen.const("3m", int_t, 3, "3 meters"),
                       gen.const("5m", int_t, 5, "5 meters")],
                       "Use to set the test value")

gen.add("test_number", int_t, 0, "Must be 1, 3 or 5.", 3, 1, 5, edit_method=test_enum)

exit(gen.generate(PACKAGE, "example_node", "ExampleNode"))

This works correctly via the rqtreconfigure GUI. However, using the python API's `updateconfigurationorrosrun dynamicreconfigure dynparam set examplenode test_number 4`, the value can set to anything between the min and max range, including 2 and 4 which should be invalid.

The dynamic_reconfig examples only show enums with consecutive values, which means values between the valid values are not possible.

Is there a way to validate non-consecutive enums, so only the specific values are allowed?

The only solution I can think of is to validate the enums in the dynamic reconfigure callback in my C++ node, then updateConfig to set the value to something valid. But this feels like a work-around, there must be a better way built into dynamic_reconfigure.

Asked by Magnus on 2019-09-06 04:10:30 UTC

Comments

Answers