机器人系统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在这里插入图片描述在这里插入图片描述
图中的两个坐标就会重合到一起

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(70)

1. 题目解析 题目链接:740. 删除并获得点数 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 问题分析 本题是「打家劫舍」问题的变种,但核心逻辑依然保持一致。题目要求从给定的数组nums中选择…

C++ stack和queue的使用方法与模拟实现

文章目录 一、 stack的使用方法二、 queue的使用方法三、 容器适配器四、 stack的模拟实现五、 queue的模拟实现 一、 stack的使用方法 stack介绍文档 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的…

Windows如何通过wsl2迅速启动Docker desktop的PHP的Hyperf项目容器?

一、安装WSL 什么是WSL? 官网:什么是WSL? Windows Subsystem for Linux (WSL) 是一个在Windows 10和Windows 11上运行原生Linux二进制可执行文件的兼容性层。 换句话说,WSL让你可以在Windows系统上运行Linux环境,而无需…

【linux】unzip解压乱码或者报错处理办法

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

2023-2024年数字化转型报告/方案合集(精选198份)

数字化转型报告/方案(精选198份) 2023-2024年 来源:2023-2024年数字化转型报告/方案合集(精选198份) 【以下是资料目录】 2023-2024年度医药健康行业数字化调研报告 2023-2024中国财务数字化报告 2023⻝品饮料行业…

Redis运维篇-快速面试笔记(速成版)

文章目录 1. Redis的持久化1.1 RDB(快照模式)1.2 AOF 模式 2. Redis主从模型(高可用)2.1 Redis的主从复制2.2 Redis拓扑结构 3. Redis集群模式(高并发)3.1 Redis的Slots3.2 集群模式的常用命令3.3 多主多从…

使用 MediaMTX 和 FFmpeg 推拉 RTSP 流媒体

实时流传输协议 RTSP(Real-Time Streaming Protocol)是 TCP/IP 协议体系中的一个应用层协议,由哥伦比亚大学、网景和 RealNetworks 公司提交的 IETF RFC 标准。该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP 在体系…

Unity射击游戏开发教程:(8)构建 UI 元素:添加分数显示

用户界面决定用户如何与屏幕交互。UI 适用于所有类型的游戏和应用程序,在此示例中,我们将为我的太空射击游戏设置一个简单的记分板。 第一步是在层次结构中创建一个 UI 元素。只需在层次结构中右键单击,滚动 UI 并选择要添加的 UI 元素类型。在本例中,我们将使用文本元素。…

STM32入门_江协科技_3~4_OB记录的自学笔记_软件安装新建工程

3. 软件安装 3.1. 安装Keil5 MDK 作者的资料下载的连接如下:https://jiangxiekeji.com/download.html#32 3.2. 安装器件支持包 因为新的芯片层出不穷,所以需要安装Keil5提供的器件升级版对软件进行升级,从而支持新的芯片;如果不…

如何将 redis 快速部署为 docker 容器?

部署 Redis 作为 Docker 容器是一种快速、灵活且可重复使用的方式,特别适合开发、测试和部署环境。本文将详细介绍如何将 Redis 部署为 Docker 容器,包括 Docker 安装、Redis 容器配置、数据持久化、网络设置等方面。 步骤 1:安装 Docker 首…

ICode国际青少年编程竞赛- Python-1级训练场-基本操作

ICode国际青少年编程竞赛- Python-1级训练场-基本操作 1、 Dev.step(3)2、 Dev.step(1)3、 Dev.step(7)4、 Dev.step(-1)5、 Dev.step(-5)6、 Dev.step(3) Dev.step(-8)7、 Dev.turnRight() Dev.step(1)8、 Dev.turnLeft() Dev.step(1)9、 Dev.step(4) Dev.tur…

串的模式匹配之BF算法实现

概述 BF算法-暴力枚举 匹配失败处理 匹配成功结束 算法思想 代码实现 定义串的存储结构:装字符的ch数组标记长度的length 最坏时间复杂度分析 代码整合

微调Mistral 7B以实现命名实体识别 (NER)

文章来源:fine-tuning-mistral-7b-for-named-entity-recognition-ner 2024 年 4 月 19 日 在自然语言处理(NLP)领域,命名实体识别(NER)被认为是一项关键任务,应用范围广泛,包括信息…

电脑找不到msvcp140.dll如何修复?msvcp140.dll丢失的多种解决方法分享

在日常电脑操作过程中,用户可能会遇到一个令人困扰的问题,即屏幕上突然弹出一条错误提示:“由于找不到msvcp140.dll,无法继续执行代码”。这一情况往往导致应用程序无法正常启动或运行,给工作和娱乐带来不便。不过&…

ICode国际青少年编程竞赛- Python-1级训练场-for循环入门

ICode国际青少年编程竞赛- Python-1级训练场-for循环入门 1、 for i in range(4):Dev.step(4)Dev.turnLeft()2、 for i in range(3):Dev.step(6)Dev.turnRight()3、 for i in range(3):Dev.turnRight()Dev.step(2)Dev.turnLeft()Dev.step(-3)4、 for i in range(4):Dev…

数据结构-AVL树

目录 什么是 AVL 树 ASL 度量查找效率 结构体定义 平衡调整 调整类型 左旋和右旋 右旋 左旋 左、右平衡调整 左平衡调整 右平衡调整 插入数据 模拟建立 AVL 树 什么是 AVL 树 二叉排序树的形状取决于数据集,当二叉树的高度越小、结构越合理&#xff0c…

如何在iOS设备(iPhone,iPad等)上恢复丢失的照片

如果你像现代90%的人一样拥有智能手机,那么你很可能使用口袋里的微型电脑拍摄大部分(如果不是全部)照片,而不是标准的傻瓜相机或数码单反相机。 像任何数字设备一样,存储和保存这些照片可能是一个变化无常的过程&…

MySQL商城数据库88张表结构(46—50)

46、消息队列表 CREATE TABLE dingchengyu消息队列表 (id int(11) NOT NULL AUTO_INCREMENT COMMENT 序号,userId int(11) DEFAULT NULL COMMENT 用户id,msgTtype tinyint(4) DEFAULT 0 COMMENT 消息类型,createTime datetime DEFAULT NULL COMMENT 创建时间,sendTime datetim…

centos7安装真的Redmine-5.1.2+ruby-3.0.0

下载redmine-5.1.2.tar.gz,上传到/usr/local/目录下 cd /usr/local/ tar -zxf redmine-5.1.2.tar.gz cd redmine-5.1.2 cp config/database.yml.example config/database.yml 配置数据连接 #编辑配置文件 vi config/database.yml #修改后的内容如下 product…

学习CSS3,实现红色心形loading特效

试想一下,如果你的网站在加载过程中,loading图由一个老旧的菊花转动图片,变为一个红色的心形loading特效,那该有多炫酷啊。 目录 实现思路 初始化HTML部分 延迟动画是重点 设定动画效果 完整源代码 最后 实现思路 每个…