Source code for sierra.plugins.engine.ros1gazebo.generators.engine
# Copyright 2021 John Harwell, All rights reserved.
#
# SPDX-License-Identifier: MIT
"""Classes for generating common XML modifications for :term:`ROS1+Gazebo`.
I.e., changes which are engine-specific, but applicable to all projects using
the engine.
"""
# Core packages
import logging
import pathlib
# 3rd party packages
# Project packages
from sierra.core.experiment import spec as expspec
from sierra.core.experiment import definition
from sierra.core import types, ros1, config
_logger = logging.getLogger(__name__)
[docs]
def for_all_exp(
spec: expspec.ExperimentSpec,
controller: str,
cmdopts: types.Cmdopts,
expdef_template_fpath: pathlib.Path,
) -> definition.BaseExpDef:
"""Generate XML modifications common to all ROS1+Gazebo experiments."""
exp_def = ros1.generators.for_all_exp(
spec, controller, cmdopts, expdef_template_fpath
)
exp_def.write_config.add(
{
"src_parent": ".",
"src_tag": "master",
"opath_leaf": "_master" + config.ROS["launch_file_ext"],
"new_children": None,
"new_children_parent": None,
"rename_to": "launch",
}
)
exp_def.write_config.add(
{
"src_parent": ".",
"src_tag": "robot",
"opath_leaf": "_robots" + config.ROS["launch_file_ext"],
"new_children": None,
"new_children_parent": None,
"rename_to": "launch",
}
)
# Setup gazebo experiment
_generate_all_exp_gazebo_core(exp_def)
# Setup gazebo visualization
_generate_all_exp_gazebo_vis(exp_def)
return exp_def
def _generate_all_exp_gazebo_core(exp_def: definition.BaseExpDef) -> None:
"""
Generate XML tag changes to setup Gazebo core experiment parameters.
Does not write generated changes to the run definition pickle
file.
"""
_logger.debug("Generating Gazebo experiment changes (all runs)")
# Start Gazebo/ROS in debug mode to make post-mortem analysis easier.
exp_def.element_add("./master/include", "arg", {"name": "verbose", "value": "true"})
# Terminate Gazebo server whenever the launch script that invoked it
# exits.
exp_def.element_add(
"./master/include", "arg", {"name": "server_required", "value": "true"}
)
# Don't record stuff
exp_def.element_remove("./master/include", "arg/[@name='headless']")
exp_def.element_remove("./master/include", "arg/[@name='recording']")
# Don't start paused
exp_def.element_remove("./master/include", "arg/[@name='paused']")
# Don't start gazebo under gdb
exp_def.element_remove("./master/include", "arg/[@name='debug']")
def _generate_all_exp_gazebo_vis(exp_def: definition.BaseExpDef) -> None:
"""
Generate XML changes to configure Gazebo visualizations.
Does not write generated changes to the simulation definition pickle
file.
"""
exp_def.element_remove_all("./master/include", "arg/[@name='gui']")
exp_def.element_add("./master/include", "arg", {"name": "gui", "value": "false"})
[docs]
def for_single_exp_run(*args, **kwargs) -> None:
"""Generate XML changes unique to each experimental run.
Wraps :py:func:`sierra.core.ros1.generators.for_single_exp_run`.
"""
return ros1.generators.for_single_exp_run(*args, **kwargs)
__all__ = ["for_all_exp", "for_single_exp_run"]