我已经写了一些代码来让turtlebot掉头。代码正在运行。我想知道的是turtlebot跑得有多快以及我如何控制它。例如,我如何确保turtlebot在一分钟内旋转5度? 问题的最后部分。按下Ctrl-C后,turtlebot停止,但脚本仍在运行。为什么?我怎样才能阻止它
this post没有真正的帮助
通过了this post。这是否意味着下面的while循环每秒运行5次,而不管我在中为循环输入的值是多少?或者,这是否意味着ROS尽最大努力确保循环每秒运行5次,以达到我的机器的最大能力? 多谢各位
# 5 HZ
angle = 5
r = rospy.Rate(5);
while not rospy.is_shutdown():
# code to turn
for x in range(0,100):
rospy.loginfo("turn")
turn_cmd.angular.z = radians(angle)
new_angle = (angle + new_angle) % 360
self.cmd_vel.publish(turn_cmd)
r.sleep()
# code to pause
for x in range(0,100):
rospy.loginfo("stop")
turn_cmd.angular.z = radians(0)
self.cmd_vel.publish(turn_cmd)
r.sleep()
def shutdown(self):
# stop turtlebot
rospy.loginfo("Stop turning")
self.cmd_vel.publish(Twist())
rospy.sleep(1)
根据ROS Wiki,
rospy.Rate
便利类通过考虑自上次成功r.sleep()
以来循环的执行时间,尽最大努力保持循环以指定的频率运行。这意味着在您的情况下:只要循环中的代码执行时间不超过1/5秒,rospy.Rate
将确保循环以5Hz的频率运行关于按Ctrl-C时脚本未停止: ^使用}的处理方式将不同于普通Python脚本中的处理方式。
KeyboardInterrupt
时,{rospy
捕获KeyboardInterrupt
信号以将rospy.is_shutdown()
标志设置为true。此标志仅在每个循环结束时检查,因此,如果在for循环执行期间按Ctrl-C,则无法停止脚本,因为不会立即检查该标志发出节点关闭信号的手动方法是使用
rospy.signal_shutdown()
。为此,初始化ROS节点时需要将disable_signals
选项设置为true(参见第2.3节here)。请注意,您还必须手动调用正确的关机例程,以确保正确的清理相关问题 更多 >
编程相关推荐