[ros-users] Timers in rospy?

Patrick Bouffard bouffard at eecs.berkeley.edu
Wed Feb 2 23:41:16 UTC 2011


Tim,

Thanks, I was in need of just the same thing today and glad that I
remembered this thread. One thing though, the 2nd line in the
Timer.run() method needs to be changed:

FROM:
        current_expected = rospy.Time.now()
TO:
        current_expected = rospy.Time.now() + self._duration

(the timer's actual operation isn't affected but the 'error' output
from the test program is wrong without the change)

Also I'm wondering why you use time.time() rather than
rospy.Time.now() in a couple places?

Cheers,
Pat

P.S. What's the etiquette on using someone's code from a mailing list
posting in one's own BSD-licensed project? :) Some form of attribution
of course, but is it okay to slap a BSD license header on a source
file containing said code? Is it okay if it says (c) 2011 UC Regents
just like all my other headers?

On Thu, Jan 20, 2011 at 5:24 PM, Tim Field <tfield at willowgarage.com> wrote:
> Advait,
> Not that I know of.  Here's an example using a similar API to roscpp though:
>
> #!/usr/bin/env python
>
>
> import roslib; roslib.load_manifest('rospy')
> import rospy, threading, time
> class TimerEvent(object):
>     def __init__(self, last_expected, last_real, current_expected,
> current_real, last_duration):
>         self.last_expected    = last_expected
>         self.last_real        = last_real
>         self.current_expected = current_expected
>         self.current_real     = current_real
>         self.last_duration    = last_duration
> class Timer(threading.Thread):
>     def __init__(self, duration, callback, oneshot=False):
>         threading.Thread.__init__(self)
>         self._duration = duration
>         self._callback = callback
>         self._oneshot  = oneshot
>         self.setDaemon(True)
>         self.start()
>     def run(self):
>         r = rospy.Rate(1.0 / self._duration.to_sec())
>         current_expected = rospy.Time.now()
>         last_expected, last_real, last_duration = None, None, None
>         while not rospy.is_shutdown():
>             r.sleep()
>             current_real = rospy.Time.now()
>             start = time.time()
>             self._callback(TimerEvent(last_expected, last_real,
> current_expected, current_real, last_duration))
>             if self._oneshot:
>                 break
>             last_duration = time.time() - start
>             last_expected, last_real = current_expected, current_real
>             current_expected += self._duration
> if __name__ == '__main__':
>     import time
>     rospy.init_node('test')
>     def callback(event):
>         print 'last_expected:        ', event.last_expected
>         print 'last_real:            ', event.last_real
>         print 'current_expected:     ', event.current_expected
>         print 'current_real:         ', event.current_real
>         print 'current_error:        ', (event.current_real -
> event.current_expected).to_sec()
>         print 'profile.last_duration:', event.last_duration
>         if event.last_real:
>             print 'last_error:           ', (event.last_real -
> event.last_expected).to_sec(), 'secs'
>         print
>     Timer(rospy.Duration(2), callback)
>     time.sleep(5)
>
> On Thu, Jan 20, 2011 at 4:59 PM, Advait Jain <advait at cc.gatech.edu> wrote:
>>
>> Is there some similar to Timers
>> (http://www.ros.org/wiki/roscpp/Overview/Timers) in rospy?
>>
>> Thanks,
>> Advait
>> _______________________________________________
>> ros-users mailing list
>> ros-users at code.ros.org
>> https://code.ros.org/mailman/listinfo/ros-users
>
>
> _______________________________________________
> ros-users mailing list
> ros-users at code.ros.org
> https://code.ros.org/mailman/listinfo/ros-users
>
>



More information about the ros-users mailing list