Source code for rocon_python_comms.wall_rate
#
# License: BSD
# https://raw.github.com/robotics-in-concert/rocon_tools/license/LICENSE
#
##############################################################################
# Description
##############################################################################
"""
.. module:: wall_rate
:platform: Unix
:synopsis: Wall time rate class.
This module provides a wall time rate class (missing in rospy).
----
"""
##############################################################################
# Imports
##############################################################################
import rospy
import time
##############################################################################
# Wall Rate (Uses system time, independent of ros /clock)
##############################################################################
[docs]class WallRate():
"""
A wall time implementation of ros' rospy.time.Rate class.
Usage:
.. code-block:: python
from rocon_python_comms import WallRate
rate = WallRate(10) # 10Hz = 0.1s period
while True:
# do something
rate.sleep()
"""
[docs] def __init__(self, rate):
'''
:param float rate: rate in hertz, if rate = 0, then won't sleep
'''
self.rate = rate
self.period = 1.0 / rate if rate > 0.0 else 0.0
self.recorded_time = time.time()
[docs] def sleep(self):
"""
Sleep until the rate period is exceeded.
"""
current_time = time.time()
elapsed = current_time - self.recorded_time
if self.period - elapsed > 0:
rospy.rostime.wallsleep(self.period - elapsed)
self.recorded_time = time.time()