改进在特定时间后杀死节点的方式
Improve the way of killing a node after an specific amount of time
我正在向特定主题发布消息,我需要它在一定数量后停止 time.The 发布过程包括不断向主题发送信息的循环。
这是我需要在用户输入指定的特定时间后停止的循环。
while not rospy.is_shutdown():
movement_cmd.linear.x = 0
movement_cmd.linear.y = 0
movement_cmd.linear.z = 0
movement_cmd.angular.x = 0
movement_cmd.angular.y = 0
movement_cmd.angular.z = 0
rospy.logdebug("Publishing")
movement_publisher.publish(movement_cmd)
rate.sleep()
编辑:
这是用户输入
time = float(sys.argv[2])
例如,如果 time = 2.5 那么循环应该发布 2.5 秒,之后它应该停止并且代码结束。
一段时间后,我通过将发布频率设置为 20hz 设法停止了循环。这意味着它将每 0.05 秒发布一次,因此我添加了一个名为 counter 的变量,每次循环发布时它都会将 +0.05 添加到 counter variable.Then counter 与 time 进行比较,如果两者具有相同的值,我将使用以下方式结束循环:
if counter >= time:
break
有没有办法通过使用任何其他函数来改进它?
你可以试试rospy Timer
class 在某个话题上发表一段时间。它允许在特定时间触发事件。
def stop_callback(event):
rospy.signal_shutdown("Just stopping publishing...")
time = float(sys.argv[2])
rospy.Timer(rospy.Duration(time), stop_callback)
while not rospy.is_shutdown():
movement_cmd.linear.x = 0
movement_cmd.linear.y = 0
movement_cmd.linear.z = 0
movement_cmd.angular.x = 0
movement_cmd.angular.y = 0
movement_cmd.angular.z = 0
rospy.logdebug("Publishing")
movement_publisher.publish(movement_cmd)
rate.sleep()
从 here.
了解有关如何使用 Timer
class 的更多信息
我正在向特定主题发布消息,我需要它在一定数量后停止 time.The 发布过程包括不断向主题发送信息的循环。
这是我需要在用户输入指定的特定时间后停止的循环。
while not rospy.is_shutdown():
movement_cmd.linear.x = 0
movement_cmd.linear.y = 0
movement_cmd.linear.z = 0
movement_cmd.angular.x = 0
movement_cmd.angular.y = 0
movement_cmd.angular.z = 0
rospy.logdebug("Publishing")
movement_publisher.publish(movement_cmd)
rate.sleep()
编辑:
这是用户输入
time = float(sys.argv[2])
例如,如果 time = 2.5 那么循环应该发布 2.5 秒,之后它应该停止并且代码结束。
一段时间后,我通过将发布频率设置为 20hz 设法停止了循环。这意味着它将每 0.05 秒发布一次,因此我添加了一个名为 counter 的变量,每次循环发布时它都会将 +0.05 添加到 counter variable.Then counter 与 time 进行比较,如果两者具有相同的值,我将使用以下方式结束循环:
if counter >= time:
break
有没有办法通过使用任何其他函数来改进它?
你可以试试rospy Timer
class 在某个话题上发表一段时间。它允许在特定时间触发事件。
def stop_callback(event):
rospy.signal_shutdown("Just stopping publishing...")
time = float(sys.argv[2])
rospy.Timer(rospy.Duration(time), stop_callback)
while not rospy.is_shutdown():
movement_cmd.linear.x = 0
movement_cmd.linear.y = 0
movement_cmd.linear.z = 0
movement_cmd.angular.x = 0
movement_cmd.angular.y = 0
movement_cmd.angular.z = 0
rospy.logdebug("Publishing")
movement_publisher.publish(movement_cmd)
rate.sleep()
从 here.
了解有关如何使用Timer
class 的更多信息