Revision 3877047d client/python/hlrc_client/Middleware.py
| client/python/hlrc_client/Middleware.py | ||
|---|---|---|
| 33 | 33 |
from RobotAnimation import * |
| 34 | 34 |
|
| 35 | 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 |
|
|
| 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 | 55 |
def __del__(self): |
| 56 |
"""destructor
|
|
| 57 |
"""
|
|
| 58 |
self.logger.debug("destructor of Middleware called")
|
|
| 59 |
|
|
| 60 |
def config_logger(self, level): |
|
| 56 |
"""destructor
|
|
| 57 |
"""
|
|
| 58 |
self.logger.debug("destructor of Middleware called")
|
|
| 59 |
|
|
| 60 |
def config_logger(self, level):
|
|
| 61 | 61 |
formatter = logging.Formatter('%(asctime)s %(name)-30s %(levelname)-8s > %(message)s')
|
| 62 | 62 |
ch = logging.StreamHandler() |
| 63 | 63 |
#ch.setLevel(level) |
| 64 | 64 |
ch.setFormatter(formatter) |
| 65 | 65 |
self.logger.setLevel(level) |
| 66 | 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 |
# |
|
| 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 |
# |
|
Also available in: Unified diff