tf用法汇总和代码实战

2024-01-07 19:20:04

tf用法汇总和代码实战
#include <tf/tf.h>这个头文件有哪些主要的功能?
【从零开始学习SLAM】官方tf教程小海龟跟随程序
【从零开始学习SLAM】将坐标系变换关系发布到话题 tf_static
【从零开始学习SLAM】将坐标系变换关系发布到 topic tf
【从零开始学习SLAM】分解ros小海龟跟随代码

tf 是 ROS(Robot Operating System)中一个非常重要的包,用于处理多个坐标系之间的关系。它允许开发者跟踪随时间变化的坐标系,并在这些坐标系之间进行变换。以下是 tf 的两个主要用途:变换监听(Transform Listener)和变换广播(Transform Broadcaster)的示例。

1. 使用 tf 监听坐标变换(Transform Listener)

监听器(Listener)用于监听和查询两个坐标系之间的关系。

导入必要的模块
import rospy
import tf
创建监听者节点
def listener():
    rospy.init_node('tf_listener')
    listener = tf.TransformListener()
    rospy.sleep(2.0)  # 为tf缓冲填充数据留出时间

    while not rospy.is_shutdown():
        try:
            # 获取最近的变换
            (trans, rot) = listener.lookupTransform('/target_frame', '/source_frame', rospy.Time(0))
            rospy.loginfo("Translation: " + str(trans))
            rospy.loginfo("Rotation: " + str(rot))
        except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
            continue

2. 使用 tf 广播坐标变换(Transform Broadcaster)

广播器(Broadcaster)用于创建和发送坐标系之间的关系。

导入必要的模块
import rospy
import tf
from geometry_msgs.msg import TransformStamped
创建广播者节点
def broadcaster():
    rospy.init_node('tf_broadcaster')
    br = tf.TransformBroadcaster()
    rate = rospy.Rate(10.0)

    while not rospy.is_shutdown():
        # 创建变换
        t = TransformStamped()
        t.header.stamp = rospy.Time.now()
        t.header.frame_id = "source_frame"
        t.child_frame_id = "target_frame"
        t.transform.translation.x = 1.0
        t.transform.translation.y = 2.0
        t.transform.translation.z = 3.0
        t.transform.rotation.x = 0.0
        t.transform.rotation.y = 0.0
        t.transform.rotation.z = 0.0
        t.transform.rotation.w = 1.0

        # 发布变换
        br.sendTransform((t.transform.translation.x, t.transform.translation.y, t.transform.translation.z),
                         (t.transform.rotation.x, t.transform.rotation.y, t.transform.rotation.z, t.transform.rotation.w),
                         rospy.Time.now(),
                         t.child_frame_id,
                         t.header.frame_id)
        rate.sleep()

运行节点

  1. 将上述两段代码分别保存为 Python 脚本(例如 tf_listener.pytf_broadcaster.py)。

  2. 确保这些脚本在你的 ROS 工作空间中并且是可执行的。

  3. 分别使用 rosrun 运行这些节点:

    rosrun your_package_name tf_listener.py
    rosrun your_package_name tf_broadcaster.py
    

在这两个示例中,tf_broadcaster.py 创建并发送一个从 “source_frame” 到 “target_frame” 的坐标变换,而 tf_listener.py 则监听并查询这两个坐标系之间的变换。这些脚本在实际应用中可以用于多种场景,例如机器人臂的姿态跟踪、移动机器人的导航等。

文章来源:https://blog.csdn.net/qq_21950671/article/details/135428447
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。