Files
OrbbecSDK_ROS2/orbbec_camera/launch/utils_yaml.py
T

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")