机器人算法—ROS TF坐标变换

news2024/11/15 9:20:42
1.TF基本概念

(1)什么是TF?
TF是Transformations Frames的缩写。在ROS中,是一个工具包,提供了坐标转换等方面的功能。
tf工具包,底层实现采用的是一种树状数据结构,根据时间缓冲并维护多个参考系之间的坐标变换关系,可以帮助程序员在任意时间,将点、向量等数据的坐标,在两个参考系中完成坐标变换。
(2)为什么需要坐标转换?
坐标转换最主要要解决的是位置和姿态问题。
(3)什么是位置? 我在哪里说的就是位置问题。
(4)什么是姿态?我摆了个什么造型给你看,是横着的,竖着的,躺着的,这个就是姿态。
其实坐标转换解决的问题是 我在什么位置摆了个什么造型的问题。
其实描述一个物体的位置,我们有很多种方式。
例如我们描述一下月球的位置:
在这里插入图片描述
上图中,我们可以说月亮在地球的左上方xxx公里,也可以说在火星左下方xxx公里。

但是如果我们看看实时运行图时
在这里插入图片描述
我们不能简单的描述:
月亮在地球的左上方xxx公里,在火星左下方xxx公里。
因为他是实时运动的,这个时候我们要采用一定规则对坐标进行描述,还要实时动态的计算出来。
坐标描述规则就是位置和姿态。
位置的描述也都是采用相对的策略。
实时计算就是将两两相对的位置,转换为另外两两相对的位置。

2.TF使用的场景

在这里插入图片描述
在这里插入图片描述
机器人每个关节的传感和运动都是参考自身 以上面的机器人烹饪为例, 头部的视觉传感器(摄像头)参考自己, 计算出煎饼和锅距离自己的距离.
机器人的左手右手的运动又是根据自己的当前位置来控制空间坐标的移动.
如果想让机器人各个部件能够协同工作, 就要建立一种世界坐标系统, 可以让各个node节点坐标系的点和向量可以互相转换.

3.TF工作原理

坐标系
右手法则
在这里插入图片描述
姿态RPY
roll: 翻滚 pitch: 俯仰 yaw: 偏航

TF构成
ros中,tf工具包包含了三块内容:Broadcaster,Listener,TF转换工具
要弄清楚怎么使用TF工具包,首先我们要明确位置关系描述。
位置关系描述是通过相对坐标系来的。相对坐标系就是一个参照物,我们在这个参照物下,来说明自己的位置和姿态。

4.TF工作原理

在这里插入图片描述
ROS中提供的是TF转换工具。转换是通过两个部分来完成的。
Broadcaster负责向TF工具广播 参照物和自己的位置关系
Listener负责向TF工具查看 想要知道的两个物体间的相对坐标
TF工具底层是通过向量来去实现的。

5.案例一

TF开发流程

  1. 建立Broadcaster,将小乌龟1坐标发送给TF工具
void callback(const turtlesim::Pose::ConstPtr &message, tf::TransformBroadcaster broadcaster) {
    tf::Transform transform;
    //设置位置
    transform.setOrigin(tf::Vector3(message->x, message->y, 0));
    //设置姿态
    tf::Quaternion quaternion;
    quaternion.setRPY(0, 0, message->theta);
    transform.setRotation(quaternion);
    broadcaster.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", "turtle1"));
}

我们在小乌龟pose回调中,得到小乌龟相对于窗体的坐标信息(message)。
broadcaster在发送相对位置信息时,需要给定两个类型的数据:
在相对环境中的 坐标(origin),包含x,y,z坐标
在相对环境中的姿态 (rotation),包含x,y,z方向的转动情况
在发送数据时,要标明谁相对谁的位置。参照物我们认为是父坐标。

  1. 建立Broadcaster,将小乌龟2坐标发送给TF工具¶
    参考第1步骤

  2. 建立Listener,通过查看TF工具获得小乌龟1和小乌龟2间的相对坐标

tf::TransformListener listener;
ros::Rate rate(10);
while (ros::ok()) {
    tf::StampedTransform transform;
    try {
        listener.lookupTransform("/turtle2", "/turtle1", ros::Time(0), transform);
    } catch (exception e) {
        ROS_INFO_STREAM(e.what());
        rate.sleep();
        continue;
    }
    tf::Vector3 &origin = transform.getOrigin();
    double x = origin.x();
    double y = origin.y();

    const tf::Quaternion &quaternion = transform.getRotation();
    double theta = quaternion.z();
}

转换监听器listener可以从TF工具中,获得想要的两个物体间的相对坐标。
前一个参数是作为参照物存在的,坐标和姿态都是(0,0,0)
第二个参数是相对于第一个参数的参照物的坐标和姿态。

Reference

  1. TF工作原理

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

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

相关文章

使用ExLlamaV2量化并运行EXL2模型

量化大型语言模型(llm)是减少这些模型大小和加快推理速度的最流行的方法。在这些技术中,GPTQ在gpu上提供了惊人的性能。与非量化模型相比,该方法使用的VRAM几乎减少了3倍,同时提供了相似的精度水平和更快的生成速度。 ExLlamaV2是一个旨在从…

Day27|Leetcode 39. 组合总和 Leetcode 40. 组合总和 II Leetcode131. 分割回文串

Leetcode 39. 组合总和 题目链接 39 组合总和 本题目和前面的组合问题差不多,只不过这里能重复选取数字,还是要注意组合的定义,交换数字顺序还是算一个组合,所以这里还是用我们的startIndex来记录取的数字到哪里了,下…

