Python 改进在特定时间后杀死节点的方法

Python 改进在特定时间后杀死节点的方法,python,ubuntu-16.04,ros,Python,Ubuntu 16.04,Ros,我正在向特定主题发布消息,需要在设定的时间后停止。发布过程由循环组成,循环不断地向主题发送信息 这是我需要在用户输入给定的特定时间后停止的循环 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

我正在向特定主题发布消息,需要在设定的时间后停止。发布过程由循环组成,循环不断地向主题发送信息

这是我需要在用户输入给定的特定时间后停止的循环

  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。然后将计数器与时间进行比较,如果两者的值相同,我将使用以下方法结束循环:

if counter >= time:
        break

有没有办法通过使用任何其他功能来改善这一点?

您可以尝试rospy
Timer
类在特定时间段内发布某个主题。它允许在特定时间触发事件

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()

了解有关如何使用计时器的更多信息。

有许多方法可以解决此问题,尤其是在这种情况下,“用户输入”非常模糊。您能发布您迄今为止尝试过的内容吗?
如果当前时间>初始时间+最大持续时间:中断