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

2024-01-02 02:12

本文主要是介绍ROS TF坐标变换 - 位姿描述与消息类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 一、位姿描述
  • 二、位姿相关消息体类型
    • 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 的全部信息,如下:

在这里插入图片描述

这篇关于ROS TF坐标变换 - 位姿描述与消息类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/561061

相关文章

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