ROS————tf2介绍及教程

2023-05-16

本文参考资料:

tf2 - ROS Wikihttp://wiki.ros.org/tf2

目录

前言

一、tf2的作用以及为什么要使用tf2

1.安装demo

2.运行demo

3.上面的例子代表着什么

4.tf2工具

4.1使用view_frames

4.2使用tf_echo

5.rviz和tf2

回到标题一,继续介绍tf2的作用以及为什么使用tf2:

二.教程

三.概述

1.支持的数据类型

1.1数据类型支持包

2.坐标系约定

2.1 命名

3. 工具

4. 几何学

5. ROS绑定

6. 从tf迁移

7.添加静态转换支持


前言

         tf已经被弃用,取而代之的是tf2。tf2是转换库的第二代,它允许用户随时间跟踪多个坐标帧。tf2在时间缓冲的树结构中维护坐标帧之间的关系,并允许用户在任何所需的时间点在任意两个坐标帧之间转换点、向量等。

一、tf2的作用以及为什么要使用tf2

如果你不光想要只是阅读文档而是想看看tf2到底能干什么,查看下面的简介演示连接:

tf2/Tutorials/Introduction to tf2 - ROS Wikihttp://wiki.ros.org/tf2/Tutorials/Introduction%20to%20tf2链接译文:

如果尚未创建用于完成教程的工作区,请按照下文创建工作区:

source /opt/ros/noetic/setup.bash
mkdir -p ~/tutorial_ws/src
cd ~/tutorial_ws
catkin_init_workspace src
catkin_make
source devel/setup.bash

1.安装demo

安装依赖和编译demo包:

sudo apt-get install ros-$ROS_DISTRO-turtle-tf2 ros-$ROS_DISTRO-tf2-tools ros-$ROS_DISTRO-tf

2.运行demo

现在,我们已经完成了turtle_ tf2教程包的编译,让我们运行演示。

roslaunch turtle_tf2 turtle_tf2_demo.launch

此时问题来了,按道理打开的Turtlesim界面应该有两只乌龟,但是实际只有一只乌龟,报错如下:

是因为在其目录中找的是python的编译器,但是ROS安装是安装的是python3.8(这里以noetic)所以他的编译器的名称是python3,而不是python所以在运行的时候就会报错。 

解决方案:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1

再次输入:

roslaunch turtle_tf2 turtle_tf2_demo.launch

使用方向键移动,就可以看到一只乌龟追着另一只乌龟了。

3.上面的例子代表着什么

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

4.tf2工具

现在,让我们看看如何使用tf2创建此demo。我们可以使用tf2工具查看tf2在幕后所做的工作。

4.1使用view_frames

view_frames 创建 tf2 通过ROS广播的所有坐标系的示意图,他们的相互关系。

不要关闭海龟窗口,重新打开一个终端,输入:

rosrun tf2_tools view_frames.py

可以看到以下结果:

 这里,tf2侦听器正在侦听通过ROS广播的坐标系,并绘制帧连接方式的树。要查看树,请执行以下操作:

evince frames.pdf

 这条指令运行后会直接保存在home路径下。

        在这个图上,可以看到tf2广播的三个坐标系:世界坐标系,turtle1坐标系和turtle2坐标系,并且世界坐标系是turtle1和turtle2坐标系的父级。 view_frames还报告一些诊断信息,这些信息有关何时接收到最旧和最新的坐标系转换,以及将tf2帧发布到tf2进行调试的速度。


4.2使用tf_echo

tf_echo报告通过ROS广播的任何两个坐标系之间的转换关系。

用法:

rosrun tf tf_echo [reference_frame] [target_frame]

让我们看一下turtle2坐标系相对于turtle1坐标系的变换:

rosrun tf tf_echo turtle1 turtle2

移动乌龟,可以看到他们的位置变换,静止时为0:

5.rviz和tf2

rviz是一种可视化工具,可用于检查tf2坐标系。 看看通过rviz的turtle坐标系。 让我们使用turtle_tf2配置文件,使用rviz的-d选项启动rviz。

rosrun rviz rviz -d `rospack find turtle_tf2`/rviz/turtle_rviz.rviz

 将鼠标选中显示乌龟的终端,按方向键就可以在rviz中看到框架的移动。

回到标题一,继续介绍tf2的作用以及为什么使用tf2:

机器人系统通常具有许多随时间变化的三维坐标系,例如世界坐标系、基础坐标系、夹具坐标系、头部坐标系等。tf2随时间跟踪所有的这些坐标系,并可以解答下列问题:

