ROS中怎样在循环中使用rate.sleep()?
时间: 2024-11-15 14:33:51 浏览: 36
在ROS(Robot Operating System)中,`rate.sleep()`函数用于控制节点的更新速率。当你在一个无限循环中,比如`while True:`,想要让节点按照特定频率(Hz)运行时,可以这样做:
```python
import rclpy
from rclpy.time import Time
from rclpy.node import Node
class MyNode(Node):
def __init__(self):
super().__init__("my_node")
self.rate = rclpy.Rate(10) # 设置每秒10次循环
def spin(self):
while rclpy.ok():
# 这里是你需要执行的循环体操作
self.get_logger().info("Running at 10 Hz")
# 使用rate.sleep()暂停当前循环,直到接近下一次预定的时间点
self.rate.sleep()
# 在这里添加你需要定时执行的任务...
# 初始化并启动节点
rclpy.init(args=None)
node = MyNode()
node.spin()
rclpy.shutdown()
```
在这个例子中,`spin()`方法会进入一个无限循环,在每次循环内执行你的操作,并通过`rate.sleep()`使循环暂停,直到到达下一个预定的时间点。这有助于保持任务之间的同步,尤其是在处理传感器数据或其他需要定期刷新的操作时。
阅读全文