hlrc / client / python / hlrc_client / hlrc_set_emotion.py @ 62d50515
History | View | Annotate | Download (2.555 KB)
1 | 0c286af0 | Simon Schulz | #!/usr/bin/python
|
---|---|---|---|
2 | #PYTHONPATH="/opt/ros/groovy/lib/python2.7/dist-packages:/vol/csra/releases/nightly/lib/python2.7/:/vol/csra/releases/nightly/lib/python2.7/site-packages/
|
||
3 | import sys |
||
4 | import logging |
||
5 | import errno |
||
6 | |||
7 | try:
|
||
8 | import rsb |
||
9 | import rsb.converter |
||
10 | import rst |
||
11 | import rstsandbox |
||
12 | from rst.robot.EmotionState_pb2 import EmotionState |
||
13 | except ImportError as exception: |
||
14 | sys.stderr.write("ImportError: {}\n> HINT: try to export PYTHONPATH=$PYTHONPATH:$YOUR_PREFIX/lib/python2.7/site-packages/\n\n".format(exception))
|
||
15 | sys.exit(errno.ENOPKG) |
||
16 | |||
17 | class hlrc_emotion(): |
||
18 | def __init__(self, _base_scope): |
||
19 | #print "> registering rst converter"
|
||
20 | converter = rsb.converter.ProtocolBufferConverter(messageClass = EmotionState) |
||
21 | rsb.converter.registerGlobalConverter(converter) |
||
22 | self.set_scope( _base_scope);
|
||
23 | |||
24 | def set_scope(self, scope): |
||
25 | self.base_scope = str(scope) #NOTE: str() is important here, scope is a qstring (?) and gets deleted during call |
||
26 | print "> setting scope to '%s'" % self.base_scope |
||
27 | try:
|
||
28 | self.server = rsb.createRemoteServer(self.base_scope + '/set') |
||
29 | except ValueError: |
||
30 | print "> invalid scope given. server deactivated" |
||
31 | self.server.deactivate()
|
||
32 | |||
33 | def set_emotion(self, emotion_id, duration_each, blocking): |
||
34 | if (self.server is None): |
||
35 | print("> invalid server")
|
||
36 | return
|
||
37 | |||
38 | #create emotion & fill it with values:
|
||
39 | em = EmotionState() |
||
40 | |||
41 | #select ani
|
||
42 | em.value = emotion_id |
||
43 | em.duration = duration_each |
||
44 | |||
45 | with rsb.createRemoteServer(self.base_scope + '/set') as server: |
||
46 | if (blocking):
|
||
47 | #blocking:
|
||
48 | print "> calling the emotion rpc (blocking until we finished talking)..." |
||
49 | print '> server reply: "%s"' % server.currentEmotion(em) |
||
50 | else:
|
||
51 | print "> calling the animation rpc (NON-BLOCKING)..." |
||
52 | future = server.currentEmotion.async(em) |
||
53 | #we can block here for a incoming result with a timeout in s
|
||
54 | #print '> server reply: "%s"' % future.get(timeout = 10);
|
||
55 | |||
56 | print "> done" |
||
57 | |||
58 | def main(): |
||
59 | if (len(sys.argv) != 4): |
||
60 | print "> usage: %s <base scope> <emotion id> <duration>\n> example: %s /flobi1 1 1000" % (sys.argv[0] , sys.argv[0]) |
||
61 | sys.exit(0)
|
||
62 | |||
63 | # Pacify logger.
|
||
64 | #logging.basicConfig()
|
||
65 | em_id = int(sys.argv[2]) |
||
66 | dur = int(sys.argv[3]) |
||
67 | base = sys.argv[1]
|
||
68 | |||
69 | hlrc_emotion(base).set_emotion(em_id, dur, 1)
|
||
70 | |||
71 | if __name__ == '__main__': |
||
72 | main() |
||
73 |