Revision 64f5c90e
client/python/hlrc_client/MiddlewareROS.py | ||
---|---|---|
28 | 28 |
from Middleware import * |
29 | 29 |
import errno |
30 | 30 |
|
31 |
try: |
|
32 |
import roslib; |
|
33 |
|
|
34 |
import rospy |
|
35 |
import actionlib |
|
36 |
from hlrc_server.msg import * |
|
37 |
|
|
38 |
except ImportError as exception: |
|
39 |
sys.stderr.write("ImportError: {}\n> HINT: try to export PYTHONPATH=$PYTHONPATH:$YOUR_PREFIX/lib/python2.7/site-packages/\n\n".format(exception)) |
|
40 |
sys.exit(errno.ENOPKG) |
|
31 |
import roslib; |
|
32 |
import rospy |
|
33 |
import actionlib |
|
34 |
from hlrc_server.msg import * |
|
41 | 35 |
|
42 | 36 |
class MiddlewareROS(Middleware): |
43 | 37 |
#default timeout to wait in case of blocking calls |
... | ... | |
172 | 166 |
goal.tilt_offset = gaze.tilt_offset |
173 | 167 |
|
174 | 168 |
#type |
175 |
if (gaze.gaze_type == RobotGaze.ABSOLUTE): |
|
176 |
goal.gaze_type = gazetargetGoal.ABSOLUTE |
|
169 |
if (gaze.gaze_type == RobotGaze.GAZETARGET_ABSOLUTE):
|
|
170 |
goal.gaze_type = gazetargetGoal.GAZETARGET_ABSOLUTE
|
|
177 | 171 |
else: |
178 |
goal.gaze_type = gazetargetGoal.RELATIVE |
|
172 |
goal.gaze_type = gazetargetGoal.GAZETARGET_RELATIVE
|
|
179 | 173 |
|
180 | 174 |
goal.timestamp = rospy.Time.from_sec(gaze.timestamp) |
181 | 175 |
|
client/python/hlrc_client/MiddlewareRSB.py | ||
---|---|---|
30 | 30 |
|
31 | 31 |
import rsb |
32 | 32 |
import rsb.converter |
33 |
try: |
|
34 |
import rst |
|
35 |
import rstsandbox |
|
36 |
from rst.robot.EmotionState_pb2 import EmotionState |
|
37 |
from rst.robot.Animation_pb2 import Animation |
|
38 |
from rst.robot.GazeTarget_pb2 import GazeTarget |
|
39 |
from rst.robot.MouthTarget_pb2 import MouthTarget |
|
40 |
except ImportError, e: |
|
41 |
print("Warning, RSB could be imported, but the required message types do not exist: ") |
|
42 |
print e |
|
43 |
|
|
44 |
#except ImportError as exception: |
|
45 |
# sys.stderr.write("ImportError: {}\n> HINT: try to export PYTHONPATH=$PYTHONPATH:$YOUR_PREFIX/lib/python2.7/site-packages/\n\n".format(exception)) |
|
46 |
# sys.exit(errno.ENOPKG) |
|
33 |
import rst |
|
34 |
import rstsandbox |
|
35 |
from rst.robot.EmotionState_pb2 import EmotionState |
|
36 |
from rst.robot.Animation_pb2 import Animation |
|
37 |
from rst.robot.GazeTarget_pb2 import GazeTarget |
|
38 |
from rst.robot.MouthTarget_pb2 import MouthTarget |
|
47 | 39 |
|
48 | 40 |
class MiddlewareRSB(Middleware): |
49 | 41 |
####################################################################### |
client/python/hlrc_client/RobotController.py | ||
---|---|---|
26 | 26 |
""" |
27 | 27 |
|
28 | 28 |
import logging |
29 |
try: |
|
30 |
import rsb |
|
31 |
import rst |
|
32 |
import rstsandbox |
|
33 |
from rst.robot.EmotionState_pb2 import EmotionState |
|
34 |
from rst.robot.Animation_pb2 import Animation |
|
35 |
from rst.robot.GazeTarget_pb2 import GazeTarget |
|
36 |
from rst.robot.MouthTarget_pb2 import MouthTarget |
|
37 |
except ImportError, e: |
|
38 |
print("Warning, RSB import error: ") |
|
39 |
print e |
|
40 |
RSB_SUPPORT = False |
|
41 |
else: |
|
42 |
from MiddlewareRSB import * |
|
43 |
RSB_SUPPORT = True |
|
44 |
|
|
45 |
from MiddlewareROS import * |
|
46 | 29 |
import sys |
30 |
import errno |
|
47 | 31 |
|
48 | 32 |
class RobotController: |
49 | 33 |
def __init__(self, mw_name, scope, loglevel=logging.WARNING): |
... | ... | |
66 | 50 |
|
67 | 51 |
|
68 | 52 |
if (self.mw.upper() == "RSB"): |
69 |
if (not RSB_SUPPORT): |
|
70 |
self.logger.error("ERROR: no RSB support detected") |
|
53 |
self.logger.info("creating new middleware connection via RSB") |
|
54 |
try: |
|
55 |
from MiddlewareRSB import MiddlewareRSB |
|
56 |
except ImportError, e: |
|
57 |
self.logger.error("failed to import RSB or the necessary data types: {}".format(e)) |
|
71 | 58 |
sys.exit(errno.EINVAL) |
72 |
else: |
|
73 |
self.logger.info("creating new middleware connection via RSB") |
|
74 |
self.middleware = MiddlewareRSB(self.scope, self.loglevel) |
|
59 |
|
|
60 |
#import worked, safe to intantiate RSB mw now |
|
61 |
self.middleware = MiddlewareRSB(self.scope, self.loglevel) |
|
62 |
|
|
75 | 63 |
elif (self.mw.upper() == "ROS"): |
76 | 64 |
self.logger.info("creating new middleware connection via ROS") |
65 |
try: |
|
66 |
from MiddlewareROS import MiddlewareROS |
|
67 |
except ImportError, e: |
|
68 |
self.logger.error("failed to import ROS or the necessary data types: {}".format(e)) |
|
69 |
sys.exit(errno.EINVAL) |
|
70 |
|
|
71 |
#import worked, safe to intantiate RSB mw now |
|
77 | 72 |
self.middleware = MiddlewareROS(self.scope, self.loglevel) |
78 | 73 |
else: |
79 | 74 |
self.logger.error("invalid middleware requested (%s). supported: {ROS, RSB}\n\n" % (self.mw)) |
client/python/hlrc_client/RobotGaze.py | ||
---|---|---|
24 | 24 |
Forschungsgemeinschaft (DFG) in the context of the German |
25 | 25 |
Excellence Initiative. |
26 | 26 |
""" |
27 |
|
|
28 | 27 |
import time |
29 | 28 |
|
30 |
|
|
31 | 29 |
class RobotGaze: |
30 |
GAZETARGET_ABSOLUTE = 0 |
|
31 |
GAZETARGET_RELATIVE = 1 |
|
32 |
|
|
33 |
def __init__(self): |
|
34 |
self.pan = 0.0 |
|
35 |
self.tilt = 0.0 |
|
36 |
self.roll = 0.0 |
|
37 |
self.vergence = 0.0 |
|
38 |
self.pan_offset = 0.0 |
|
39 |
self.tilt_offset = 0.0 |
|
40 |
self.gaze_type = RobotGaze.GAZETARGET_ABSOLUTE |
|
41 |
self.timestamp = time.time() |
|
42 |
|
|
43 |
def __str__(self): |
|
44 |
if self.gaze_type == RobotGaze.GAZETARGET_ABSOLUTE: |
|
45 |
type_s = "ABSOLUTE" |
|
46 |
else: |
|
47 |
type_s = "RELATIVE" |
|
48 |
return "RobotGaze = { PTR={%6.2f %6.2f %6.2f} vergence=%6.2f PT_offset={%6.2f %6.2f} [%s]}" \ |
|
49 |
% (self.pan, self.tilt, self.roll, self.vergence, self.pan_offset, self.tilt_offset, type_s) |
|
32 | 50 |
|
33 |
def __init__(self): |
|
34 |
self.GAZETARGET_ABSOLUTE = 0 |
|
35 |
self.GAZETARGET_RELATIVE = 1 |
|
36 |
self.pan = 0.0 |
|
37 |
self.tilt = 0.0 |
|
38 |
self.roll = 0.0 |
|
39 |
self.vergence = 0.0 |
|
40 |
self.pan_offset = 0.0 |
|
41 |
self.tilt_offset = 0.0 |
|
42 |
self.gaze_type = self.GAZETARGET_ABSOLUTE |
|
43 |
self.timestamp = time.time() |
|
44 |
|
|
45 |
def __str__(self): |
|
46 |
if self.gaze_type == self.GAZETARGET_ABSOLUTE: |
|
47 |
type_s = "ABSOLUTE" |
|
48 |
else: |
|
49 |
type_s = "RELATIVE" |
|
50 |
return "RobotGaze = { PTR={%6.2f %6.2f %6.2f} vergence=%6.2f PT_offset={%6.2f %6.2f} [%s]}" \ |
|
51 |
% (self.pan, self.tilt, self.roll, self.vergence, self.pan_offset, self.tilt_offset, type_s) |
client/python/test.py | ||
---|---|---|
43 | 43 |
r.set_speak("test 123") |
44 | 44 |
|
45 | 45 |
g = RobotGaze() |
46 |
g.gaze_type = RobotGaze.GAZETARGET_ABSOLUTE |
|
46 | 47 |
|
47 | 48 |
m = RobotMouth() |
48 | 49 |
m.position_center = 10.0 |
... | ... | |
50 | 51 |
r.set_mouth_target(m) |
51 | 52 |
|
52 | 53 |
while(True): |
54 |
g.timestamp = time.time() |
|
53 | 55 |
g.pan = g.pan + 5.0; |
54 | 56 |
if (g.pan > 20.0): |
55 | 57 |
g.pan = -20.0 |
server/src/main.cpp | ||
---|---|---|
79 | 79 |
} |
80 | 80 |
|
81 | 81 |
//human motion connection: |
82 |
printf("> initializing humotion client\n"); |
|
83 | 82 |
humotion::client::Client *client = new humotion::client::Client(scope, mw_humotion); |
84 | 83 |
|
85 | 84 |
printf("> all done. hlrc server ready\n"); |
Also available in: Unified diff