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 %}
            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 %}
Example #3
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 %}
{% 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 %}
Example #5
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 %}