@@ -120,6 +120,8 @@ def send(self, result_callback=None, timeout=None):
120
120
if result_callback :
121
121
self .on ('result' , result_callback )
122
122
123
+ self .status = {'status' : GoalStatus .PENDING }
124
+
123
125
self .action_client .goal_topic .publish (self .goal_message )
124
126
if timeout :
125
127
self .action_client .ros .call_later (timeout , self ._trigger_timeout )
@@ -150,22 +152,32 @@ def _trigger_timeout(self):
150
152
151
153
def _set_status (self , status ):
152
154
self .status = status
155
+ if self .is_finished :
156
+ self .wait_result .set ()
153
157
154
158
def _set_result (self , result ):
155
159
self .result = result
156
- self .wait_result .set ()
160
+ if self .is_finished :
161
+ self .wait_result .set ()
157
162
158
163
def _set_feedback (self , feedback ):
159
164
self .feedback = feedback
160
165
166
+ @property
167
+ def is_active (self ):
168
+ if self .status is None :
169
+ return False
170
+ return (self .status ['status' ] == GoalStatus .ACTIVE or
171
+ self .status ['status' ] == GoalStatus .PENDING )
172
+
161
173
@property
162
174
def is_finished (self ):
163
175
"""Indicate if the goal is finished or not.
164
176
165
177
Returns:
166
178
bool: True if finished, False otherwise.
167
179
"""
168
- return self .result is not None
180
+ return self .result is not None and not self . is_active
169
181
170
182
171
183
class ActionClient (EventEmitterMixin ):
@@ -236,15 +248,13 @@ def _on_feedback_message(self, message):
236
248
goal = self .goals .get (goal_id , None )
237
249
238
250
if goal :
239
- goal .emit ('status' , message ['status' ])
240
251
goal .emit ('feedback' , message ['feedback' ])
241
252
242
253
def _on_result_message (self , message ):
243
254
goal_id = message ['status' ]['goal_id' ]['id' ]
244
255
goal = self .goals .get (goal_id , None )
245
256
246
257
if goal :
247
- goal .emit ('status' , message ['status' ])
248
258
goal .emit ('result' , message ['result' ])
249
259
250
260
def add_goal (self , goal ):
0 commit comments