actionlib.SimpleActionClient.cancel_all_goals会阻塞直到完成吗?

时间:2017-12-27 09:24:34

标签: ros rospy

假设我有以下内容:

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

上述保证每次都打印True吗?

换句话说,SimpleActionClient.cancel_all_goals()在返回之前取消所有目标,还是仅发送指令 取消目标而不等待真正的目标?

1 个答案:

答案 0 :(得分:0)

action_client.cancel_all_goals() 只需发送取消目标的指示,而无需等待

由于该方法的文档不是很有用,您需要查看action_client.haction_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,但无法保证,因为:

  • 客户可能已经PREEMPTEDABORTED,......之前
  • ROS不具有确定性,这意味着理论上,由于线程切换,客户端可以在cancel_all_goalsget_status的调用之间取消