@@ -120,6 +120,8 @@ def send(self, result_callback=None, timeout=None):
120120 if result_callback :
121121 self .on ('result' , result_callback )
122122
123+ self .status = {'status' : GoalStatus .PENDING }
124+
123125 self .action_client .goal_topic .publish (self .goal_message )
124126 if timeout :
125127 self .action_client .ros .call_later (timeout , self ._trigger_timeout )
@@ -150,22 +152,32 @@ def _trigger_timeout(self):
150152
151153 def _set_status (self , status ):
152154 self .status = status
155+ if self .is_finished :
156+ self .wait_result .set ()
153157
154158 def _set_result (self , result ):
155159 self .result = result
156- self .wait_result .set ()
160+ if self .is_finished :
161+ self .wait_result .set ()
157162
158163 def _set_feedback (self , feedback ):
159164 self .feedback = feedback
160165
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+
161173 @property
162174 def is_finished (self ):
163175 """Indicate if the goal is finished or not.
164176
165177 Returns:
166178 bool: True if finished, False otherwise.
167179 """
168- return self .result is not None
180+ return self .result is not None and not self . is_active
169181
170182
171183class ActionClient (EventEmitterMixin ):
@@ -236,15 +248,13 @@ def _on_feedback_message(self, message):
236248 goal = self .goals .get (goal_id , None )
237249
238250 if goal :
239- goal .emit ('status' , message ['status' ])
240251 goal .emit ('feedback' , message ['feedback' ])
241252
242253 def _on_result_message (self , message ):
243254 goal_id = message ['status' ]['goal_id' ]['id' ]
244255 goal = self .goals .get (goal_id , None )
245256
246257 if goal :
247- goal .emit ('status' , message ['status' ])
248258 goal .emit ('result' , message ['result' ])
249259
250260 def add_goal (self , goal ):
0 commit comments