def _calc_level(self, config1, config2): level = 0 for param in extract_params(self.type.config_description): if config1[param['name']] != config2[param['name']]: level |= param['level'] return level
def _clamp(self, config): for param in extract_params(self.type.config_description): maxval = self.type.max[param['name']] minval = self.type.min[param['name']] val = config[param['name']] if val > maxval and maxval != "": config[param['name']] = maxval elif val < minval and minval != "": config[param['name']] = minval
def _descriptions_msg(self, msg): self.group_description = decode_description(msg) self.param_description = extract_params(self.group_description) # Build map from parameter name to type self._param_types = {} for p in self.param_description: n, t = p.get('name'), p.get('type') if n is not None and t is not None: self._param_types[n] = self._param_type_from_string(t) with self._cv: self._cv.notifyAll() if self._description_callback is not None: self._description_callback(self.param_description)
def __init__(self, config_description): self.config_description = config_description self.min = {} self.max = {} self.defaults = {} self.level = {} self.type = {} self.all_level = 0 for param in extract_params(config_description): self.min[param['name']] = param['min'] self.max[param['name']] = param['max'] self.defaults[param['name']] = param['default'] self.level[param['name']] = param['level'] self.type[param['name']] = param['type'] self.all_level = self.all_level | param['level']
"level": 0, "min": 0, "type": "int", }, ], "type": "", "id": 0, } min = {} max = {} defaults = {} level = {} type = {} all_level = 0 # def extract_params(config): # params = [] # params.extend(config['parameters']) # for group in config['groups']: # params.extend(extract_params(group)) # return params for param in extract_params(config_description): min[param["name"]] = param["min"] max[param["name"]] = param["max"] defaults[param["name"]] = param["default"] level[param["name"]] = param["level"] type[param["name"]] = param["type"] all_level = all_level | param["level"]
inf = float('inf') config_description = {'upper': 'DEFAULT', 'lower': 'groups', 'srcline': 246, 'name': 'Default', 'parent': 0, 'srcfile': '/opt/ros/kinetic/lib/python2.7/dist-packages/dynamic_reconfigure/parameter_generator_catkin.py', 'cstate': 'true', 'parentname': 'Default', 'class': 'DEFAULT', 'field': 'default', 'state': True, 'parentclass': '', 'groups': [], 'parameters': [{'srcline': 293, 'description': 'Whether to apply this plugin or not', 'max': True, 'cconsttype': 'const bool', 'ctype': 'bool', 'srcfile': '/opt/ros/kinetic/lib/python2.7/dist-packages/dynamic_reconfigure/parameter_generator_catkin.py', 'name': 'enabled', 'edit_method': '', 'default': True, 'level': 0, 'min': False, 'type': 'bool'}, {'srcline': 293, 'description': "Whether to clear the robot's footprint of lethal obstacles", 'max': True, 'cconsttype': 'const bool', 'ctype': 'bool', 'srcfile': '/opt/ros/kinetic/lib/python2.7/dist-packages/dynamic_reconfigure/parameter_generator_catkin.py', 'name': 'footprint_clearing_enabled', 'edit_method': '', 'default': True, 'level': 0, 'min': False, 'type': 'bool'}, {'srcline': 293, 'description': 'The maximum height of any obstacle to be inserted into the costmap in meters.', 'max': 50.0, 'cconsttype': 'const double', 'ctype': 'double', 'srcfile': '/opt/ros/kinetic/lib/python2.7/dist-packages/dynamic_reconfigure/parameter_generator_catkin.py', 'name': 'max_obstacle_height', 'edit_method': '', 'default': 2.0, 'level': 0, 'min': 0.0, 'type': 'double'}, {'srcline': 293, 'description': 'Method for combining two layers', 'max': 2147483647, 'cconsttype': 'const int', 'ctype': 'int', 'srcfile': '/opt/ros/kinetic/lib/python2.7/dist-packages/dynamic_reconfigure/parameter_generator_catkin.py', 'name': 'combination_method', 'edit_method': "{'enum_description': 'Method for combining layers enum', 'enum': [{'srcline': 11, 'description': 'Overwrite values', 'srcfile': '/home/ros/catkin_ws/src/navigation/costmap_2d/cfg/ObstaclePlugin.cfg', 'cconsttype': 'const int', 'value': 0, 'ctype': 'int', 'type': 'int', 'name': 'Overwrite'}, {'srcline': 12, 'description': 'Take the maximum of the values', 'srcfile': '/home/ros/catkin_ws/src/navigation/costmap_2d/cfg/ObstaclePlugin.cfg', 'cconsttype': 'const int', 'value': 1, 'ctype': 'int', 'type': 'int', 'name': 'Maximum'}, {'srcline': 13, 'description': 'Do nothing', 'srcfile': '/home/ros/catkin_ws/src/navigation/costmap_2d/cfg/ObstaclePlugin.cfg', 'cconsttype': 'const int', 'value': 99, 'ctype': 'int', 'type': 'int', 'name': 'Nothing'}]}", 'default': 1, 'level': 0, 'min': -2147483648, 'type': 'int'}], 'type': '', 'id': 0} min = {} max = {} defaults = {} level = {} type = {} all_level = 0 #def extract_params(config): # params = [] # params.extend(config['parameters']) # for group in config['groups']: # params.extend(extract_params(group)) # return params for param in extract_params(config_description): min[param['name']] = param['min'] max[param['name']] = param['max'] defaults[param['name']] = param['default'] level[param['name']] = param['level'] type[param['name']] = param['type'] all_level = all_level | param['level'] ObstaclePlugin_Overwrite = 0 ObstaclePlugin_Maximum = 1 ObstaclePlugin_Nothing = 99
def _copy_to_parameter_server(self): for param in extract_params(self.type.config_description): rospy.set_param(self.ns + param['name'], self.config[param['name']])
def _copy_from_parameter_server(self): for param in extract_params(self.type.config_description): try: self.config[param['name']] = rospy.get_param(self.ns + param['name']) except KeyError: pass
def _copy_to_parameter_server(self): for param in extract_params(self.type.config_description): rospy.set_param(self.ns + param['name'], self.config[param['name']])