Source code for sierra.plugins.platform.ros1gazebo.generators.platform_generators
# 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 platform-specific, but applicable to all projects using
the platform.
"""
# Core packages
import logging
# 3rd party packages
# Project packages
from sierra.core.experiment import spec, definition
from sierra.core import types, ros1, config
[docs]class PlatformExpDefGenerator(ros1.generators.ROSExpDefGenerator):
"""
Init the object.
Attributes:
controller: The controller used for the experiment.
cmdopts: Dictionary of parsed cmdline parameters.
"""
[docs] def __init__(self,
exp_spec: spec.ExperimentSpec,
controller: str,
cmdopts: types.Cmdopts,
**kwargs) -> None:
super().__init__(exp_spec, controller, cmdopts, **kwargs)
self.logger = logging.getLogger(__name__)
[docs] def generate(self) -> definition.XMLExpDef:
exp_def = super().generate()
exp_def.write_config.add({
'src_parent': ".",
'src_tag': "master",
'opath_leaf': "_master" + config.kROS['launch_file_ext'],
'create_tags': None,
'dest_parent': None,
'rename_to': 'launch'
})
exp_def.write_config.add({
'src_parent': ".",
'src_tag': "robot",
'opath_leaf': "_robots" + config.kROS['launch_file_ext'],
'create_tags': None,
'dest_parent': None,
'rename_to': 'launch'
})
# Setup gazebo experiment
self._generate_gazebo_core(exp_def)
# Setup gazebo visualization
self._generate_gazebo_vis(exp_def)
return exp_def
[docs] def _generate_gazebo_core(self, exp_def: definition.XMLExpDef) -> None:
"""
Generate XML tag changes to setup Gazebo core experiment parameters.
Does not write generated changes to the run definition pickle
file.
"""
self.logger.debug("Generating Gazebo experiment changes (all runs)")
# Start Gazebo/ROS in debug mode to make post-mortem analysis easier.
exp_def.tag_add("./master/include",
"arg",
{
"name": "verbose",
"value": "true"
})
# Terminate Gazebo server whenever the launch script that invoked it
# exits.
exp_def.tag_add("./master/include",
"arg",
{
"name": "server_required",
"value": "true"
})
# Don't record stuff
exp_def.tag_remove("./master/include", "arg/[@name='headless']")
exp_def.tag_remove("./master/include", "arg/[@name='recording']")
# Don't start paused
exp_def.tag_remove("./master/include", "arg/[@name='paused']")
# Don't start gazebo under gdb
exp_def.tag_remove("./master/include", "arg/[@name='debug']")
[docs] def _generate_gazebo_vis(self, exp_def: definition.XMLExpDef) -> None:
"""
Generate XML changes to configure Gazebo visualizations.
Does not write generated changes to the simulation definition pickle
file.
"""
exp_def.tag_remove_all("./master/include", "arg/[@name='gui']")
exp_def.tag_add("./master/include",
"arg",
{
"name": "gui",
"value": "false"
})
[docs]class PlatformExpRunDefUniqueGenerator(ros1.generators.ROSExpRunDefUniqueGenerator):
[docs] def __init__(self,
*args,
**kwargs) -> None:
ros1.generators.ROSExpRunDefUniqueGenerator.__init__(
self, *args, **kwargs)
[docs] def generate(self, exp_def: definition.XMLExpDef):
exp_def = super().generate(exp_def)
self.generate_random(exp_def)
self.generate_paramfile(exp_def)
__api__ = [
'PlatformExpDefGenerator',
'PlatformExpRunDefUniqueGenerator'
]