【ROS2】中级:tf2-添加框架(Python)

目标:学习如何向 tf2 添加额外的框架。

教程级别:中级

 时间:15 分钟

 目录

  •  背景

  •  tf2 树

  •  任务

    • 1 编写固定帧广播器

    • 1.1 检查代码

    • 1.2 添加入口点

    • 1.3 编写启动文件

    •  1.4 构建

    •  1.5 运行

    • 2 编写动态帧广播器

    • 2.1 检查代码

    • 2.2 添加入口点

    • 2.3 编写启动文件

    •  2.4 构建

    •  2.5 运行

  •  摘要

 背景

之前的教程中,我们通过编写 tf2 广播器和 tf2 监听器重新创建了乌龟演示。本教程将教您如何向变换树添加额外的固定和动态帧。事实上,在 tf2 中添加帧与创建 tf2 广播器非常相似,但本示例将向您展示 tf2 的一些附加功能

对于许多与变换相关的任务,在局部坐标系中思考更容易。例如,最容易在激光扫描仪中心的坐标系中推理激光扫描测量值。tf2 允许您为系统中的每个传感器、链接或关节定义一个局部坐标系。当从一个坐标系变换到另一个坐标系时,tf2 将处理所有引入的隐藏中间坐标系变换

20d2e6602c0a7633ba11f8c43593a749.png

 任务

1 编写固定帧广播器

在我们的乌龟示例中,我们将添加一个新的框架 carrot1 ,它将是 turtle1 的子框架。这个框架将作为第二只乌龟的目标。

首先创建源文件。进入我们在前面的教程中创建的 learning_tf2_py 包。在 src/learning_tf2_py/learning_tf2_py 目录中,通过输入以下命令下载固定帧广播代码:

cxy@ubuntu2404-cxy:~$ cd ~/ros2_ws/src/learning_tf2_py/learning_tf2_py
cxy@ubuntu2404-cxy:~/ros2_ws/src/learning_tf2_py/learning_tf2_py$ wget https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_py/turtle_tf2_py/fixed_frame_tf2_broadcaster.py

现在打开名为 fixed_frame_tf2_broadcaster.py 的文件。

from geometry_msgs.msg import TransformStamped  # 从 geometry_msgs.msg 导入 TransformStamped 消息类型


import rclpy  # 导入 rclpy 库
from rclpy.node import Node  # 从 rclpy.node 导入 Node 类


from tf2_ros import TransformBroadcaster  # 从 tf2_ros 导入 TransformBroadcaster 类




class FixedFrameBroadcaster(Node):  # 定义一个名为 FixedFrameBroadcaster 的类,继承自 Node 类


    def __init__(self):  # 初始化方法
        super().__init__('fixed_frame_tf2_broadcaster')  # 调用父类的初始化方法,并设置节点名称为 'fixed_frame_tf2_broadcaster'
        self.tf_broadcaster = TransformBroadcaster(self)  # 创建一个 TransformBroadcaster 对象
        self.timer = self.create_timer(0.1, self.broadcast_timer_callback)  # 创建一个定时器,每 0.1 秒调用一次 broadcast_timer_callback 方法


    def broadcast_timer_callback(self):  # 定义定时器回调方法
        t = TransformStamped()  # 创建一个 TransformStamped 对象


        t.header.stamp = self.get_clock().now().to_msg()  # 设置时间戳为当前时间
        t.header.frame_id = 'turtle1'  # 设置父坐标系 ID 为 'turtle1'
        t.child_frame_id = 'carrot1'  # 设置子坐标系 ID 为 'carrot1'
        t.transform.translation.x = 0.0  # 设置平移变换的 x 坐标为 0.0
        t.transform.translation.y = 2.0  # 设置平移变换的 y 坐标为 2.0
        t.transform.translation.z = 0.0  # 设置平移变换的 z 坐标为 0.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值