Hi there,
I'm new to ROS and am working through all the tutorials. Right now, I'm working on the tf2 package's tutorials; however, I'm getting stuck on writing a tf2 listener (see: http://wiki.ros.org/tf2/Tutorials/Writing%20a%20tf2%20listener%20%28Python%29).
I've written the following code to create a listener:
import rclpy
import tf2_ros
from rclpy.node import Node
from rclpy.qos import QoSProfile
class Subscriber(Node):
def __init__(self):
super().__init__('subscriber')
qos_profile = QoSProfile(depth=10)
self.buffer = tf2_ros.Buffer()
self.listener = tf2_ros.TransformListener(self, self.buffer)
self.timer = self.create_timer(0.5, self.timer_callback)
self.get_logger().info('Starting {}'.format(self.get_name()))
self.i = 0
return
def timer_callback(self):
try:
trans = self.buffer.lookup_transform('frame_1', 'frame_2', 0)
except Exception as e:
self.get_logger('Error')
self.get_logger().info('{}: Transform: {}'.format(self.i, trans))
self.i += 1
return
def main(args=None):
rclpy.init(args=args)
subscriber = Subscriber()
rclpy.spin(subscriber)
subscriber.destroy_node()
rclpy.shutdown()
return
if __name__ == "__main__":
main()
This is creating the following error:
Traceback (most recent call last):
File "/home/fknoble/dev_ws/install/learning_tf2/lib/learning_tf2/sub", line 11, in <module>
load_entry_point('learning-tf2==0.0.0', 'console_scripts', 'sub')()
File "/home/fknoble/dev_ws/install/learning_tf2/lib/python3.8/site-packages/learning_tf2/sub.py", line 39, in main
subscriber = Subscriber()
File "/home/fknoble/dev_ws/install/learning_tf2/lib/python3.8/site-packages/learning_tf2/sub.py", line 14, in __init__
self.listener = tf2_ros.TransformListener(self, self.buffer)
File "/opt/ros/foxy/lib/python3.8/site-packages/tf2_ros/transform_listener.py", line 72, in __init__
self.tf_sub = node.create_subscription(
AttributeError: 'Buffer' object has no attribute 'create_subscription'
Exception ignored in: <function TransformListener.__del__ at 0x7fc54bbe3160>
Traceback (most recent call last):
File "/opt/ros/foxy/lib/python3.8/site-packages/tf2_ros/transform_listener.py", line 93, in __del__
self.unregister()
File "/opt/ros/foxy/lib/python3.8/site-packages/tf2_ros/transform_listener.py", line 99, in unregister
self.node.destroy_subscription(self.tf_sub)
AttributeError: 'Buffer' object has no attribute 'destroy_subscription'
Because I'm new to this, I'm not sure if the issue is with my code or with the tf2_ros package. I should mention that the frames 'frame_1' and 'frame_2' are being broadcasted successfully (I can view them in RVIZ). Also, my ROS distro' is Foxy, I've installed it in Ubuntu 20.04, and I'm programming with Python 3.8.5.
Any advice would be greatly appreciated,
Frazer
Originally posted by FKNoble on ROS Answers with karma: 3 on 2020-12-14
Post score: 0