机器人系统ros2-开发实践04-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 ?

tf2的全称是transform2,在ROS(Robot Operating System)中,它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词,表示坐标变换,而“2”则代表了这是该库的第二版,即改进和优化过的版本。

ROS2(Robot Operating System 2)中的**tf2是一个用于处理机器人各部件之间相对位置关系的库**。它主要用于追踪多个坐标系之间的相对位置和方向,并在这些坐标系之间实现无缝转换。tf2是ROS2中一个重要的组件,因为在机器人的许多应用中,正确理解各个部件如何相对于彼此移动是至关重要的。

tf2库提供以下几个关键功能:

  • 坐标变换:允许用户在不同的坐标系之间转换向量、点、姿态等。
    时间差异处理:由于传感器数据可能在不同时间到达,tf2能够处理这些时间上的差异,确保坐标变换的正确性。
  • 坐标系跟踪:tf2维护一个时间线,记录各坐标系之间关系的变化,支持查询过去任何时刻的坐标变换。
  • 接口友好:tf2提供了丰富的API,方便在C++和Python等语言中进行调用。

主要的应用场景:

  • 机器人导航:在机器人导航中,tf2用于管理和转换机器人、传感器和环境之间的坐标系。例如,将来自激光雷达的数据转换到全局坐标系中,以实现路径规划和障碍物避让。
  • 传感器数据融合:在使用多个传感器(如IMU、GPS、视觉摄像头等)时,tf2可以帮助同步和整合不同传感器的数据。通过将所有传感器数据统一到一个坐标系中,可以更准确地进行环境感知和定位。
  • 机械臂操作:在机械臂和其他自动化设备的控制中,tf2被用来计算和更新机械臂各关节之间的相对位置和方向。这对于精确控制机械臂执行复杂的操控任务至关重要。
  • 仿真和建模:在机器人仿真系统中,tf2可以用于管理虚拟环境中的各种坐标系,确保模拟数据的准确性和一致性。
  • 多机器人系统:在多机器人协作场景中,tf2能够帮助各个机器人理解彼此的相对位置和姿态,从而进行协调合作。
  • 动态环境交互:当机器人在不断变化的环境中操作时,tf2可以帮助机器人实时更新和调整其对环境的理解,例如在人群中导航或与动态对象互动。

示例演示:

运行turtlesim 演示,并在使用turtlesim 的多机器人示例中了解tf2 的一些强大功能

让我们从安装演示包及其依赖项开始。

sudo apt-get install ros-humble-rviz2 ros-humble-turtle-tf2-py ros-humble-tf2-ros ros-humble-tf2-tools ros-humble-turtlesim

现在我们已经安装了turtle_tf2_py教程包,让我们运行演示。首先,打开一个新终端并获取 ROS 2 安装的源代码,以便ros2命令能够运行。然后运行以下命令:

ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py

您将看到海龟模拟从两只海龟开始
在这里插入图片描述

在第二个终端窗口中键入以下命令:

ros2 run turtlesim turtle_teleop_key

一旦turtlesim启动,您可以使用键盘箭头键在turtlesim中驱动中央乌龟,选择第二个终端窗口,以便捕获您的击键来驱动乌龟。

您可以看到一只乌龟不断移动以跟随您驾驶的乌龟。

在这里插入图片描述

该演示使用 tf2 库创建三个坐标系:一个world坐标系、一个turtle1坐标系和一个turtle2坐标系。本教程使用tf2 广播器来发布海龟坐标系,并使用tf2 侦听器来计算海龟坐标系中的差异并移动一只海龟以跟随另一只海龟。

查看tf2 工具-tf2_tools

view_frames创建 tf2 通过 ROS 广播的帧的图表。请注意,该实用程序仅适用于 Linux;如果您使用的是 Windows,请跳至下面的“使用 tf2_echo”。

ros2 run tf2_tools view_frames

你会看见:

Listening to tf data during 5 seconds...
Generating graph in frames.pdf file...

这里,tf2 侦听器正在侦听通过 ROS 广播的帧,并绘制帧连接方式的树。要查看树,请frames.pdf使用您喜欢的 PDF 查看器打开结果。

