move xacro_args loader to utils
This commit is contained in:
parent
942bafab4d
commit
6b376f40a6
2 changed files with 29 additions and 27 deletions
|
@ -17,6 +17,7 @@ from launch_ros.actions import Node
|
||||||
from launch_ros.substitutions import FindPackageShare
|
from launch_ros.substitutions import FindPackageShare
|
||||||
from robot_builder.external.ros2_control import ControllerManager
|
from robot_builder.external.ros2_control import ControllerManager
|
||||||
from robot_builder.parser.urdf import URDF_parser
|
from robot_builder.parser.urdf import URDF_parser
|
||||||
|
from rbs_utils.launch import load_xacro_args
|
||||||
|
|
||||||
|
|
||||||
def launch_setup(context, *args, **kwargs):
|
def launch_setup(context, *args, **kwargs):
|
||||||
|
@ -65,33 +66,6 @@ def launch_setup(context, *args, **kwargs):
|
||||||
description_package_abs_path, "urdf", "xacro_args.yaml"
|
description_package_abs_path, "urdf", "xacro_args.yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO: hide this to another place
|
|
||||||
# Load xacro_args
|
|
||||||
def param_constructor(loader, node, local_vars):
|
|
||||||
value = loader.construct_scalar(node)
|
|
||||||
return LaunchConfiguration(value).perform(
|
|
||||||
local_vars.get("context", "Launch context if not defined")
|
|
||||||
)
|
|
||||||
|
|
||||||
def variable_constructor(loader, node, local_vars):
|
|
||||||
value = loader.construct_scalar(node)
|
|
||||||
return local_vars.get(value, f"Variable '{value}' not found")
|
|
||||||
|
|
||||||
def load_xacro_args(yaml_file, local_vars):
|
|
||||||
# Get valut from ros2 argument
|
|
||||||
yaml.add_constructor(
|
|
||||||
"!param", lambda loader, node: param_constructor(loader, node, local_vars)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Get value from local variable in this code
|
|
||||||
# The local variable should be initialized before the loader was called
|
|
||||||
yaml.add_constructor(
|
|
||||||
"!variable",
|
|
||||||
lambda loader, node: variable_constructor(loader, node, local_vars),
|
|
||||||
)
|
|
||||||
|
|
||||||
with open(yaml_file, "r") as file:
|
|
||||||
return yaml.load(file, Loader=yaml.FullLoader)
|
|
||||||
|
|
||||||
mappings_data = load_xacro_args(xacro_config_file, locals())
|
mappings_data = load_xacro_args(xacro_config_file, locals())
|
||||||
|
|
||||||
|
|
28
rbs_utils/rbs_utils/rbs_utils/launch.py
Normal file
28
rbs_utils/rbs_utils/rbs_utils/launch.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import yaml
|
||||||
|
from launch.substitutions import LaunchConfiguration
|
||||||
|
|
||||||
|
def param_constructor(loader, node, local_vars):
|
||||||
|
value = loader.construct_scalar(node)
|
||||||
|
return LaunchConfiguration(value).perform(
|
||||||
|
local_vars.get("context", "Launch context if not defined")
|
||||||
|
)
|
||||||
|
|
||||||
|
def variable_constructor(loader, node, local_vars):
|
||||||
|
value = loader.construct_scalar(node)
|
||||||
|
return local_vars.get(value, f"Variable '{value}' not found")
|
||||||
|
|
||||||
|
def load_xacro_args(yaml_file, local_vars):
|
||||||
|
# Get valut from ros2 argument
|
||||||
|
yaml.add_constructor(
|
||||||
|
"!param", lambda loader, node: param_constructor(loader, node, local_vars)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Get value from local variable in this code
|
||||||
|
# The local variable should be initialized before the loader was called
|
||||||
|
yaml.add_constructor(
|
||||||
|
"!variable",
|
||||||
|
lambda loader, node: variable_constructor(loader, node, local_vars),
|
||||||
|
)
|
||||||
|
|
||||||
|
with open(yaml_file, "r") as file:
|
||||||
|
return yaml.load(file, Loader=yaml.FullLoader)
|
Loading…
Add table
Add a link
Reference in a new issue