Revision 5eb9025f
| client/python/hlrc_client/MiddlewareRSB.py | ||
|---|---|---|
| 185 | 185 | 
     | 
| 186 | 186 | 
            self.logger.debug("gaze rpc done")
   | 
| 187 | 187 | 
     | 
| 188 | 
    """  | 
|
| 189 | 
    def publish_mouth_target(self, mouth, blocking):  | 
|
| 190 | 
    publish a mouth target via mw  | 
|
| 191 | 
    :param mouth: mouth value to set  | 
|
| 192 | 
    :param blocking: True if this call should block until execution finished on robot  | 
|
| 193 | 
     | 
|
| 194 | 
        self.logger.debug("calling the mouth rpc (%s)..." % ("BLOCKING" if blocking else "NON-BLOCKING"))
   | 
|
| 195 | 
     | 
|
| 196 | 
    #create mouth state & fill it with values:  | 
|
| 197 | 
    rsb_mouth = MouthTarget()  | 
|
| 198 | 
     | 
|
| 199 | 
    #fill proto  | 
|
| 200 | 
    rsb_mouth.opening_left = mouth.opening_left  | 
|
| 201 | 
    rsb_mouth.opening_center = mouth.opening_center  | 
|
| 202 | 
    rsb_mouth.opening_right = mouth.opening_right  | 
|
| 203 | 
    rsb_mouth.position_left = mouth.position_left  | 
|
| 204 | 
    rsb_mouth.position_center = mouth.position_center  | 
|
| 205 | 
    rsb_mouth.position_right = mouth.position_right  | 
|
| 206 | 
     | 
|
| 207 | 
    if (blocking):  | 
|
| 208 | 
    #blocking:  | 
|
| 209 | 
    result = self.server.mouth(rsb_mouth)  | 
|
| 210 | 
            self.logger.debug("server reply: '%s'" % result)
   | 
|
| 211 | 
    else:  | 
|
| 212 | 
    future = self.server.mouth.async(rsb_mouth)  | 
|
| 213 | 
    #we can block here for a incoming result with a timeout in s  | 
|
| 214 | 
    #print '> server reply: "%s"' % future.get(timeout = 10);  | 
|
| 215 | 
     | 
|
| 216 | 
        self.logger.debug("mouth rpc done")
   | 
|
| 217 | 
    """  | 
|
| 188 | 
    def publish_speech(self, text, blocking):  | 
|
| 189 | 
    """publish a tts request via mw  | 
|
| 190 | 
    :param text: text to synthesize and speak  | 
|
| 191 | 
    :param blocking: True if this call should block until execution finished on robot  | 
|
| 192 | 
    """  | 
|
| 193 | 
            self.logger.debug("calling the speech rpc (%s)..." % ("BLOCKING" if blocking else "NON-BLOCKING"))
   | 
|
| 218 | 194 | 
     | 
| 195 | 
    if (blocking):  | 
|
| 196 | 
    # blocking:  | 
|
| 197 | 
    result = self.server.speech(text)  | 
|
| 198 | 
                self.logger.debug("server reply: '%s'" % result)
   | 
|
| 199 | 
    else:  | 
|
| 200 | 
    future = self.server.speech.async(text)  | 
|
| 201 | 
    # we can block here for a incoming result with a timeout in s  | 
|
| 202 | 
    #print '> server reply: "%s"' % future.get(timeout = 10);  | 
|
| 219 | 203 | 
     | 
| 220 | 
    def publish_speech(self, text, blocking):  | 
|
| 221 | 
    """publish a tts request via mw  | 
|
| 222 | 
    :param text: text to synthesize and speak  | 
|
| 223 | 
    :param blocking: True if this call should block until execution finished on robot  | 
|
| 224 | 
    """  | 
|
| 225 | 
        self.logger.debug("calling the speech rpc (%s)..." % ("BLOCKING" if blocking else "NON-BLOCKING"))
   | 
|
| 204 | 
            self.logger.debug("speech rpc done")
   | 
|
| 226 | 205 | 
     | 
| 227 | 
    if (blocking):  | 
|
| 228 | 
    # blocking:  | 
|
| 229 | 
    result = self.server.speech(text)  | 
|
| 230 | 
            self.logger.debug("server reply: '%s'" % result)
   | 
|
| 231 | 
    else:  | 
|
| 232 | 
    future = self.server.speech.async(text)  | 
|
| 233 | 
    # we can block here for a incoming result with a timeout in s  | 
|
| 234 | 
    #print '> server reply: "%s"' % future.get(timeout = 10);  | 
|
| 235 | 206 | 
     | 
| 236 | 
        self.logger.debug("speech rpc done")
   | 
|
| 207 | 
    #######################################################################  | 
|
| 208 | 
    def is_running(self):  | 
|
| 209 | 
    return True  | 
|
| 237 | 210 | 
     | 
| 238 | 211 | 
     | 
| 239 | 
    #######################################################################  | 
|
| 240 | 
    def is_running(self):  | 
|
| 241 | 
    return True  | 