在这里插入图片描述
这里我们可以看到 tf2 广播的三个帧:world、turtle1和turtle2。该框架是和框架world的父级。 还报告一些有关何时接收最旧和最新帧转换以及将 tf2 帧发布到 tf2 以便进行调试的诊断信息。turtle1turtle2view_frames

tf2_echo 报告通过 ROS 广播的任意两个帧之间的转换。

用法 :ros2 run tf2_ros tf2_echo [source_frame] [target_frame]

turtle2让我们看看框架相对于框架的变换turtle1,它相当于:

ros2 run tf2_ros tf2_echo turtle2 turtle1

tf2_echo当侦听器接收通过 ROS 2 广播的帧时,您将看到显示的转换。

At time 1622031731.625364060
- Translation: [2.796, 1.039, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.202, 0.979]
At time 1622031732.614745114
- Translation: [1.608, 0.250, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.032, 0.999]

当您驾驶乌龟四处走动时,您会看到两只乌龟相对移动时变换发生变化。

rviz2 和 tf2

rviz2是一个可视化工具,对于检查 tf2 帧很有用。让我们rviz2通过使用以下选项通过配置文件启动它来查看我们的海龟框架

ros2 run rviz2 rviz2 -d $(ros2 pkg prefix --share turtle_tf2_py)/rviz/turtle_rviz.rviz

在侧栏中,您将看到 tf2 广播的帧。当您驾驶乌龟四处走动时,您会看到框架在 rviz 中移动,tu在这里插入图片描述在这里插入图片描述
图中的两个坐标就会重合到一起

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/6096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【抽代复习笔记】17-群(十一):置换的练习题(1)

练习1:计算: 解: 解析:①左边的置换是1保持不变,2变成3,3变成4,4变成5,5变成2,因此可以简写为(2345);右边的置换是2和5保持不变,1变成3&#xff…

k8s环境部署gpu以及CUDA兼容性分析

本文记录和学习在实用gpu搭建k8s支持上层应用时的功能实践和遇到的问题。 1. 基础概念 CUDA本质上就是NVIDIA专为通用高性能并行计算设计的一套计算平台和编程模型,换句话使用GPU并行编程的规范方法,所以CUDA在软件层面包含了众多库, 那这里…

万兴PDF专家 PDFelement Pro v10.3.8 破姐版!

