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()
了解有关如何使用计时器的更多信息。有许多方法可以解决此问题,尤其是在这种情况下,“用户输入”非常模糊。您能发布您迄今为止尝试过的内容吗?
如果当前时间>初始时间+最大持续时间:中断
?