2017-12-27 24 views
0

는 다음과 내가 가진 가정?actionlib.SimpleActionClient.cancel_all_goals가 완료 될 때까지 차단됩니까?</p> <pre><code>action_client.cancel_all_goals() print(action_client.get_status() != 'ACTIVE') </code></pre> <p>이 <code>True</code> 때마다 인쇄 보장 위인가 :

다시 말해서 SimpleActionClient.cancel_all_goals()은 모든 목표를 취소하기 전에 취소합니까, 아니면 목표를 실제로 취소 할 때까지 기다리지 않고 지침을 보냅니 까?

답변

0

action_client.cancel_all_goals()을 기다리지 않고 목표 취소 명령을 보냅니다.

메쏘드의 문서가별로 도움이되지 않으므로 action_client.h 또는 action_client.py을 찾으셔야합니다.

코드는 모든 목표를 취소하기 위해 간단한 메시지 (self.pub_cancel.publish(cancel_msg) 또는 self.pub_cancel.publish(cancel_msg)) 만 게시 함을 보여줍니다. 즉, 호출이 비동기이며 차단되지 않습니다.

이것은 코드 의미

action_client.cancel_all_goals() 
print(action_client.get_status() != 'ACTIVE') 

일반적으로 False를 인쇄하지만이 하지 보장 때문에 :

  • 는 클라이언트가 이미 PREEMPTED, ABORTED, 수 ...
  • 전 ROS는 결정적이지 않다. 이론적으로 클라이언트의 의미는 can can 쓰레드 스위치로 인해 cancel_all_goalsget_status 사이의 호출이 발생했습니다.
+0

답변의 마지막 부분을 참조하면 내 코드가 'True'를 인쇄하게하는 이유가 무엇입니까? 예 : 목표가 이미'PREEMPTED' 또는'ABORTED'라면 내 코드는'True'를 출력하지 않을까요? 또한,'cancel_all_goals'와'print' 사이에 모든 목표가 취소된다면, 내 코드는'True'를 인쇄하지 않을까요? – Flux

+0

당신은 @Flux가 맞습니다. 대답에 작은 실수가있었습니다. 나는'True'를'False'로 바꾸어서 그것을 바로 잡았습니다. – Fruchtzwerg