🧑‍💻万兴PDF专家 PDFelement Pro v10.3.8 破姐版 (https://docs.qq.com/sheet/DRVVxTHJ3RXJFVHVr)

docker mysql更新升级版本

一、环境说明 操作系统:Centos7 数据库版本:MySql 8.0.22 数据库中数据量不大,处于开发/测试环境,风险较低 二、升级原因 升级是因为测评漏洞,在进行国家三级等级保护测评过程中,漏扫发现多个MySql漏洞…

Linux学习之IP协议

前言: 在学习IP协议i前,我们其实知道网络协议栈是一层层的,上层封装好之后就传给下层,对于我们治安学习到的TCP协议,在对数据进行封装之后,并不是直接就将数据进行传输,而是交给下一层网络层进…

C++11 右值与移动语义

前言: 我们首先汇总一下在C11中新的变化: 1、新容器 —— unodered_xxx 2、新接口 cbegin等,无关痛痒initializer_list系列的构造push_xxx / insert / emplace 等增加右值引用插入版本,意义重大,提高效率容器新增移…

领域驱动设计(DDD)笔记(一)基本概念

文章链接 领域驱动设计(DDD)笔记(一)基本概念-CSDN博客领域驱动设计(DDD)笔记(二)代码组织原则-CSDN博客 DDD基本概念 DDD 是一种面向复杂需求的软件设计方法,将软件开…

【Vue3】openlayers加载瓦片地图并手动标记坐标点

目录 一、创建Vue3项目 二、openlayers加载瓦片地图(引js文件版) 2.1 将以下的文件复制到public下 2.2 index.html引入ol脚本 2.3 删除项目自带的HelloWorld.vue,创建Map.vue 2.4 编码Map.vue 2.5 修改App.vue 2.6 启动项目测试 三、…

通信光缆主要敷设方式有哪些(续)

在《通信光缆主要敷设方式有哪些》一文中,介绍了光缆的直埋、架空和管道敷设方式。此外,根据敷设场景的不同,光缆的常见敷设方式还包括:高铁槽道内敷设、水底敷设、墙壁敷设、引上、室内敷设等。 1 高铁槽道内光缆敷设 光缆顺沿高…

vscode设置免密登录远程服务器

文章目录 1. 问题描述2. 解决方案3. 原理 1. 问题描述 当我们使用vscode的ssh连接远程服务器后,过一段时间后,总是要求登录服务器的密码。 这就导致一个麻烦就是: 无论是在公司还是在学校,密码往往不是自己设置的,所以记忆起来就…

《QT实用小工具·五十二》文本或窗口炫酷有趣的滚动条——果冻条

1、概述 源码放在文章末尾 该项目实现了文本或窗口纤细的滚动条——果冻条 一个可以像弓弦一样拉出来,并且来回弹动的普通滚动条。 思路为此,但发现实际效果更像条状果冻,并且略有谐音, 故,称之为——“果冻条”&am…

【QT学习】12.UDP协议,广播,组播

一。Udp详细解释 UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的、不可靠的数据传输服务。与TCP相比,UDP不提供可靠性、流量控制、拥塞控制和错误恢复等功能,但由于其简单性和低开销&#x…

【Linux-点灯烧录-SD卡/USB烧写】

目录 1. 烧写方式2. 烧写之代码编译2.1 led.s->led.o2.2 led.o->led.elf2.3 led.elf->led.bin2.4 反汇编:led.elf->led.dis 3. 烧写之烧录到SD卡上:3.1 开启烧录软件权限:3.2 确定SD卡的格式:FAT323.3 烧录到SD卡上3.…

学习Rust的第22天:mini_grep第2部分

书接上文,在本文中,我们学习了如何通过将 Rust 程序的逻辑移至单独的库箱中并采用测试驱动开发 (TDD) 实践来重构 Rust 程序。通过在实现功能之前编写测试,我们确保了代码的可靠性。我们涵盖了基本的 Rust 概念,例如错误处理、环境…

ChatGPT理论分析

ChatGPT "ChatGPT"是一个基于GPT(Generative Pre-trained Transformer)架构的对话系统。GPT 是一个由OpenAI 开发的自然语言处理(NLP)模型,它使用深度学习来生成文本。以下是对ChatGPT进行理论分析的几个主…

移动机器人系统与技术:自动驾驶、移动机器人、旋翼无人机

这本书全面介绍了机器人车辆的技术。它介绍了道路上自动驾驶汽车所需的概念。此外,读者可以在六足机器人的构造、编程和控制方面获得宝贵的知识。 这本书还介绍了几种不同类型旋翼无人机的控制器和空气动力学。它包括各种旋翼推进飞行器在不同空气动力学环境下的模…

基于vmware虚拟机中yum源的配置

1.首先需确保虚拟机中已经连接了光盘映像(如图在虚拟机右下方从左往右第二个) 2.在虚拟机中找到光盘映像文件(默认在/dev的sr0) 3.将光盘文件挂载(挂载后才可读取) 为方便每一次开机之后自动挂载&#xff…

学浪视频怎么下载保存到本地

你是否曾经因为想要保存一份珍贵的学浪视频却苦于无法下载而感到烦恼?现在,我将向你揭示一个简单易行的方法,让你轻松地将学浪视频保存到本地,随时随地享受学习的乐趣。你是否曾经因为想要保存一份珍贵的学浪视频却苦于无法下载而…

未来科技的前沿:深入探讨人工智能的进展、机器学习技术和未来趋势

文章目录 一、人工智能的定义和概述1. 人工智能的基本概念2. 人工智能的发展历史 二、技术深入:机器学习、深度学习和神经网络1. 机器学习2. 深度学习3. 神经网络 三、人工智能的主要目标和功能1. 自动化和效率提升2. 决策支持和风险管理3. 个性化服务和预测未来 本…

初始数据类型

注释补充 在我们编写任何代码的时候,都有一个叫做注释的功能 在golang中有两种 单行注释 // 如下图所示 加入了注释的话,代码在执行的时候会自动忽视这段内容 //fmt.Println("天上") //fmt.Println("天下") //fmt.Println("唯…