我正在将消息发布到特定主题,并且我需要它在设置的时间后停止。发布过程由循环组成,该循环不断向该主题发送信息。
这是我需要在用户输入指定的时间后停止的循环。
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 的变量,并且每次循环发布时,它都会向 counter 变量添加+0.05。 与 time 进行比较,如果两者的值相同,则我使用以下命令结束循环:
if counter >= time:
break
是否可以通过使用其他任何功能来改善此问题?
答案 0 :(得分:2)
您可以尝试使用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()
从here了解有关如何使用Timer
类的更多信息。