data = [data]
            except Exception as e:
                smach.logwarn('Failed to parse data keys for CSV file writing: {}'.format(repr(e)))
                return 'aborted'

        # Write to CSV file
        try:
            with open(userdata.file, 'w') as fp:
                writer = csv.writer(fp, delimiter=self._delimiter)
                if header:
                    writer.writerow(header)
                writer.writerows(data)
        except Exception as e:
            smach.logwarn('Failed to write to CSV file \'{}\': {}'.format(userdata.file, repr(e)))
            return 'aborted'

        # Write the header as output key if required.
        if 'header' in self._output_keys:
            userdata.header = header

        return 'succeeded'
{% do defined_headers.append('class_WriteCSVFileState') %}{% endif %}
{% endblock class_defs %}

{% block body %}
smach.{{ parent_type }}.add('{{ name }}',
{{ '' | indent(23, true) }}WriteCSVFileState({% if delimiter is defined %}delimiter='{{ delimiter }}'{% endif %}{% if input_keys is defined %}{% if delimiter is defined %}, {% endif %}{{ render_input_keys(input_keys, indent=0) }}{% endif %}{% if output_keys is defined %}{% if input_keys is defined or delimiter is defined %}, {% endif %}{{ render_output_keys(output_keys, indent=0) }}{% endif %}{% if callbacks is defined %}, {{ render_callbacks(name, uuid, callbacks, indent=0) }}{% endif %}){% if transitions is defined %},
{{ render_transitions(transitions) }}{% endif %}{% if remapping is defined %},
{{ render_remapping(remapping) }}{% endif %})
{% endblock body %}
Ejemplo n.º 2
0
{% from "Utils.tpl.py" import render_outcomes, render_outcome_map, render_input_keys, render_output_keys, render_userdata, render_transitions, render_remapping %}

{% set sm_name = ['sm_', name | lower()] | join() %}

{% block upper_comments %}
#----------------------------------------------------------------------------------------
# BEGIN: {{ name }}
# TEMPLATE: Concurrence
#
{% endblock upper_comments %}

{% block body %}
{{ sm_name }} = smach.Concurrence({{ render_outcomes(outcomes) }},
{{ 'default_outcome=' | indent(35, true) }}'{{ default_outcome }}',
{{ render_outcome_map(outcome_map) }}{% if input_keys is defined %},
{{ render_input_keys(input_keys, indent=35) }}{% endif %}{% if output_keys is defined %},
{{ render_output_keys(output_keys) }}{% endif %})

