Revision 5eb9025f client/python/hlrc_client/MiddlewareRSB.py
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