ROS学习笔记(13)坐标变换(TF和TF2)

news/2024/11/29 7:44:22/

0.前提

我翻了一下我以前的教程发现我居然没有讲过TF坐标转换,那现在补上。在机器人学中坐标转换是一个极为重要的概念、内容,在大量的科技公司招聘机器人岗位的人才时掌握机器人运动学正解和逆解等都是加分项。机器人在实际应用当中会涉及到大量的位置和姿态变换,引入坐标系和坐标系变换对求解位姿是及其重要的。而在ROS当中的坐标变换系统由TF和TF2功能包提供。)

1.TF和TF2介绍

1.TF

TF是一个可让使用者跟踪多个坐标系变化的功能包,使用树形数据结构,根据时间缓冲、维护多个坐标系的坐标变换关系,帮助开发者完成点、向量等坐标系的变换。tf/Tutorials - ROS Wiki

使用TF功能包,总的说有两步:

1.监听TF变换

接收并缓存系统中发布的所有坐标变换数据,查询所需坐标变换关系。

2.广播TF变换

广播坐标系间的变换。每个广播都可直接将坐标系变换关系插入TF树中,无需进行同步。

2.TF和TF2的主要变化

在ros官网中我们可以得知TF已经被TF2,官方也是建议直接使用TF2,因此本文对TF只进行简单讲解。tf2和tf的区别

1.添加/tf_static主题

2.ROS独立核心

3.新的API模板

4.python支持的更新

5.操作查询

6.删除对tf_prefix的支持

3.TF2

本质上TF2和TF实现的是同一种效果,但TF2提供了 TF 功能的超集

1.安装

 sudo apt-get install ros-noetic-turtle-tf2 ros-noetic-tf2-tools

注意:先使用roscore查看自己的ros版本


2.运行

roslaunch turtle_tf2 turtle_tf2_demo.launch

注意:如果之前没有对python3进行软连接会报错

解决办法就是对python3进行软连接

sudo ln -s /usr/bin/python3 /usr/bin/python

 ok,这下就能正常运行了

点击终端,你可以用方向键控制你的小海龟,你会发现你的小海龟会被另一个小海龟追逐。

原理就是后方的小海龟会同步前方小海龟得位置信息,然后运动到位置点。

3.What's happening?

演示使用了TF2库创建了三个坐标系:世界坐标系、小海龟1的坐标系、小海龟2的坐标系。使用tf2广播器发布海龟坐标系,使用tf2侦听器计算海龟帧差异,移动小海龟2跟随小海龟1。

4.tf2工具

4.1.view_frames

view_frames创建tf2通过ROS广播的帧图表。

打开两个终端,分别输入:

roslaunch turtle_tf2 turtle_tf2_demo.launch
rosrun tf2_tools view_frames.py

会看到两条消息,tf2侦听器正在侦听通过ROS广播的帧,绘制帧连接方式的树。

查看树:

evince frames.pdf

 rosrun rqt_tf_tree rqt_tf_tree 

 

这里可以看到tf2广播的3个帧(坐标系),world、turtle1和turtle2,世界(world)是其它两个的父帧。view_frames还报告一些诊断信息,说明何时接收最旧和最新的帧转换,以及 TF2 帧发布到 TF2 以进行调试的速度。

4.2.tf_echo

tf_echo报告ROS广播的任意两帧间的转换。(查看指定坐标系间的变换关系)

rosrun tf tf_echo [reference_frame] [target_frame]

tf_echo侦听器接收到ROS广播的帧时,显示: 

5.Rviz和TF2

我们可以通过rviz更直观的看到坐标系间的关系。我们控制我们的小海龟1时会看到坐标系间的变换关系。

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

ok,俺不多说了,具体请看tf2/教程 - ROS Wiki


http://www.ppmy.cn/news/1433008.html

相关文章

搭建安全访问日志监控报警系统 ,监控nginx日志和系统安全日志,有扫描和黑客攻击,触发报警

搭建一个安全访问日志监控报警系统,特别是用于监控Nginx日志和系统安全日志,可以帮助及时发现并响应潜在的扫描和黑客攻击。这一系统通常包括日志收集、存储、分析和报警四个关键部分。下面是一个实用的步骤指南,使用开源工具来构建这一系统&…

实现Spring底层机制(二)

文章目录 阶段2—封装bean定义信息到Map1.代码框架图2.代码实现1.文件目录2.新增注解Scope存储单例或多例信息Scope.java3.修改MonsterService.java指定多例注解4.新增bean定义对象存储bean定义信息BeanDefinition.java5.修改pom.xml增加依赖6.修改容器实现bean定义信息扫描Sun…

MySQL事务(学习)

1.事务的特性是什么? 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 事务包含了4个特性ACID 事务4个特性…

LeetCode-15-三数之和

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的…

制氢机远程监控运维方案

制氢机远程监控运维方案 在当今能源转型的大背景下,氢能作为清洁、高效且可再生的能源载体,其重要性日益凸显。而制氢机作为氢能产业链中的关键设备,其稳定运行与高效运维对于保障氢气供应、推动氢能产业健康发展至关重要。在此背景下&#…

Meta推动全球AI助手革命:Llama 3引领技术前沿,Meta AI助手全面融入社交媒体平台

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Redis之路系列(2)纸上得来终觉浅(上)

02 纸上得来终觉浅(上) 文章内容基于redis6,本章节介绍了redis的实际应用,主要包含:大量键值对保存的案例场景,海量key时的聚合计算、排序计算、状态统计、基础统计的应用 大量键值对保存 场景案例 有这么一个需求场景&#xff…

【Qt事件】

Qt是一个流行的C跨平台应用程序开发框架,它提供了丰富的事件处理机制来响应用户输入和系统事件。Qt中的事件被封装为事件对象,并由事件循环系统进行分发和处理。下面是一些常见的Qt事件: 鼠标事件:包括鼠标按下、释放、移动、双击…