①在5秒之前,头部坐标系相对于世界坐标系在哪;

②我抓手中的物体相对于我的底座的姿态是什么;

③地图坐标系中的基础坐标系当前位姿是什么。

tf2 可以在分布式系统中运行。 这意味着有关机器人坐标系的所有信息都可用于系统中任何计算机上的所有 ROS 组件。 Tf2 可以与包含所有转换信息的中央服务器一起运行,或者您可以让分布式系统中的每个组件构建自己的转换信息数据库。

二.教程

        ROS创建了一组教程,逐步指导您使用 tf2。 有关所有 tf2 和 tf2 相关教程的完整列表,请查看教程页面。任何用户都可以使用 tf2 来完成两个任务,监听转换和广播转换。

教程参考网页:

tf2/Tutorials - ROS Wikihttp://wiki.ros.org/tf2/Tutorials/

三.概述

1.支持的数据类型

        tf2 实现模板化数据类型支持。 这允许核心包具有最小的依赖关系,并且有一些包增加了对不同数据类型的转换以及转换这些数据类型的支持。 tf2 转换方法也支持多种不同数据类型之间的转换和转换。

        tf2 的核心依赖于标记数据类型,这些数据类型可以方便地与具有 Messages#Header 的 ROS 消息相关联。

1.1数据类型支持包

这些包提供了允许 tf2 本地处理任何外部库的数据类型的方法。 大多数都是特定于 C++ 或 Python 的。

①tf2_bullet tf2 方法在 C++ 中本机处理项目符号数据类型;

②tf2_eigen tf2 方法在 C++ 中本机处理 Eigen 数据类型;

③tf2_geometry_msgs 在 C++ 或 Python 中原生使用 geometry_msgs 数据类型的 tf2 方法;

④tf2_kdl tf2 方法在 c++ 或 python 中本地处理 kdl 数据类型;

⑤tf2_sensor_msgs 在 C++ 或 Python 中原生使用 sensor_msgs 数据类型的 tf2 方法。

2.坐标系约定

使用 tf2 的一个重要部分是使用坐标系的标准约定。 使用坐标系有多种约定来源:

①REP 103 涵盖了单位、方向约定、手性、旋转表示和协方差表示 ;

②REP 105 涵盖了移动基础坐标系的标准名称 ;

③人形机器人的标准坐标系在 REP 120 中 ;

④有关使用的一些数学术语的定义,请参阅tf2/Terminology - ROS Wiki页面。

2.1 命名

        ROS 中的坐标系由字符串 frame_id 标识,格式为小写下划线分隔。 该字符串在系统中必须是唯一的。 生成的所有数据都可以简单地识别它的 frame_id 来说明它在世界上的位置。

没有 tf_prefix:在以前的版本中,有一个 tf_prefix 的概念,它将使用 / 分隔符添加到坐标系名称之前。 一个前导斜杠用于表示它已经被添加了前缀。 为了向后兼容,tf2 将删除任何前导 / 字符。

没有重新映射: tf frame_ids 的概念与 ROS 名称的范围不同。 特别是,命名计算图的特定子部分不会改变 tf 树所代表的物理布局。 因此 frame_ids 不遵循命名空间重新映射规则。 通常支持 ROS 参数以允许更改算法中使用的 frame_id。

多个机器人: 对于具有多个机器人的用例,通常建议使用多个主机并在机器人之间转发特定的 tf 信息。 有几种不同的方法可以在主节点之间实现桥接。 有关更多信息,请参阅sig/Multimaster - ROS Wiki。

3. 工具

①tf2 包是核心功能的独立于 ROS 的实现。 如果消息数据类型被复制出来,这可以在 ROS 之外使用;

②tf2_tools 提供了许多在 ROS 中使用 tf2 的工具。

4. 几何学

tf2 提供了基本的几何数据类型,例如 Vector3、Matrix3x3、Quaternion、Transform。 这些数据类型支持彼此之间的线性代数运算。

5. ROS绑定

这些包为使用 tf2 的开发人员提供了主要接口。

①tf2_ros 为 tf2 提供 roscpp 绑定,包括 BufferListener、BufferBroadcaster、BufferServer 和 BufferClient 的类 ;

②tf2_ros 还为 tf2 提供了 rospy 绑定,包括 BufferListener BufferBroadcaster 和 BufferClient 的类。

6. 从tf迁移

有关从 tf 迁移的更多信息,请参阅tf2/Migration - ROS Wiki。

