ROS TF坐标变换 - 位姿描述与消息类型

news2024/11/27 1:48:50

目录

  • 一、位姿描述
  • 二、位姿相关消息体类型
    • 2.1 geometry_msgs/TransformStamped
    • 2.2 geometry_msgs/PoseStamped

在机器人系统中,有许多运动机构和传感器,为了描述他们之间的相对位姿关系,分别为他们定义了各自的坐标系,通过坐标系转换,就可以知道每个时刻各个组件的位姿。

ROS中通过TF包封装了常用的坐标系转换工具,目前ROS使用的是TF2,早在ROS Hydro以前,ROS使用的是TF。TF2相对TF,更加易用,效率更高,功能更加丰富。

ROS中通过类似topic的形式发布(广播)与订阅(监听)各组件间的位姿关系,接下来我们介绍这一机制。

一、位姿描述

位姿,即位置和姿态角。在二维空间中,使用二维点和相对于x轴正向的夹角(弧度)描述一个位姿:
P o s e 2 D = ( x , y ; θ x ) Pose_{2D}=(x,y; \theta_{x}) Pose2D=(x,y;θx)
类似的,在三维空间中,应该使用三维点和相对于xyz三个轴的夹角(弧度)描述一个位姿:
P o s e 3 D = ( x , y , z ; θ x , θ y , θ z ) Pose_{3D}=(x,y,z; \theta_{x},\theta_{y},\theta_{z}) Pose3D=(x,y,z;θx,θy,θz)
但在执行三维位姿变换时,这种表示会有一些问题。其中相对三轴的角度表示方法我们称为欧拉角(该方法是数学家欧拉提出的),欧拉角变换,需要相对XYZ轴进行三次变换,如果第二次变换角为 ± 9 0 ∘ \pm90^\circ ±90 时,第一次变换和第三次变换使用同一个轴,这就是欧拉角的万向锁问题。

所以欧拉角并不适用于三维变换计算,但由于其直观性,通常出现在人机交互场景,内部计算通常使用四元数。

