From 762e67c8082ed55aaa9f1e18ee54ed576621e952 Mon Sep 17 00:00:00 2001 From: Vytas Date: Tue, 25 Oct 2016 17:25:54 +0800 Subject: [PATCH 1/4] Speech as performance event, added parameters for matching speech --- src/performances/scripts/runner.py | 5 ++ src/performances/src/performances/nodes.py | 54 +++++++++++++------ .../modules/performances/entities/node.js | 4 +- .../modules/performances/views/node_select.js | 6 +++ .../views/templates/node_select.tpl | 7 ++- 5 files changed, 58 insertions(+), 18 deletions(-) diff --git a/src/performances/scripts/runner.py b/src/performances/scripts/runner.py index 8db085501..b77fb2571 100755 --- a/src/performances/scripts/runner.py +++ b/src/performances/scripts/runner.py @@ -84,6 +84,7 @@ def __init__(self): # Shared subscribers for nodes rospy.Subscriber('/' + self.robot_name + '/speech_events', String, lambda msg: self.notify('speech_events', msg)) + rospy.Subscriber('/' + self.robot_name + '/speech', ChatMessage, self.speech_callback) # Shared subscribers for nodes rospy.Subscriber('/hand_events', String, self.hand_callback) @@ -341,5 +342,9 @@ def hand_callback(self, msg): self.notify(msg.data, msg) + def speech_callback(self, msg): + self.notify('SPEECH', msg.utterance) + + if __name__ == '__main__': Runner() diff --git a/src/performances/src/performances/nodes.py b/src/performances/src/performances/nodes.py index c24de10b0..1d3001e1c 100644 --- a/src/performances/src/performances/nodes.py +++ b/src/performances/src/performances/nodes.py @@ -274,8 +274,10 @@ def __init__(self, data, runner): self.timer = False if 'on_event' not in self.data.keys(): self.data['on_event'] = False + if 'event_param' not in self.data.keys(): + self.data['event_param'] = False - def start_performance(self, msg=None): + def start_performance(self): if self.subscriber: self.runner.unregister(self.data['topic'].strip(), self.subscriber) self.subscriber = None @@ -286,29 +288,51 @@ def start_performance(self, msg=None): if not response.success: self.runner.resume() + def event_callback(self, msg=None): + if self.data['event_param']: + # Check if any comma separated + params = str(self.data['event_param']).lower().split(',') + matched = False + for p in params: + try: + rospy.logerr(str(msg or '').lower()+" "+p) + str(msg or '').lower().index(p.strip()) + matched = True + continue + except ValueError: + matched = matched or False + if not matched: + return False + if self.data['on_event']: + self.start_performance() + else: + self.resume() + + def resume(self): + if self.subscriber: + self.runner.unregister(self.data['topic'].strip(), self.subscriber) + self.subscriber = None + if not self.finished: + self.runner.resume() + if self.timer: + self.timer.cancel() + def start(self, run_time): self.runner.pause() - def resume(msg=None): - if self.subscriber: - self.runner.unregister(self.data['topic'].strip(), self.subscriber) - self.subscriber = None - if not self.finished: - self.runner.resume() - if self.timer: - self.timer.cancel() + if 'topic' in self.data: topic = self.data['topic'].strip() - if self.data['on_event']: - self.subscriber = self.runner.register(topic, self.start_performance) - else: - self.subscriber = self.runner.register(topic, resume) - + # if self.data['on_event']: + # self.subscriber = self.runner.register(topic, self.start_performance) + # else: + # self.subscriber = self.runner.register(topic, resume) + self.subscriber = self.runner.register(topic, self.event_callback) try: timeout = float(self.data['timeout']) if timeout > 0.1: - self.timer = Timer(timeout, resume) + self.timer = Timer(timeout, self.resume) self.timer.start() except (ValueError, KeyError) as e: logger.error(e) diff --git a/src/webui/client/modules/performances/entities/node.js b/src/webui/client/modules/performances/entities/node.js index 4cd508f98..7b10b35ad 100644 --- a/src/webui/client/modules/performances/entities/node.js +++ b/src/webui/client/modules/performances/entities/node.js @@ -67,8 +67,8 @@ define(['application', 'backbone', 'lib/api', 'jquery', 'supermodel'], defaultValues: {speed: 1, interval: 1} }, pause: { - label: 'Pause', - properties: ['topic', 'timeout', 'on_event'], + label: 'Break', + properties: ['topic', 'timeout', 'on_event', 'event_param'], defaultValues: {duration: 0.2} }, settings: { diff --git a/src/webui/client/modules/performances/views/node_select.js b/src/webui/client/modules/performances/views/node_select.js index ef9f59d54..e5f0a5bc8 100644 --- a/src/webui/client/modules/performances/views/node_select.js +++ b/src/webui/client/modules/performances/views/node_select.js @@ -16,6 +16,7 @@ define(['application', 'marionette', './templates/node_select.tpl', '../entities langSelect: 'select.app-lang-select', attentionRegionList: '.app-attention-region-list', topicInput: '.app-node-topic', + eventParamInput: '.app-node-event-param', btreeModeSelect: 'select.app-btree-mode-select', speechEventSelect: 'select.app-speech-event-select', hrAngleSlider: '.app-hr-angle-slider', @@ -33,6 +34,7 @@ define(['application', 'marionette', './templates/node_select.tpl', '../entities 'change @ui.textInput': 'setTextDuration', 'change @ui.langSelect': 'setLanguage', 'change @ui.topicInput': 'setTopic', + 'change @ui.eventParamInput': 'setEventParam', 'change @ui.listenResponseInputs': 'updateChatResponses', 'click @ui.listenAddResponseButton': 'addListenResponse', 'click @ui.removeListenResponseButton': 'removeListenResponse', @@ -46,6 +48,7 @@ define(['application', 'marionette', './templates/node_select.tpl', '../entities }, modelChanged: function () { this.ui.topicInput.val(this.model.get('topic')); + this.ui.eventParamInput.val(this.model.get('event_param')); }, onAttach: function () { this.initFields(); @@ -304,6 +307,9 @@ define(['application', 'marionette', './templates/node_select.tpl', '../entities setTopic: function () { this.model.set('topic', this.ui.topicInput.val()); }, + setEventParam: function () { + this.model.set('event_param', this.ui.eventParamInput.val()); + }, enableAttentionRegionSelect: function () { var self = this; diff --git a/src/webui/client/modules/performances/views/templates/node_select.tpl b/src/webui/client/modules/performances/views/templates/node_select.tpl index 4d16db0fa..5407e5c0e 100644 --- a/src/webui/client/modules/performances/views/templates/node_select.tpl +++ b/src/webui/client/modules/performances/views/templates/node_select.tpl @@ -21,10 +21,15 @@
- +
+
+ + +
+