在Linux服务器中查找mysql的配置文件并修改其内容并保存,清空mysql8.0以上默认开启SSL的配置,防止odbc无法连接的问题

------每个命令输完记得按【enter】回车键------- 1、查找mysql的配置文件命令-mysql的配置文件默认名是my.cnf: find / -name my.cnf 2、查看显示的配置文件内容: cat /etc/my.cnf 3、修改配置文件的内容: 使用vi 或vim 命令 vi /etc…

opencv-Canny 边缘检测

Canny边缘检测是一种经典的图像边缘检测算法,它在图像中找到强度梯度的变化,从而识别出图像中的边缘。Canny边缘检测的优点包括高灵敏度和低误检率。 在OpenCV中,cv2.Canny() 函数用于执行Canny边缘检测。 基本语法如下: edges…

开始通过 Amazon SageMaker JumpStart 在亚马逊云科技上使用生成式 AI

目前,生成式 AI 正受到公众的广泛关注,人们围绕着许多人工智能技术展开讨论。很多客户一直在询问有关亚马逊云科技生成式 AI 解决方案的更多信息,本文将为您进行解答。 这篇文章通过一个真实的客户使用案例概述了生成式 AI,提供了…

CSS特效015:7个小球转圈圈加载效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…

Redis篇---第十三篇

系列文章目录 文章目录 系列文章目录前言一、redis的过期策略以及内存淘汰机制二、Redis 为什么是单线程的三、Redis 常见性能问题和解决方案?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看…

bootstarp+springboot基于Java的教学仪器设备商城销售网站_o9b00

1、商品分类功能 商品分类是教学仪器设备销售网站中十分重要的一部分,它能够提高用户在网站上的浏览速度,并方便用户快速找到自己需要的商品。因此,需要对该功能进行分析和设计,确保其体验性、可用性和易用性。可以将商品分为多个…

最护眼的灯是白炽灯吗?专业的护眼台灯推荐

以前科技发展落后,晚上需要照明时也只有白炽灯可以使用,这也是迫不得已的事情。白炽灯最大的优点就是成本便宜,而且显色比较接近自然光。不过缺点也有着不少,例如:光线分布不均匀、刺眼、能耗高、寿命短等等。 如今时…

Docker Swarm总结

1、swarm 理论基础 1.1 简介 Docker Swarm 是由 Docker 公司推出的 Docker 的原生集群管理系统,它将一个 Docker 主机池变成了一个单独的虚拟主机,用户只需通过简单的 API 即可实现与 Docker 集群的通 信。Docker Swarm 使用 GO 语言开发。从 Docker 1.…

ssm+vue的药店药品信息管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的药店药品信息管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结…

HTML+CSS+ElementUI搭建个人博客静态页面展示(纯前端)

网站演示 搭建过程 技术选取 HTML/CSSVUE2ElementUI(Version - 2.15.14) 环境配置与搭建 安装指令 1. 先确保你的电脑已经安装好了npm和node npm -vnode -v2. ElementUI下载&#xff0c;推荐使用 npm 的方式安装 npm i element-ui -S3. CDN引入 <!-- 引入样式 --> <…

C语言——用递归函数计算n!

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 比别人多一点努力&#xff0c;你…

Python精讲 | 超好用的f-string和Python3.12的新增特性

大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 上个月&#xff0c;Python发布了3.12版本&#xff0c;新增了一些特性&#xff0c;并且提升了效率。这个在之前文章中有提过&#xff1a;Python3.12发布,性能提升5% 新增特性之一&#xff0c;就是扩展了f-string的语…

【教3妹学编程-算法题】最大异或乘积

3妹&#xff1a;2哥&#xff0c;你有没有看到新闻“18岁父亲为4岁儿子落户现身亲子鉴定” 2哥 : 啥&#xff1f;18岁就当爹啦&#xff1f; 3妹&#xff1a;确切的说是14岁好吧。 2哥 : 哎&#xff0c;想我30了&#xff0c; 还是个单身狗。 3妹&#xff1a;别急啊&#xff0c; 2…

代码随想录第六十三天 | 单调栈:寻找 左边 / 右边 距离当前元素最近的 更小 元素的 下标(暴力,双指针,单调栈)(84);代码随想录主要题目结束

1、寻找 左边 / 右边 距离当前元素最近的 更小 元素的 下标 1.1 leetcode 84&#xff1a;柱状图中最大的矩形 第一遍代码思路错了&#xff0c;如&#xff1a;输入[2,1,2]&#xff0c;对于2&#xff0c;因为比栈顶元素1大&#xff0c;然后就会直接得出2&#xff08;1&#xff…

wincc定时器功能介绍

1定时器功能介绍 WinCC中定时器的使用可以使WinCC按照指定的周期或者时间点去执行任务&#xff0c;比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。WinCC已经提供了一些简单的定时器&#xff0c;可以满足大部分定时功能。但是在有些情况下&#xff0c…

python plot绘图

使用python绘制t-sne图&#xff0c;并保存 一下是一个将que_im_features向量可视化的例子&#xff1a; def emb_save(que_im_features,i):# 向量[75, 640, 11, 11], episodeimport numpy as npimport pandas as pdfrom sklearn import manifoldimport matplotlib.pyplot as p…

西门子S7-200SMART常见通讯问题解答

1台200SMART 如何控制2台步进电机&#xff1f; S7-200SMART CPU最多可输出3路高速脉冲&#xff08;除ST20外&#xff09;&#xff0c;这意味着可同时控制最多3个步进电机&#xff0c;通过运动向导可配置相应的运动控制子程序&#xff0c;然后通过调用子程序编程可实现对步进电…