四元数是复数空间的定义,即我们升了一个维度来表示三维旋转,一个四元数由一个实部和三个虚部组成:
q = q 0 + q 1 i + q 2 j + q 3 k q=q_0+q_1i+q_2j+q_3k q=q0+q1i+q2j+q3k
其中 i , j , k i,j,k i,j,k 满足:
{   i 2 = j 2 = k 2 = − 1   i j = − j i = k   j k = − k j = i   k i = − i k = j \begin{cases} \ i^2=j^2=k^2=-1\\ \ ij=-ji=k\\ \ jk=-kj=i\\ \ ki=-ik=j \end{cases}  i2=j2=k2=1 ij=ji=k jk=kj=i ki=ik=j
ROS的TF2中提供了相关的消息体格式与计算接口。

二、位姿相关消息体类型

常用的消息体有:geometry_msgs/TransformStampedgeometry_msgs/PoseStamped

geometry_msgs/TransformStamped 用于表示变换的信息(平移+旋转)

geometry_msgs/PoseStamped 用于表示坐标点的位姿(位置+姿态角)

2.1 geometry_msgs/TransformStamped

geometry_msgs/TransformStamped.msg 的内容如下:

Header header
string child_frame_id # the frame id of the child frame
Transform transform

说明:

它由三部分组成,headerchild_frame_idtransform

其中,headerstd_msgs/Header 类型,通常用于记录时间戳和坐标系id,结构如下:

uint32 seq      # 序列号
time stamp      # 时间戳
string frame_id # 父坐标系id

child_frame_id 用于表示变换中的子坐标系id

transform 是该变换的信息,结构如下:

Vector3 translation # 一个三维向量,表示平移
Quaternion rotation # 一个四元数,表示旋转

使用 rosmsg info geometry_msgs/TransformStamped 可以查看 geometry_msgs/TransformStamped 的全部信息,如下:

在这里插入图片描述

2.2 geometry_msgs/PoseStamped

geometry_msgs/PoseStamped 的内容如下:

Header header
Pose pose

说明:

它由两部分组成,headerpose

同样,header 用于记录时间戳和坐标系id,

pose 是坐标点的位姿,结构如下:

Point position         # 一个三维坐标,表示位置
Quaternion orientation # 一个四元数,表示姿态角

同样,使用 rosmsg info geometry_msgs/PoseStamped 可以查看 geometry_msgs/PoseStamped 的全部信息,如下:

在这里插入图片描述

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

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

相关文章

合伙企业法关于合伙企业的要求

合伙协议可以载明合伙企业的经营期限和合伙人争议的解决方式。 合伙协议经全体合伙人签名、盖章后生效。合伙人依照合伙协议享有权利,承担责任。 经全体合伙人协商一致,可以修改或者补充合伙协议。 申请合伙企业设立登记,应当向企业登记机关提…

B2005 字符三角形(python)

a input() print( a) print( a a a) print(a a a a a)python中默认输入的是字符型,第一句就是输入了一个字符赋给a python中单引号内的也是字符串,用print输出需要连接的字符串时用加号加在后面即可

Spring通信传参的方法

Spring通信传参的方法 目录概述需求: 设计思路实现思路分析1.简单参数传递2.复合参数3.动态参数 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better resul…

爬虫基础一(持续更新)

爬虫概念: 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程 分类: 1,通用爬虫:抓取一整张页面数据 2,聚焦爬虫:抓取页面中的局部内容 3,增量式爬虫&…

消息中间件常见知识点

一:消息队列的主要作用是什么? 1.消息队列的特性: 业务无关,一个具有普适性质的消息队列组件不需要考虑上层的业务模型,只做好消息的分发就可以了,上层业务的不同模块反而需要依赖消息队列所定义的规范进行…

JVM篇:JVM的简介

JVM简介 JVM全称为Java Virtual Machine,翻译过来就是java虚拟机,Java程序(Java二进制字节码)的运行环境 JVM的优点: Java最大的一个优点是,一次编写,到处运行。之所以能够实现这个功能就是依…

go语言语法基础

文章目录 前言一、输入和输出常用的字符串格式化符号 二、注释三、Go常用基本语言数据类型数字类型布尔类型字符类型变量与常量数组和切片数组切片 map类型创建map增删改查特别提醒 指针 四、运算符五、条件判断语句if系列switch六、循环语句for循环标准写法死循环while循环do …

java设计模式学习之【观察者模式】

文章目录 引言观察者模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用观察者示例代码地址 引言 想象你在一个在线拍卖会上竞标一件珍贵的艺术品。每当有人出价更高,系统都会立即通知你。这个实时更新机制使你可以做出快速反应。这种模式&#x…

Linux之进程管理

什么是进程 在linux中每个执行的程序都称为一个进程,每个进程都分配一个ID号(pid进程号)。每个进程都可能以两种方式存在,即前台和后天。前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但屏幕…

hugo-theme-kiwi V0.0.2 博客主题上新了时间轴

至此佳节,我在此给正在屏幕前浏览本文的您和您的家人,恭祝元旦快乐,虽然,这声祝福是晚了,但却不妨碍我我由内心深处对您和您的家人的诚挚祝福! 新的一年,从这一天逐渐步入我们的生活&#xff0c…

web等保评测需要实机查看的操作系统、服务器、数据库和应用部分

“等保测评”全称是信息安全等级保护测评。是经公安部认证的具有资质的测评机构,依据国家信息安全等级保护规范规定,受有关单位委托,按照有关管理规范和技术标准,对信息系统安全等级保护状况进行检测评估的活动。 本文陆续将遇到的…

『番外篇九』SwiftUI 实战:打造一款“五脏俱全”的网络图片显示 App(上)

概览 俗话说得好:“读书破万卷,下笔如有神”。不过如果把这句话放到编程的学习上可就不那么贴切了。 要想熟练掌握一门编程语言,光看书是绝对不够的。我们还需尽可能的多撸码、早撸码,撸到无路可退、海枯石烂才有可能一窥门径。 在本篇和续篇博文中,我们将和小伙伴们一起…

手把手教你绘制和解读实用R列线图(Nomogram):从入门到精通

一、引言 列线图(Nomogram)是一种常用的数据可视化工具,它能够直观地展示多个变量之间的关系,并帮助我们理解和解释复杂的数据模式。通过绘制列线图,我们可以将各种变量的影响和相互关联转化为图形化的表示&#xff0c…

2001-2021年各省高速公路里程数据

2001-2021年全国及各省高速公路里程数据 1、时间:2001-2021年 2、指标:高速公路里程 3、范围:全国及30个省市 (不含西藏) 4、来源:各省NJ、省TJGB、第三产业TJNJ (无缺失) 5、指…

鸿蒙项目方舟框架(ArkUI)之线性布局容器Stack组件

鸿蒙项目方舟框架(ArkUI)之线性布局容器Stack组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Stack组件 堆叠容器,子组件按照顺序依次入栈,后一个子组件覆盖前一个子组件。 …

docker Mysql-udf-http

1.Mysql-udf-http镜像已上传到dockerhub中 docker pull heidaodageshiwo/mysql-udf-http:v1 2.启动镜像(默认密码root1234) docker run -tid -p 3306:3306 --namemysql-udf-http --privilegedtrue heidaodageshiwo/mysql-udf-http:v1 3.命令 [rootlocalhost ~]# docker im…

Navisworks各版本安装指南

Navisworks 下载链接 https://pan.baidu.com/s/1DGD9TbSa6Xjd-HoySd5AYg?pwd0531 1.鼠标右击【Navisworks2024(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 Navisworks2024(64bit)】。 2.打开解压后的文件夹,双击打…

大甩卖-(CWRU)轴承故障诊数据集和代码全家桶

Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Python轴承故障诊断 (一)短时傅里叶变换STFT Python轴承故障诊断 (二)连续小波变换CWT_pyts 小波变换 故障-CSDN博客 Python轴承故障诊断 (三)经验模态分解EMD_轴承诊断 pytorch-CSDN博客 Pytorch…

大数据规模存储的几个核心问题

文章目录 三个关键问题RAID(独立磁盘冗余阵列)RAID是如何解决关于存储的三个关键问题?水平伸缩 大规模数据存储都需要解决几个核心问题,这些问题都是什么呢? 三个关键问题 1.数据存储容量的问题 既然大数据要解决的…

ROS TF坐标变换 - TF树

目录 一、TF树介绍二、TF2与TF三、构建TF树四、rviz查看TF坐标关系 一、TF树介绍 在机器人系统中,存在运动学模型和动力学模型。对于刚体机器人,动力学模型基于刚体动力学,代表机器人系统在运动过程中力/力矩与其运动状态的变化关系。而运动…