|
| 212 | 
    #######################################################################  | 
|
| 213 | 
    # some helpers  | 
|
| 214 | 
    def convert_HeadAnimationtype_to_rsbval(self, value):  | 
|
| 215 | 
    """convert RobotHeadAnimation.value to RSB HeadAnimation value  | 
|
| 216 | 
    :param value: RobotHeadAnimation.* id to convert to rsb id  | 
|
| 217 | 
    """  | 
|
| 218 | 
    # NOTE: this convertion is important as the actual integer values of  | 
|
| 219 | 
    # thy python api and the protobuf might be different  | 
|
| 220 | 
     | 
|
| 221 | 
    if (value == RobotHeadAnimation.IDLE):  | 
|
| 222 | 
    return HeadAnimation().IDLE  | 
|
| 223 | 
    elif (value == RobotHeadAnimation.HEAD_NOD):  | 
|
| 224 | 
    return HeadAnimation().HEAD_NOD  | 
|
| 225 | 
    elif (value == RobotHeadAnimation.HEAD_SHAKE):  | 
|
| 226 | 
    return HeadAnimation().HEAD_SHAKE  | 
|
| 227 | 
    elif (value == RobotHeadAnimation.EYEBLINK_L):  | 
|
| 228 | 
    return HeadAnimation().EYEBLINK_L  | 
|
| 229 | 
    elif (value == RobotHeadAnimation.EYEBLINK_R):  | 
|
| 230 | 
    return HeadAnimation().EYEBLINK_R  | 
|
| 231 | 
    elif (value == RobotHeadAnimation.EYEBLINK_BOTH):  | 
|
| 232 | 
    return HeadAnimation().EYEBLINK_BOTH  | 
|
| 233 | 
    elif (value == RobotHeadAnimation.EYEBROWS_RAISE):  | 
|
| 234 | 
    return HeadAnimation().EYEBROWS_RAISE  | 
|
| 235 | 
    elif (value == RobotHeadAnimation.EYEBROWS_LOWER):  | 
|
| 236 | 
    return HeadAnimation().EYEBROWS_LOWER  | 
|
| 237 | 
    else:  | 
|
| 238 | 
                self.logger.error("invalid HeadAnimation type %d\n" % (value))
   | 
|
| 239 | 
    return HeadAnimation().NEUTRAL  | 
|
| 242 | 240 | 
     | 
| 241 | 
    def convert_emotiontype_to_rsbval(self, value):  | 
|
| 242 | 
    """convert RobotEmotion.value to RSB HeadAnimation value  | 
|
| 243 | 
    :param value: RobotEmotion.* id to convert to rsb id  | 
|
| 244 | 
    """  | 
|
| 245 | 
    # NOTE: this convertion is important as the actual integer values of  | 
|
| 246 | 
    # thy python api and the protobuf might be different  | 
|
| 247 | 
     | 
|
| 248 | 
    if (value == RobotEmotion.NEUTRAL):  | 
|
| 249 | 
    return EmotionExpression().NEUTRAL  | 
|
| 250 | 
    elif (value == RobotEmotion.HAPPY):  | 
|
| 251 | 
    return EmotionExpression().HAPPY  | 
|
| 252 | 
    elif (value == RobotEmotion.SAD):  | 
|
| 253 | 
    return EmotionExpression().SAD  | 
|
| 254 | 
    elif (value == RobotEmotion.ANGRY):  | 
|
| 255 | 
    return EmotionExpression().ANGRY  | 
|
| 256 | 
    elif (value == RobotEmotion.SURPRISED):  | 
|
| 257 | 
    return EmotionExpression().SURPRISED  | 
|
| 258 | 
    elif (value == RobotEmotion.FEAR):  | 
|
| 259 | 
    return EmotionExpression().FEAR  | 
|
| 260 | 
    else:  | 
|
| 261 | 
                self.logger.error("invalid emotion type %d\n" % (value))
   | 
|
| 262 | 
    return EmotionExpression().NEUTRAL  | 
|
| 243 | 263 | 
     | 
| 244 | 
    #######################################################################  | 
|
| 245 | 
    # some helpers  | 
|
| 246 | 
    def convert_HeadAnimationtype_to_rsbval(self, value):  | 
|
| 247 | 
    """convert RobotHeadAnimation.value to RSB HeadAnimation value  | 
|
| 248 | 
    :param value: RobotHeadAnimation.* id to convert to rsb id  | 
|
| 249 | 
    """  | 
|
| 250 | 
    # NOTE: this convertion is important as the actual integer values of  | 
|
| 251 | 
    # thy python api and the protobuf might be different  | 
|
| 252 | 
     | 
|
| 253 | 
    if (value == RobotHeadAnimation.IDLE):  | 
|
| 254 | 
    return HeadAnimation().IDLE  | 
|
| 255 | 
    elif (value == RobotHeadAnimation.HEAD_NOD):  | 
|
| 256 | 
    return HeadAnimation().HEAD_NOD  | 
|
| 257 | 
    elif (value == RobotHeadAnimation.HEAD_SHAKE):  | 
