mirror of
https://github.com/orbbec/OrbbecSDK_ROS2.git
synced 2026-09-13 03:30:18 +08:00
86 lines
2.5 KiB
Python
86 lines
2.5 KiB
Python
import os
|
|
import yaml
|
|
import logging
|
|
from ament_index_python.packages import get_package_share_directory
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def load_yaml(file_path):
|
|
try:
|
|
with open(file_path, 'r') as f:
|
|
return yaml.safe_load(f)
|
|
except FileNotFoundError:
|
|
logger.error(f"File {file_path} not found.")
|
|
return {}
|
|
except yaml.YAMLError as e:
|
|
logger.error(f"Error parsing YAML file {file_path}: {e}")
|
|
return {}
|
|
|
|
|
|
def parse_yaml(data, prefix='', params=None):
|
|
if params is None:
|
|
params = {}
|
|
if isinstance(data, dict):
|
|
for key, value in data.items():
|
|
new_prefix = f'{key}.' if prefix else key + '.'
|
|
params = parse_yaml(value, prefix=new_prefix, params=params)
|
|
elif isinstance(data, list):
|
|
for index, item in enumerate(data):
|
|
params = parse_yaml(item, prefix=f'[{index}].', params=params)
|
|
else:
|
|
params[prefix[:-1]] = data
|
|
#print(f'{prefix}: {data}')
|
|
return params
|
|
|
|
|
|
def load_and_parse_yaml(file_path):
|
|
data = load_yaml(file_path)
|
|
return parse_yaml(data) if data else {}
|
|
|
|
|
|
def update_params(default_params, yaml_params):
|
|
default_params.update(yaml_params)
|
|
return default_params
|
|
|
|
|
|
def find_param(params, key, default_value=None):
|
|
if isinstance(params, dict):
|
|
return params.get(key, default_value)
|
|
elif isinstance(params, list):
|
|
for param_dict in params:
|
|
if isinstance(param_dict, dict) and key in param_dict:
|
|
return param_dict[key]
|
|
return default_value
|
|
|
|
|
|
def get_absolute_path(config_file_path, package_name):
|
|
if not os.path.isabs(config_file_path):
|
|
logger.info(f"not Absolute path: {config_file_path}")
|
|
return os.path.join(get_package_share_directory(package_name), 'config', config_file_path)
|
|
logger.info(f"Absolute path: {config_file_path}")
|
|
return config_file_path
|
|
|
|
|
|
def convert_value(value):
|
|
if isinstance(value, str):
|
|
try:
|
|
return int(value)
|
|
except ValueError:
|
|
pass
|
|
try:
|
|
return float(value)
|
|
except ValueError:
|
|
pass
|
|
if value.lower() == 'true':
|
|
return True
|
|
elif value.lower() == 'false':
|
|
return False
|
|
return value
|
|
|
|
def print_params(default_params):
|
|
print(f"\n----------------------------------------")
|
|
for key, value in default_params.items():
|
|
print(f"Key: {key}, Value: {value}")
|
|
print(f"----------------------------------------\n") |