Statistics
| Branch: | Tag: | Revision:

hlrc / client / python / hlrc_client / Middleware.py @ f8fa1217

History | View | Annotate | Download (4.938 KB)

1
"""
2
This file is part of hlrc
3

4
Copyright(c) sschulz <AT> techfak.uni-bielefeld.de
5
http://opensource.cit-ec.de/projects/hlrc
6

7
This file may be licensed under the terms of the
8
GNU General Public License Version 3 (the ``GPL''),
9
or (at your option) any later version.
10

11
Software distributed under the License is distributed
12
on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
13
express or implied. See the GPL for the specific language
14
governing rights and limitations.
15

16
You should have received a copy of the GPL along with this
17
program. If not, go to http://www.gnu.org/licenses/gpl.html
18
or write to the Free Software Foundation, Inc.,
19
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20

21
The development of this software was supported by the
22
Excellence Cluster EXC 277 Cognitive Interaction Technology.
23
The Excellence Cluster EXC 277 is a grant of the Deutsche
24
Forschungsgemeinschaft (DFG) in the context of the German
25
Excellence Initiative.
26
"""
27

    
28
import sys
29
import logging
30
from RobotEmotion import *
31
from RobotGaze import *
32
from RobotMouth import *
33
from RobotAnimation import *
34

    
35
class Middleware:
36
        #######################################################################
37
        def __init__(self, scope, loglevel=logging.WARNING):
38
                """initialise
39
                :param scope: base scope we want to listen on 
40
                """
41
                self.base_scope = scope
42
                
43
                self.logger = logging.getLogger(__name__)
44
                
45
                # create nice and actually usable formatter and add it to the handler
46
                self.config_logger(loglevel)
47
                
48
                #initialise defaults
49
                self.default_emotion = RobotEmotion()
50
                self.current_emotion = RobotEmotion()
51
                self.gaze_target = RobotGaze()
52
                self.mouth_target = RobotMouth()
53
                self.robot_animation = RobotAnimation()
54
                        
55
        def __del__(self):
56
                """destructor
57
                """
58
                self.logger.debug("destructor of Middleware called")
59
        
60
        def config_logger(self, level):
61
                formatter = logging.Formatter('%(asctime)s %(name)-30s %(levelname)-8s > %(message)s')
62
                ch = logging.StreamHandler()
63
                #ch.setLevel(level)
64
                ch.setFormatter(formatter)
65
                self.logger.setLevel(level)
66
                self.logger.addHandler(ch)
67
        
68
        #######################################################################
69
        #abstract/virtual functions
70
        def die_virtual(self, funcname):
71
                raise NotImplementedError(funcname + "() is virtual, must be overwritten")
72
        
73
        def init_middleware(self):
74
                self.die_virtual(sys._getframe().f_code.co_name)
75
        
76
        def publish_default_emotion(self, emotion, blocking):
77
                self.die_virtual(sys._getframe().f_code.co_name)
78
        
79
        def publish_current_emotion(self, emotion, blocking):
80
                self.die_virtual(sys._getframe().f_code.co_name)
81
        
82
        def publish_gaze_target(self, gaze, blocking):
83
                self.die_virtual(sys._getframe().f_code.co_name)
84
        
85
        def publish_mouth_target(self, mouth, blocking):
86
                self.die_virtual(sys._getframe().f_code.co_name)
87
        
88
        def publish_head_animation(self, animation, blocking):
89
                self.die_virtual(sys._getframe().f_code.co_name)
90
        
91
        def publish_speech(self, text, blocking):
92
                self.die_virtual(sys._getframe().f_code.co_name)
93
        
94
        #######################################################################
95
        #finally some implemented functions
96
        def set_default_emotion(self, emotion, blocking):
97
                """set the default emotion
98
                :param emotion: RobotEmotion to set 
99
                :param blocking: True if this call should block until execution finished on robot
100
                """
101
                self.default_emotion = emotion
102
                self.publish_default_emotion(emotion, blocking)
103
                
104
        def set_current_emotion(self, emotion, blocking):
105
                """set a temporary emotion (duration: see emotion.time_ms)
106
                :param emotion: RobotEmotion to set temporarily
107
                :param blocking: True if this call should block until execution finished on robot
108
                """
109
                self.current_emotion = emotion
110
                self.publish_current_emotion(emotion, blocking)
111
        
112
        def set_head_animation(self, animation, blocking):
113
                """trigger a head animation
114
                :param animation: RobotAnimation to set
115
                :param blocking: True if this call should block until execution finished on robot
116
                """
117
                self.animation = animation
118
                self.publish_head_animation(animation, blocking)
119
        
120
        def set_mouth_target(self, mouth, blocking):
121
                """set a mouth target
122
                :param mouth: RobotMouth to set
123
                :param blocking: True if this call should block until execution finished on robot
124
                """
125
                self.mouth_target = mouth
126
                self.publish_mouth_target(mouth, blocking)
127

    
128
        def set_speak(self, text, blocking):
129
                """trigger a tts speech output
130
                :param text: text to synthesize and speak
131
                :param blocking: True if this call should block until execution finished on robot
132
                """
133
                self.publish_speech(text, blocking)
134
        
135
        def set_gaze_target(self, gaze, blocking):
136
                """set a new gaze 
137
                :param gaze: RobotGaze to set
138
                :param blocking: True if this call should block until execution finished on robot
139
                """
140
                self.gaze_target = gaze
141
                self.publish_gaze_target(gaze, blocking)
142
                
143
        #######################################################################
144
        #some get methods
145
        #def get_current_emotion(self):
146
        #        return self.current_emotion
147
        #
148
        #def get_default_emotion(self):
149
        #        return self.default_emotion
150
        #