7.添加静态转换支持

        静态转换的目标是消除重新传达不变事物的需要。 更新值的功能是在它们受到不确定性影响的情况下实现的,并且以后可能会使用改进的值重新估计。 但重要的是,这些更新后的值在任何时候都应该是正确的。

        转换的添加和删除是有问题的,特别是因为假设始终为真。 如果您有一个由静态变换表示的可拆卸臂,并且您经历了 1) 安装、2) 移除、3) 安装 4) 用臂移除的过程。

        如果您在 t=1 和 3 处添加静态变换并在 t=2 和 4 处删除变换。任何从抓手到身体的变换查询都应使用 1.5 的时间戳。 但是,如果该查询是在 t=1 和 t=2 之间进行的,它将通过,但由于静态转换被删除,时间戳为 t=1.5 的先前工作查询将在 t=2 处中断。 另一个问题成立。 在 t=2.5 时,变换不应该查找,但是如果在时间 t=3.5 查询,如果使用静态变换,则在时间戳 2.5 处的查找将通过。

        如果您通过更改连通性来破坏树,也会产生这些不正确的结果。 如果您有一个来来往往的框架,您应该真正使用标准框架并以适当的低速率发布它,该速率适合捕获更改机器人拓扑的预期频率。

        静态转换与常规转换的最大不同之处在于它们不保留时间历史。这主要节省了存储和查找时间,尽管发布开销也更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS————tf2介绍及教程 的相关文章

  • ROS multi-master——multimaster_fkie配置

    多主站ROS配置和mutimaster fkie ROS版本 kinetic 操作系统 Ubuntu 16 04 multimaster fkie github 1网络配置 1 1路由器 设置无线路由器并连接两台计算机 机器人 为这两台计算
  • ROS中使用VLP16激光雷达获取点云数据

    ROS中使用VLP16激光雷达获取点云数据 个人博客地址 本文测试环境为 Ubuntu20 04 ROS Noetic 需要将激光雷达与PC连接 然后在设置 gt 网络 gt 有线中将IPv4改为手动 并且地址为192 168 1 100
  • ros+arduino学习(六):重构ros_lib库文件

    前言 ros lib是arduino程序和ros连接的库文件 通过使用这些库文件和相关函数 可以在arduino上通过编程使得arduino硬件开ros节点程序 这样arduino硬件就可以与上位机通过话题进行通讯 从而把arduino从传
  • SLAM-hector_slam 简介与使用

    hector slam功能包使用高斯牛顿方法 不需要里程计数据 只根据激光信息便可构建地图 所以他的总体框架如下 hector slam功能包 hector slam的核心节点是hector mapping 它订阅 scan 话题以获取SL
  • 1-如何安装ROS

    如何安装ROS 大家好 我是如何 今天尝试在Ubantu下安装ROS Robot Operating System 测试环境 虚拟机VMware Ubantu20 04 准备步骤 添加ROS软件源 sudo sh c echo deb ht
  • 线速度和角速度

    转自 https baike baidu com item E7 BA BF E9 80 9F E5 BA A6 1532652 fr aladdin https baike baidu com item E8 A7 92 E9 80 9F
  • ROS turtlebot_follower :让机器人跟随我们移动

    ROS turtlebot follower 学习 首先在catkin ws src目录下载源码 地址 https github com turtlebot turtlebot apps git 了解代码见注释 其中有些地方我也不是很明白
  • Ubuntu16.04安装ROS Kinetic详细步骤

    文章目录 ROS安装 配置Ubuntu软件仓库 设置sources list 设置密钥 更新Debian软件包索引 安装ROS 初始化 rosdep 环境配置 构建工厂依赖 测试安装 开发环境 ROS安装 ROS Kinetic只支持Wil
  • Ubuntu18.04配置Seetaface6

    目录 一 下载安装Qt软件 1 安装包下载 2 安装Qt 3 配置 二 下载源码 三 编译工具 四 编译 1 编译OpenRoleZoo 2 编译SeetaAuthorize 3 编译TenniS 五 运行 1 修改lib路径 2 buil
  • 在Ubuntu 14.04.2 LTS上安装Qt

    Qt是一个跨平台的应用程序框架 广泛用于开发具有GUI界面的应用软件以及命令行工具 几乎所有操作系统都可以使用Qt 如Windows Mac OS X Android等 用于开发Qt应用程序的主要编程语言是C 但是可以使用诸如Python
  • rosprofiler 安装和使用

    rosprofiler wiki 页面 http wiki ros org rosprofiler rosprofiler package 下载rosprofiler和ros statistics msgs 放到工程目录下编译 https
  • 最快实现一个自己的扫地机

    作者 良知犹存 转载授权以及围观 欢迎关注微信公众号 羽林君 或者添加作者个人微信 become me 扫地机介绍 扫地机器人行业本质是技术驱动型行业 产品围绕导航系统的升级成为行业发展的主旋律 按功能划分 扫地机器人分为四大系统 即导航系
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • 【ROS】usb_cam相机标定

    1 唠叨两句 当我们要用相机做测量用途时 就需要做相机标定了 不然得到的计算结果会有很大误差 标定的内容包括三部分 内参 外参还有畸变参数 所以标定的过程就是要求得上面这些参数 以前弄这个事估计挺麻烦 需要做实验和计算才能得到 现在通过ro
  • 如何将视频或图像序列转换为包文件?

    我是 ROS 新手 我需要转换预先存在的视频文件 或者large可以连接到视频流中的图像数量 bagROS 中的文件 我在网上找到了这段代码 http answers ros org question 11537 creating a ba
  • 在 CLion 中设置 ROS 包

    我正在使用 CLion C IDE 来编辑 ROS 包 我可以通过打开CMakeLists txt文件 但是 我收到一个错误 FATAL ERROR find package catkin 失败 在工作区和 CMAKE PREFIX PAT
  • 在 Python 3 中导入 Rosbag

    我正在尝试从 Python 3 读取 rosbag 文件 我安装了 ROS2 Eloquent Elusor 它应该支持 Python 3 当我跑步时 import rosbag bag rosbag Bag test bag 从Pytho
  • ROS AsyncSpinner 的多线程行为

    我试图了解 ROS 中的 AsyncSpinner 是如何工作的 因为我可能有一些误解 你可以找到类似的问题here As seen here它的定义提到 异步旋转器 产生几个线程 可配置 将并行执行回调 同时不会阻塞执行该操作的线程 叫它
  • 从 pcl::PointCloud 中删除点

    我是 PCL 新手 我正在使用 PCL 库 并且正在寻找一种从点云中提取点或将特定点复制到新点的方法 我想验证每个点是否符合条件 并且我想获得仅包含优点的点云 谢谢 使用 ExtractIndices 类 将要删除的点添加到 PointIn
  • 无法在 ROS 中使用本地安装的 Protocol Buffer

    我已经安装了协议缓冲区 https developers google com protocol buffers 本地 ROS包的目录结构如下 CMakeLists txt package xml include addressbook p

