Revision 6229bceb client/cpp/src/MiddlewareRSB.cpp
client/cpp/src/MiddlewareRSB.cpp | ||
---|---|---|
32 | 32 |
#include <rsb/converter/Repository.h> |
33 | 33 |
#include <rsb/converter/ProtocolBufferConverter.h> |
34 | 34 |
|
35 |
#include <rst/robot/EmotionState.pb.h> |
|
36 |
#include <rst/robot/Animation.pb.h> |
|
37 |
#include <rst/robot/GazeTarget.pb.h> |
|
38 |
#include <rst/robot/MouthTarget.pb.h> |
|
35 |
#include <rst/animation/EmotionExpression.pb.h> |
|
36 |
#include <rst/animation/BinocularHeadGaze.pb.h> |
|
37 |
#include <rst/animation/HeadAnimation.pb.h> |
|
39 | 38 |
#include <rst/audition/Utterance.pb.h> |
39 |
#include <rst/audition/SoundChunk.pb.h> |
|
40 | 40 |
#include <boost/algorithm/string.hpp> |
41 | 41 |
#include <boost/range/algorithm_ext/erase.hpp> |
42 | 42 |
|
43 |
WARNING: RSB interface might be deprtecated and needs some backporting |
|
44 |
from the ROS code. [todo] |
|
45 |
|
|
46 | 43 |
using namespace std; |
47 | 44 |
using namespace rsb; |
48 | 45 |
using namespace rsb::patterns; |
... | ... | |
57 | 54 |
|
58 | 55 |
try{ |
59 | 56 |
//converter for EmotionState |
60 |
rsb::converter::Converter<string>::Ptr emotionStateConverter(new rsb::converter::ProtocolBufferConverter<rst::robot::EmotionState>());
|
|
57 |
rsb::converter::Converter<string>::Ptr emotionStateConverter(new rsb::converter::ProtocolBufferConverter<rst::animation::EmotionExpression>());
|
|
61 | 58 |
rsb::converter::converterRepository<string>()->registerConverter(emotionStateConverter); |
62 | 59 |
|
63 | 60 |
//converter for Utterance |
... | ... | |
65 | 62 |
//rsb::converter::converterRepository<string>()->registerConverter(UtteranceConverter); |
66 | 63 |
|
67 | 64 |
//converter for GazeTarget |
68 |
rsb::converter::Converter<string>::Ptr gazeTargetConverter(new rsb::converter::ProtocolBufferConverter<rst::robot::GazeTarget>());
|
|
65 |
rsb::converter::Converter<string>::Ptr gazeTargetConverter(new rsb::converter::ProtocolBufferConverter<rst::animation::BinocularHeadGaze>());
|
|
69 | 66 |
rsb::converter::converterRepository<string>()->registerConverter(gazeTargetConverter); |
70 | 67 |
|
71 | 68 |
//converter for MouthTarget |
72 |
rsb::converter::Converter<string>::Ptr mouthTargetConverter(new rsb::converter::ProtocolBufferConverter<rst::robot::MouthTarget>()); |
|
73 |
rsb::converter::converterRepository<string>()->registerConverter(mouthTargetConverter); |
|
69 |
///rsb::converter::Converter<string>::Ptr mouthTargetConverter(new rsb::converter::ProtocolBufferConverter<rst::robot::MouthTarget>());
|
|
70 |
///rsb::converter::converterRepository<string>()->registerConverter(mouthTargetConverter);
|
|
74 | 71 |
|
75 | 72 |
|
76 | 73 |
//converter for Animation |
77 |
rsb::converter::Converter<string>::Ptr animationConverter(new rsb::converter::ProtocolBufferConverter<rst::robot::Animation>());
|
|
74 |
rsb::converter::Converter<string>::Ptr animationConverter(new rsb::converter::ProtocolBufferConverter<rst::animation::HeadAnimation>());
|
|
78 | 75 |
rsb::converter::converterRepository<string>()->registerConverter(animationConverter); |
79 | 76 |
|
80 | 77 |
}catch(std::invalid_argument e){ |
... | ... | |
93 | 90 |
} |
94 | 91 |
|
95 | 92 |
void MiddlewareRSB::publish_emotion(string scope_target, RobotEmotion e, bool blocking){ |
96 |
boost::shared_ptr<rst::robot::EmotionState> request(new rst::robot::EmotionState());
|
|
93 |
boost::shared_ptr<rst::animation::EmotionExpression> request(new rst::animation::EmotionExpression());
|
|
97 | 94 |
|
98 | 95 |
switch(e.value){ |
99 | 96 |
default: |
100 | 97 |
printf("> WANRING: invalid emotion id %d. defaulting to NEUTRAL\n",e.value); |
101 | 98 |
//fall through: |
102 | 99 |
case(RobotEmotion::NEUTRAL): |
103 |
request->set_value(rst::robot::EmotionState::NEUTRAL);
|
|
100 |
request->set_emotion(rst::animation::EmotionExpression::NEUTRAL);
|
|
104 | 101 |
break; |
105 | 102 |
case(RobotEmotion::HAPPY): |
106 |
request->set_value(rst::robot::EmotionState::HAPPY);
|
|
103 |
request->set_emotion(rst::animation::EmotionExpression::HAPPY);
|
|
107 | 104 |
break; |
108 | 105 |
case(RobotEmotion::SAD): |
109 |
request->set_value(rst::robot::EmotionState::SAD);
|
|
106 |
request->set_emotion(rst::animation::EmotionExpression::SAD);
|
|
110 | 107 |
break; |
111 | 108 |
case(RobotEmotion::ANGRY): |
112 |
request->set_value(rst::robot::EmotionState::ANGRY);
|
|
109 |
request->set_emotion(rst::animation::EmotionExpression::ANGRY);
|
|
113 | 110 |
break; |
114 | 111 |
case(RobotEmotion::SURPRISED): |
115 |
request->set_value(rst::robot::EmotionState::SURPRISED);
|
|
112 |
request->set_emotion(rst::animation::EmotionExpression::SURPRISED);
|
|
116 | 113 |
break; |
117 | 114 |
case(RobotEmotion::FEAR): |
118 |
request->set_value(rst::robot::EmotionState::FEAR);
|
|
115 |
request->set_emotion(rst::animation::EmotionExpression::FEAR);
|
|
119 | 116 |
break; |
120 | 117 |
} |
121 | 118 |
|
122 | 119 |
request->set_duration(e.time_ms); |
123 | 120 |
|
124 | 121 |
if (blocking){ |
125 |
hlrc_server->call<rst::robot::EmotionState>(scope_target, request);
|
|
122 |
hlrc_server->call<rst::animation::EmotionExpression>(scope_target, request);
|
|
126 | 123 |
}else{ |
127 |
hlrc_server->callAsync<rst::robot::EmotionState>(scope_target, request);
|
|
124 |
hlrc_server->callAsync<rst::animation::EmotionExpression>(scope_target, request);
|
|
128 | 125 |
} |
129 | 126 |
} |
130 | 127 |
|
... | ... | |
137 | 134 |
publish_emotion("defaultEmotion", e, blocking); |
138 | 135 |
} |
139 | 136 |
|
140 |
void MiddlewareRSB::publish_gaze_target(RobotGaze target, bool blocking){ |
|
141 |
boost::shared_ptr<rst::robot::GazeTarget> request(new rst::robot::GazeTarget()); |
|
137 |
void MiddlewareRSB::publish_gaze_target(RobotGaze incoming_target, bool blocking){ |
|
138 |
boost::shared_ptr<rst::animation::BinocularHeadGaze> request(new rst::animation::BinocularHeadGaze ()); |
|
139 |
|
|
140 |
boost::shared_ptr<rst::geometry::SphericalDirectionFloat> target(new rst::geometry::SphericalDirectionFloat ()); |
|
141 |
target->set_azimuth(incoming_target.pan); |
|
142 |
target->set_elevation(incoming_target.tilt); |
|
143 |
request->set_allocated_target(target.get()); |
|
142 | 144 |
|
143 |
request->set_pan(target.pan);
|
|
144 |
request->set_tilt(target.tilt); |
|
145 |
request->set_roll(target.roll);
|
|
146 |
request->set_vergence(target.vergence);
|
|
147 |
request->set_pan_offset(target.pan_offset);
|
|
148 |
request->set_tilt_offset(target.tilt_offset);
|
|
145 |
request->set_eye_vergence(incoming_target.vergence);
|
|
146 |
|
|
147 |
boost::shared_ptr<rst::geometry::SphericalDirectionFloat> offset(new rst::geometry::SphericalDirectionFloat());
|
|
148 |
offset->set_azimuth(incoming_target.pan_offset);
|
|
149 |
offset->set_elevation(incoming_target.tilt_offset);
|
|
150 |
request->set_allocated_offset(offset.get());
|
|
149 | 151 |
|
150 | 152 |
if (blocking){ |
151 |
hlrc_server->call<rst::robot::GazeTarget>("gaze", request);
|
|
153 |
hlrc_server->call<rst::animation::BinocularHeadGaze >("gaze", request);
|
|
152 | 154 |
}else{ |
153 |
hlrc_server->callAsync<rst::robot::GazeTarget>("gaze", request);
|
|
155 |
hlrc_server->callAsync<rst::animation::BinocularHeadGaze >("gaze", request);
|
|
154 | 156 |
} |
155 | 157 |
} |
156 | 158 |
|
157 | 159 |
void MiddlewareRSB::publish_mouth_target(RobotMouth target, bool blocking){ |
160 |
/* |
|
158 | 161 |
boost::shared_ptr<rst::robot::MouthTarget> request(new rst::robot::MouthTarget()); |
159 | 162 |
|
160 | 163 |
request->set_position_left( target.position_left); |
... | ... | |
170 | 173 |
}else{ |
171 | 174 |
hlrc_server->callAsync<rst::robot::MouthTarget>("mouth", request); |
172 | 175 |
} |
176 |
*/ |
|
177 |
printf("> ERROR: mouth targets not yet implemented in RSB middleware!\n"); |
|
173 | 178 |
} |
174 | 179 |
|
175 | 180 |
void MiddlewareRSB::publish_head_animation(RobotHeadAnimation a, bool blocking){ |
176 |
boost::shared_ptr<rst::robot::Animation> request(new rst::robot::Animation());
|
|
181 |
boost::shared_ptr<rst::animation::HeadAnimation> request(new rst::animation::HeadAnimation());
|
|
177 | 182 |
|
178 | 183 |
switch(a.value){ |
179 | 184 |
default: |
180 | 185 |
printf("> WANRING: invalid animation id %d. defaulting to IDLE",a.value); |
181 | 186 |
//fall through: |
182 | 187 |
case(RobotHeadAnimation::IDLE): |
183 |
request->set_target(rst::robot::Animation::IDLE);
|
|
188 |
request->set_animation(rst::animation::HeadAnimation::IDLE);
|
|
184 | 189 |
break; |
185 | 190 |
case(RobotHeadAnimation::HEAD_NOD): |
186 |
request->set_target(rst::robot::Animation::HEAD_NOD);
|
|
191 |
request->set_animation(rst::animation::HeadAnimation::HEAD_NOD);
|
|
187 | 192 |
break; |
188 | 193 |
case(RobotHeadAnimation::HEAD_SHAKE): |
189 |
request->set_target(rst::robot::Animation::HEAD_SHAKE);
|
|
194 |
request->set_animation(rst::animation::HeadAnimation::HEAD_SHAKE);
|
|
190 | 195 |
break; |
191 | 196 |
case(RobotHeadAnimation::EYEBLINK_L): |
192 |
request->set_target(rst::robot::Animation::EYEBLINK_L);
|
|
197 |
request->set_animation(rst::animation::HeadAnimation::EYEBLINK_LEFT);
|
|
193 | 198 |
break; |
194 | 199 |
case(RobotHeadAnimation::EYEBLINK_R): |
195 |
request->set_target(rst::robot::Animation::EYEBLINK_R);
|
|
200 |
request->set_animation(rst::animation::HeadAnimation::EYEBLINK_RIGHT);
|
|
196 | 201 |
break; |
197 | 202 |
case(RobotHeadAnimation::EYEBLINK_BOTH): |
198 |
request->set_target(rst::robot::Animation::EYEBLINK_BOTH);
|
|
203 |
request->set_animation(rst::animation::HeadAnimation::EYEBLINK_BOTH);
|
|
199 | 204 |
break; |
200 | 205 |
case(RobotHeadAnimation::EYEBROWS_RAISE): |
201 |
request->set_target(rst::robot::Animation::EYEBROWS_RAISE);
|
|
206 |
request->set_animation(rst::animation::HeadAnimation::EYEBROWS_RAISE);
|
|
202 | 207 |
break; |
203 | 208 |
case(RobotHeadAnimation::EYEBROWS_LOWER): |
204 |
request->set_target(rst::robot::Animation::EYEBROWS_LOWER); |
|
209 |
request->set_animation(rst::animation::HeadAnimation::EYEBROWS_LOWER); |
|
210 |
break; |
|
211 |
case(RobotHeadAnimation::ENGAGEMENT_LEFT): |
|
212 |
request->set_animation(rst::animation::HeadAnimation::ENGAGEMENT_LEFT); |
|
213 |
break; |
|
214 |
case(RobotHeadAnimation::ENGAGEMENT_RIGHT): |
|
215 |
request->set_animation(rst::animation::HeadAnimation::ENGAGEMENT_RIGHT); |
|
205 | 216 |
break; |
206 | 217 |
} |
207 | 218 |
|
208 | 219 |
request->set_repetitions(a.repetitions); |
209 |
request->set_scale(a.scale); |
|
220 |
request->set_emphasis_scale(a.scale);
|
|
210 | 221 |
request->set_duration_each(a.time_ms); |
211 | 222 |
|
212 | 223 |
if (blocking){ |
213 |
hlrc_server->call<rst::robot::Animation>("animation", request);
|
|
224 |
hlrc_server->call<rst::animation::HeadAnimation>("animation", request);
|
|
214 | 225 |
}else{ |
215 |
hlrc_server->callAsync<rst::robot::Animation>("animation", request);
|
|
226 |
hlrc_server->callAsync<rst::animation::HeadAnimation>("animation", request);
|
|
216 | 227 |
} |
217 | 228 |
} |
218 | 229 |
|
Also available in: Unified diff