mirror of
https://github.com/orbbec/OrbbecSDK_ROS2.git
synced 2026-10-04 12:07:46 +08:00
Merge with OrbbecSDK_ROS2 v2.1.1
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user