|
| 258 | 
    return HeadAnimation().HEAD_SHAKE  | 
|
| 259 | 
    elif (value == RobotHeadAnimation.EYEBLINK_L):  | 
|
| 260 | 
    return HeadAnimation().EYEBLINK_L  | 
|
| 261 | 
    elif (value == RobotHeadAnimation.EYEBLINK_R):  | 
|
| 262 | 
    return HeadAnimation().EYEBLINK_R  | 
|
| 263 | 
    elif (value == RobotHeadAnimation.EYEBLINK_BOTH):  | 
|
| 264 | 
    return HeadAnimation().EYEBLINK_BOTH  | 
|
| 265 | 
    elif (value == RobotHeadAnimation.EYEBROWS_RAISE):  | 
|
| 266 | 
    return HeadAnimation().EYEBROWS_RAISE  | 
|
| 267 | 
    elif (value == RobotHeadAnimation.EYEBROWS_LOWER):  | 
|
| 268 | 
    return HeadAnimation().EYEBROWS_LOWER  | 
|
| 269 | 
    else:  | 
|
| 270 | 
            self.logger.error("invalid HeadAnimation type %d\n" % (value))
   | 
|
| 271 | 
    return HeadAnimation().NEUTRAL  | 
|
| 272 | 
     | 
|
| 273 | 
     | 
|
| 274 | 
    def convert_emotiontype_to_rsbval(self, value):  | 
|
| 275 | 
    """convert RobotEmotion.value to RSB HeadAnimation value  | 
|
| 276 | 
    :param value: RobotEmotion.* id to convert to rsb id  | 
|
| 277 | 264 | 
    """  | 
| 278 | 
    # NOTE: this convertion is important as the actual integer values of  | 
|
| 279 | 
    # thy python api and the protobuf might be different  | 
|
| 280 | 
     | 
|
| 281 | 
    if (value == RobotEmotion.NEUTRAL):  | 
|
| 282 | 
    return EmotionExpression().NEUTRAL  | 
|
| 283 | 
    elif (value == RobotEmotion.HAPPY):  | 
|
| 284 | 
    return EmotionExpression().HAPPY  | 
|
| 285 | 
    elif (value == RobotEmotion.SAD):  | 
|
| 286 | 
    return EmotionExpression().SAD  | 
|
| 287 | 
    elif (value == RobotEmotion.ANGRY):  | 
|
| 288 | 
    return EmotionExpression().ANGRY  | 
|
| 289 | 
    elif (value == RobotEmotion.SURPRISED):  | 
|
| 290 | 
    return EmotionExpression().SURPRISED  | 
|
| 291 | 
    elif (value == RobotEmotion.FEAR):  | 
|
| 292 | 
    return EmotionExpression().FEAR  | 
|
| 293 | 
    else:  | 
|
| 294 | 
            self.logger.error("invalid emotion type %d\n" % (value))
   | 
|
| 295 | 
    return EmotionExpression().NEUTRAL  | 
|
| 265 | 
    def publish_mouth_target(self, mouth, blocking):  | 
|
| 266 | 
    publish a mouth target via mw  | 
|
| 267 | 
    :param mouth: mouth value to set  | 
|
| 268 | 
    :param blocking: True if this call should block until execution finished on robot  | 
|
| 269 | 
     | 
|
| 270 | 
            self.logger.debug("calling the mouth rpc (%s)..." % ("BLOCKING" if blocking else "NON-BLOCKING"))
   | 
|
| 271 | 
     | 
|
| 272 | 
    #create mouth state & fill it with values:  | 
|
| 273 | 
    rsb_mouth = MouthTarget()  | 
|
| 274 | 
     | 
|
| 275 | 
    #fill proto  | 
|
| 276 | 
    rsb_mouth.opening_left = mouth.opening_left  | 
|
| 277 | 
    rsb_mouth.opening_center = mouth.opening_center  | 
|
| 278 | 
    rsb_mouth.opening_right = mouth.opening_right  | 
|
| 279 | 
    rsb_mouth.position_left = mouth.position_left  | 
|
| 280 | 
    rsb_mouth.position_center = mouth.position_center  | 
|
| 281 | 
    rsb_mouth.position_right = mouth.position_right  | 
|
| 282 | 
     | 
|
| 283 | 
    if (blocking):  | 
|
| 284 | 
    #blocking:  | 
|
| 285 | 
    result = self.server.mouth(rsb_mouth)  | 
|
| 286 | 
                self.logger.debug("server reply: '%s'" % result)
   | 
|
| 287 | 
    else:  | 
|
| 288 | 
    future = self.server.mouth.async(rsb_mouth)  | 
|
| 289 | 
    #we can block here for a incoming result with a timeout in s  | 
|
| 290 | 
    #print '> server reply: "%s"' % future.get(timeout = 10);  | 
|
| 291 | 
     | 
|
| 292 | 
            self.logger.debug("mouth rpc done")
   | 
|
| 293 | 
    """  | 
|
Also available in: Unified diff