0

假设我有以下内容:

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

以上是否保证True每次都打印?

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

4

1 回答 1

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,但这不能保证,因为:

  • 客户可能已经PREEMPTED, ABORTED, ... 之前
  • ROS 不是确定性的,这意味着理论上客户端可以在调用之间cancel_all_goalsget_status由于线程切换而被取消。
于 2017-12-27T11:40:18.223 回答