This is a bug with pytf that is being fixed, but requires enough code to be more than a quick fix. The pytf code is based on a roscpp-based codebase and has issues with simulated time when running in rospy, which is not roscpp-based. So, pytf does not work with simulated time. - Ken On Mon, Aug 23, 2010 at 10:07 PM, Travis Deyle wrote: > I have a vexing "bug."  Perhaps someone can clarify.  For reference, I'm > using cturtle binaries, running "rosbag play --clock mybagfile.bag" and have > set /use_sim_time to true in both my python code and using rosparam. > > Basically, when I try to wait for a transform, this works: > >             rospy.logout( 'Time read: %d.%d' % ( mymsg.header.stamp.secs, > mymsg.header.stamp.nsecs )) >             now = rospy.Time.now() >             rospy.logout( 'Rospy Now: %d.%d' % ( now.secs, now.nsecs )) >             self.tf_listener.waitForTransform( frame, '/map', >                                                rospy.Time(), >                                                timeout = rospy.Duration(0.1) > ) > > > Whereas this fails: > >             rospy.logout( 'Time read: %d.%d' % ( mymsg.header.stamp.secs, > mymsg.header.stamp.nsecs )) >             now = rospy.Time.now() >             rospy.logout( 'Rospy Now: %d.%d' % ( now.secs, now.nsecs )) >             self.tf_listener.waitForTransform( frame, '/map', >                                                mymsg.header.stamp, >                                                timeout = rospy.Duration(0.1) > ) > > This also fails: > >             rospy.logout( 'Time read: %d.%d' % ( mymsg.header.stamp.secs, > mymsg.header.stamp.nsecs )) >             now = rospy.Time.now() >             rospy.logout( 'Rospy Now: %d.%d' % ( now.secs, now.nsecs )) >             self.tf_listener.waitForTransform( frame, '/map', >                                                rospy.Time.now(), >                                                timeout = rospy.Duration(0.1) > ) > > The only (subtle) difference is that the "working" version is waiting for > the transform at Time 0.0, which just gets the latest available transform, > but both mymsg.header.stamp and rospy.Time.now() fail with the following > exception message: > > [INFO] 1282625415.289159: PF: Awaiting necessary tf transforms. > [INFO] 1282625417.263204: PF: All tf transforms ready. # Using rospy.Time(0) > [INFO] 1282625417.318107: PF: Starting particle filter! > [INFO] 1282625418.667938: Time read: 1282347068.759572982 > [INFO] 1282625418.668339: Rospy Now: 1282347068.760468681 > [INFO] 1282625418.769964: PF: tf unavailable.  Skipping read (1). > You requested a transform that is 278350010.097 miliseconds in the past, > but the most recent transform in the tf buffer is 278350024.236 miliseconds > old. > > > > You'll notice that the roscore time from logout is the (correct) simtime. > Using "rosrun tf view_frames" also shows that the frames are 278350010ish > milliseconds old.  The /clock message is being (correctly) published by the > bag file... > > Is this somehow "expected" behavior, or is there a bug in tf that prevents > the use of simtime? > > > > ~Travis Deyle > PhD student @ Georgia Tech's Healthcare Robotics Lab > Co-Founder www.Hizook.com -- Robotics News for Academics & Professionals > > _______________________________________________ > ros-users mailing list > ros-users@code.ros.org > https://code.ros.org/mailman/listinfo/ros-users > >