def METHOD_NAME():
    rclpy.init(args=sys.argv)
    args_without_ros = rclpy.utilities.remove_ros_args(sys.argv)
    parser = argparse.ArgumentParser(
        description='Create a diagram of the TF frames being broadcast over ROS')
    parser.add_argument(
        '--wait-time', '-t', type=float, default=5.0,
        help='Listen to the /tf topic for this many seconds before rendering the frame tree')
    parser.add_argument('-o','--output', help='Output filename')
    parsed_args = parser.parse_args(args=args_without_ros[1:])
    node = rclpy.create_node('view_frames')
    buf = tf2_ros.Buffer(node=node)
    listener = tf2_ros.TransformListener(buf, node, spin_thread=False)
    executor = rclpy.executors.SingleThreadedExecutor()
    executor.add_node(node)
    # listen to tf for 5 seconds
    node.get_logger().info(f'Listening to tf data for {parsed_args.wait_time} seconds...')
    start_time = time.time()
    while (time.time() - start_time) < parsed_args.wait_time:
        rclpy.spin_once(node, timeout_sec=0.1)
    node.get_logger().info('Generating graph in frames.pdf file...')
    cli = node.create_client(FrameGraph, 'tf2_frames')
    req = FrameGraph.Request()
    while not cli.wait_for_service(timeout_sec=1.0):
        node.get_logger().info('service not available, waiting again...')
    future = cli.call_async(req)
    rclpy.spin_until_future_complete(node, future)
    ret = 1
    try:
        result = future.result()
        ret = 0
    except Exception as e:
        node.get_logger().error('Service call failed %r' % (e,))
    else:
        node.get_logger().info(
            'Result:'+ str(result) )
        data = yaml.safe_load(result.frame_yaml)
        if parsed_args.output is not None:
            frames_gv = '{:s}.gv'.format(parsed_args.output)
            frames_pdf = '{:s}.pdf'.format(parsed_args.output)
        else:
            datetime = time.strftime('%Y-%m-%d_%H.%M.%S')
            frames_gv = 'frames_{:s}.gv'.format(datetime)
            frames_pdf = 'frames_{:s}.pdf'.format(datetime)
        with open(frames_gv, 'w') as f:
            f.write(generate_dot(data, node.get_clock().now().seconds_nanoseconds()))
        cmd = ['dot', '-Tpdf', frames_gv, '-o', frames_pdf]
        subprocess.Popen(cmd).communicate()
    finally:
        cli.destroy()
        node.destroy_node()
        rclpy.shutdown()
        return ret