随机推荐

  • C语言指针的释放问题

    PC端食用更佳哦 一 指针参与运算后无法释放 1 看代码 xff0c 下面的代码很显然没有任何问题 xff0c 来看第二个 include lt stdio h gt include lt malloc h gt int main int
  • C语言-str家族之strchr,strrchr,strchrnul

    文章目录 一 strchr1 声明2 作用3 源码4 说明5 示例 二 strrchr1 声明2 作用3 源码4 说明5 示例 三 strchrnul1 声明2 作用3 源码4 说明5 示例 PC上食用更佳哦 xff01 代码目录 xff1
  • Linux下新建文件和目录的权限(rwx)及umask

    文章目录 一 Linux下umask二 Linux下新建文件三 Linux下新建目录 前几天在整samba xff0c 文件权限搞得我头大 xff0c 今天来学一下默认新建文件的权限 xff01 一 Linux下umask 1 umask是
  • C语言--截取两个特定字符之间的字符串

    有时候 xff0c 需要截取字符串中的两个特定字符之间的字符串 xff0c 啥意思呢 xff1f 举个例子 需要截取目录 34 home book temp hello c 34 中的hello xff0c 有人会说了 xff0c 直接使用
  • 数组名取址&a+1和a+1

    第一天 xff0c 取址数组名 amp a C语言中的指针很重要 xff0c 关于指针的使用 xff0c 牛逼的那是真牛逼 xff0c 不行的那是真不行 xff0c 为了加深印象 xff0c 争取做到每日一练 xff01 如有错误 xff0
  • BMP图片格式解析

    BMP图片解析 一 BMP图片格式1 BMP图片的组成 二 BMP图片十六进制解析1 文件头2 信息头3 调色板4 图片数据 之前做了一个 BMP图片的中值滤波 xff0c 也只是大概了解BMP图片格式怎样的 xff0c 参考了很多资料 x
  • 工作中libusb的使用

    libusb的使用 1 下载编译2 使用1 虚拟机设置2 查看usb设备3 代码读取相机数据 用libusb在虚拟机上采集相机的数据 连接方式如下图 1 下载编译 官网下载 xff0c 选择Downloads xff0c 会跳转到Githu
  • 服务器更换后,vscode里面的svn远程仓库修改

    第一步 xff1a 终端打开本地项目目录 第二步 xff1a 查看当前svn信息 xff1a svn info 第三步 xff1a svn switch relocate 旧仓库地址 新仓库地址 第四步 xff1a 输入密码 成功
  • 网络摄像头OSD叠加RGN图片

    OSD叠加RGN图片 1 OSD叠加原理2 OSD叠加处理3 代码中的细节 xff08 供自己食用 xff09 3 1 分配rgn3 2 读bmp并复制到rgn的buf3 3 显示结果 4 最终解决方案5 总结 xff08 自用 xff09
  • 数据结构版学生管理系统

    简易学生管理系统设计 要求 xff1a 选择一种数据结构实现对每个学生信息的存储 xff0c 并实现如下功能 插入一个学生信息删除一个学生信息修改学生信息查找学生信息 实现时要求做一个简单的界面 xff0c 能让程序反复的执行不同功能 采用
  • docker镜像管理

    docker镜像管理 文章目录 docker镜像管理docker镜像的制作Docker Hubdocker镜像的获取 docker pull lt registry gt lt port gt lt namespace gt lt name
  • 基于STM32的核心板制作流程(适用零基础学习)

    文章目录 前言一 什么是核心板 二 核心板最小系统电路三 电路设计与制作流程1 传统流程 xff08 适合有经验的人 xff09 2 新手流程 xff08 适合零基础小白 xff09 总结 前言 购买过STM32开发板进行学习的小伙伴都清楚
  • 基于STM32的最小系统电路设计(手把手零基础教学)

    文章目录 前言一 复位电路二 晶振电路三 电源转换电路四 SWD下载电路五 LED测试电路六 芯片外扩引脚七 STM32微控制电路总结 前言 在上篇介绍完 STM32的核心板制作流程 后 xff0c 本篇我们将开始学习STM32最小系统电路
  • AltiumDesigner VS 立创EDA —— PCB绘图软件选择

    文章目录 前言一 AltiumDesigner1 优点总结2 缺点总结3 作者看法4 学习视频 二 立创EDA1 优点总结2 缺点总结3 作者看法4 学习视频 总结 前言 在上篇学习完 基于STM32的最小系统电路设计 后 xff0c 我们
  • stm32F103移植uc/OS-III实现多任务

    文章目录 一 UCOS操作系统介绍1 操作系统2 多任务3 uC OS III 二 STM32F103C8移植uCOSIII1 stm32cubeMX工程建立1 配置SYS和RCC2 配置串口3 配置GPIO4 配置时钟树5 生成keil文
  • 单片机_第6章 单片机的定时/计数器

    建议配合本专栏的文章 单片机 第6章 实验 一起使用 目录 6 1 定时 计数器的结构与工作原理 定时 计数的三种方式 xff08 不重要 xff09 6 1 1 定时 计数器的基本原理 6 1 2 定时 计数器的结构 6 2 定时器的控制
  • (学习笔记)机器人自主导航从零开始第八步——在ROS上运行RPLIDAR A2M7激光雷达

    本文参考资料 xff1a GitHub Slamtec rplidar ros https github com slamtec rplidar ros 前言 WSL2不支持外部USB设备连接 xff0c 即使安装开源usbipd win项
  • 阿里云新购服务器后,把旧服务器整个转移过去

    1 针对旧服务器创建镜像文件 xff0c 包括系统盘和数据盘 xff1b 2 新购买的服务器使用生成的镜像 xff0c 就可以完全复制过来 如果你是复制到另外一台旧的服务器 xff1a 1 针对旧服务器创建镜像文件 xff0c 包括系统盘和
  • (学习笔记)机器人自主导航从零开始第九步——RPLIDAR A2M7激光雷达使用hector_slam进行建图

    本文参考资料 xff1a 思岚A1激光雷达hector mapping建图与定位 欧俊岑的博客 CSDN博客 ROS中最常见的定位包还是gmapping xff0c gmapping是需要里程计的数据也就是IMU或者视觉里程计的数据 xff
  • ROS————tf2介绍及教程

    本文参考资料 xff1a tf2 ROS Wiki http wiki ros org tf2 目录 前言 一 tf2的作用以及为什么要使用tf2 1 安装demo 2 运行demo 3 上面的例子代表着什么 4 tf2工具 4 1使用vi