{# Container header insertion variable indexed by container state name #}
{% if name in header %}{{ header[name] }}{% endif %}

{# Render container userdata #}
{% if userdata is defined %}{{ render_userdata(name | lower(), userdata) }}{% endif %}
{# Render state userdat #}
{% if name in header_userdata %}{{ header_userdata[name] | indent(4, true) }}{% endif %}

with {{ sm_name }}:

    {# Container body insertion variable #}
    {{ body | indent(4) }}
Ejemplo n.º 3
0
            rospy.loginfo('Userdata input key \'{}\' BEFORE callback execution: {}'.format(input_key, userdata[input_key]))

        {{ render_execute_callbacks() }}

        for input_key in self._input_keys:
            rospy.loginfo('Userdata input key \'{}\' AFTER callback execution: {}'.format(input_key, userdata[input_key]))

        return 'succeeded'
{% do defined_headers.append('class_Foo') %}{% endif %}
{% endblock class_defs %}

{% block cb_defs %}
{% if callbacks is defined %}
{% if input_keys is defined %}
{{ render_def_lambda_callbacks(defined_headers, 'Foo', name, uuid, input_keys, outcomes, callbacks) }}
{% else %}
{{ render_def_lambda_callbacks(defined_headers, 'Foo', name, uuid, [], outcomes, callbacks) }}
{% endif %}
{% endif %}
{% endblock cb_defs %}

{% block header_userdata %}
{% if userdata is defined %}{{ render_userdata(parent_sm_name, userdata) }}{% endif %}
{% endblock header_userdata %}

{% block body %}
smach.{{ parent_type }}.add('{{ name }}', Foo('{{ name }}'{% if input_keys is defined %}, {{ render_input_keys(input_keys, indent=0) }}{% endif %}{% if output_keys is defined %}, {{ render_output_keys(output_keys, indent=0) }}{% endif %}{% if callbacks is defined %}, {{ render_callbacks(name, uuid, callbacks, indent=0) }}{% endif %}){% if transitions is defined %}, 
{{ render_transitions(transitions) }}{% endif %}{% if remapping is defined %},
{{ render_remapping(remapping) }}{% endif %})
{% endblock body %}
Ejemplo n.º 4
0
        The names of the userdata input keys needed for the request callback.
      type: list of str
- - output_keys:
      description:
        The names of the userdata output keys needed for the response callback.
      type: list of str
- - userdata:
      description:
        The definitions for the userdata keys named in the input_keys and
        output_keys variables.
      type: dict of str
{% endblock meta %}

{% from "Utils.tpl.py" import render_request_slots, render_input_keys, render_response_slots, render_output_keys, render_transitions, render_remapping %}

{% extends "State.tpl.py" %}

{% block body %}
smach.{{ parent_type }}.add('{{ name }}',
{{ '' | indent(23, true) }}smach_ros.ServiceState('{{ service_namespace }}', {{ service }}{% if request is defined %},
{{ 'request = ' | indent(51, true) }}{{ request }}{% elif request_slots is defined %},
{{ render_request_slots(request_slots) }}{% elif request_cb is defined %},
{{ 'request_cb = ' | indent(51, true) }}{{ request_cb }}{% if input_keys is defined %},
{{ render_input_keys(input_keys) }}{% endif %}{% endif %}{% if response_slots is defined %},
{{ render_response_slots(response_slots) }}{% elif response_cb is defined %},
{{ 'response_cb = ' | indent(51, true) }}{{ response_cb }}{% if output_keys is defined %},
{{ render_output_keys(output_keys) }}{% endif %}{% endif %}){% if transitions is defined %},
{{ render_transitions(transitions) }}{% endif %}{% if remapping is defined %},
{{ render_remapping(remapping) }}{% endif %})
{% endblock body %}
Ejemplo n.º 5
0
{% block main_def %}
{{ super() }}
{% if 'msg_publisher' not in defined_headers %}
msg_publisher = MsgPublisher()
{% do defined_headers.append('msg_publisher') %}{% endif %}
{% endblock main_def %}

{% block header %}
{{ super() }}
{#
 # By using this bit of trickery, we ensure that the mandatory userdata variables
 # 'rate' and 'topic' get defined as an empty string before any other userdata
 # variables are defined (these are rendered via the 'header_userdata' block
 # usually, which is rendered after the 'header' block). This allows for the
 # specification of 'rate' and 'topic' to be omitted in the SMACHA script state
 # definitions to simplify scripts under certain circumstances,
 # e.g. 'topic' can be omitted when the 'action' variable is set to 'stop_all'.
 #}
{% if mandatory_userdata is not defined %}{% set mandatory_userdata = dict() %}{% endif %}
{% if 'rate' not in mandatory_userdata.keys() %}{% set _dummy = mandatory_userdata.update({'rate':100.0}) %}{% endif %}
{% if action == 'stop_all' and 'topic' not in mandatory_userdata.keys() %}{% set _dummy = mandatory_userdata.update({'topic':''}) %}{% endif %}
{% if mandatory_userdata is defined %}{{ render_userdata(parent_sm_name, mandatory_userdata) }}{% endif %}
{% endblock header %}

{% block body %}
smach.{{ parent_type }}.add('{{ name }}',
        {{ '' | indent(23, true) }}{{ class_name }}('{{ name }}', msg_publisher, '{{ action }}'{% if input_keys is defined %}, {{ render_input_keys(input_keys, indent=0) }}{% endif %}{% if output_keys is defined %}, {{ render_output_keys(output_keys, indent=0) }}{% endif %}{% if callbacks is defined %}, {{ render_callbacks(name, uuid, callbacks, indent=0) }}{% endif %}){% if transitions is defined %},
{{ render_transitions(transitions) }}{% endif %}{% if remapping is defined %},
{{ render_remapping(remapping) }}{% endif %})
{% endblock body %}
Ejemplo n.º 6
0
        # Transform the msg
        try:
            if 'msg_type' in self._input_keys:
                transformed_msg = self._transform_msg(parsed_msg, transform, msg_type=userdata.msg_type)
            else:
                transformed_msg = self._transform_msg(parsed_msg, transform)
        except Exception as e:
            rospy.logerr('Error when transforming msg: ' + repr(e))
            return 'aborted'

        # Set point output key if specified
        for output_key in ['msg', 'output_msg', 'msg_output']:
            if output_key in self._output_keys:
                setattr(userdata, output_key, transformed_msg)

        # Set transform output key if specified
        for output_key in ['transform', 'output_transform', 'transform_output']:
            if output_key in self._output_keys:
                setattr(userdata, output_key, transform)

        return 'succeeded'
{% do defined_headers.append('class_TransformMsgState') %}{% endif %}
{% endblock class_defs %}

{% block body %}
smach.{{ parent_type }}.add('{{ name }}',
        {{ '' | indent(23, true) }}TransformMsgState({% if transform_type is defined %}transform_type = '{{ transform_type }}'{% endif %}{% if input_keys is defined %}{% if transform_type is defined %}, {% endif %}{{ render_input_keys(input_keys, indent=0) }}{% endif %}{% if output_keys is defined %}{% if transform_type is defined or input_keys is defined %}, {% endif %}{{ render_output_keys(output_keys, indent=0) }}{% endif %}{% if callbacks is defined %}, {{ render_callbacks(name, uuid, callbacks, indent=0) }}{% endif %}){% if transitions is defined %},
{{ render_transitions(transitions) }}{% endif %}{% if remapping is defined %},
{{ render_remapping(remapping) }}{% endif %})
{% endblock body %}
Ejemplo n.º 7
0
{% endif %}
{% endblock cb_defs %}

{% block main_def %}
{% endblock main_def %}

{% block header %}
{% endblock header %}

{% block header_userdata %}
{% if userdata is defined %}{{ render_userdata(parent_sm_name, userdata) }}{% endif %}
{% endblock header_userdata %}

{% block body %}
smach.{{ parent_type }}.add('{{ name }}',
        {{ '' | indent(23, true) }}{{ class_name }}({% if input_keys is defined %}{{ render_input_keys(input_keys, indent=0) }}{% endif %}{% if output_keys is defined %}{% if input_keys is defined %}, {% endif %}{{ render_output_keys(output_keys, indent=0) }}{% endif %}{% if callbacks is defined %}{% if input_keys is defined or output_keys is defined %}, {% endif %}{{ render_callbacks(name, uuid, callbacks, indent=0) }}{% endif %}{% if outcomes is defined %}{% if input_keys is defined or output_keys is defined or callbacks is defined %}, {% endif %}{{ render_outcomes(outcomes, indent=0) }}{% endif %}){% if transitions is defined %},
{{ render_transitions(transitions) }}{% endif %}{% if remapping is defined %},
{{ render_remapping(remapping) }}{% endif %})
{% endblock body %}

{% block footer %}
{% endblock footer %}

{% block introspection_server %}
{% endblock introspection_server %}

{% block execute %}
{% endblock execute %}

{% block spin %}
{% endblock spin %}
Ejemplo n.º 8
0
{% endblock meta %}

{% from "Utils.tpl.py" import render_outcomes, render_input_keys, render_output_keys, render_userdata, render_transitions, render_remapping %}

{% set sm_name = ['sm_', name | lower()] | join() %}

{% block upper_comments %}
#----------------------------------------------------------------------------------------
# BEGIN: {{ name }}
# TEMPLATE: StateMachine
#
{% endblock upper_comments %}

{% block body %}
{{ sm_name }} = smach.StateMachine({{ render_outcomes(outcomes) }}{% if input_keys is defined %},
{{ render_input_keys(input_keys) }}{% endif %}{% if output_keys is defined %},
{{ render_output_keys(output_keys) }}{% endif %})

{# Base container header insertion variable indexed by container state name #}
{% if name in header %}{{ header[name] }}{% endif %}

{# Render base container userdata #}
{% if userdata is defined %}{{ render_userdata('sm_' + (name | lower()), userdata) }}{% endif %}
{# Render state userdata #}
{% if name in header_userdata %}{{ header_userdata[name] }}{% endif %}

with {{ sm_name }}:

    {# Base container body insertion variable #}
    {{ body | indent(4) }}