关于TF转换信息(Transforms)的理解

本文主要内容参考自ROS wiki:tf/Overview/Transformations,在加入了自己的一些理解的同时,我也对原文进行了适当的修改。原文使用Creative Commons Attribution 3.0,本文使用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议协议,若使用本文,请自觉遵守相关协议。

在tf中,我们使用tf工具tf_echo获取到的转换信息十分令人费解。前面的文章中我们已经对其做了简单的解释,这里我们将对其进行详细的解释。

坐标系和点

在ROS中坐标系总是3维的,而且是用右手表示的,即X轴指向前方,Y轴指向左方,Z轴指向上方。关于更多ROS约定信息,具体可以参考ROS的REP文档:[REP 103]

坐标系中的点在ROS中用tf::Point来表示,它其实等价于符号类型btVector3。下面我们约定点 p 在坐标系W中表示为 Wp

坐标位姿

在tf中,两个坐标系的关系(也就是转换信息)用一个6自由度的相对位姿表示:平移量(translation)+旋转量(rotation)。下面是某两个坐标系的转换关系:

NOTE:这里的平移是指3维坐标系中的平移。

At time 1416409795.450
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.914, 0.405]
            in RPY [0.000, -0.000, 2.308]

如果 W A是两个坐标系,那么 A W中的相对位姿可以用从 W 的原点到A的原点的平移量和 A 中坐标轴(xyz)在W中的旋转量来表示。这句话比较绕,继续往下读,你就会理解这句话的意思。

平移量(translation) W 坐标中的一个向量,这里用WtA表示。在ROS中用tf::Vector3来表示,也等价于btVector3

A的旋转量(rotation)用一个旋转量矩阵(rotation matrices)来表示,这里用 WAR 来表示,其中 R A的上角标,读作:坐标系 A 的旋转量在W坐标系中的表示。另外, R 由三个单位向量构成,WXA WYA WZA ,即 A 的X轴在W坐标系中的表示、 A 的Y轴在W坐标系中的表示、 A 的Z轴在W坐标系中的表示。

tf中没有表示旋转量矩阵(rotation matrices)的类型,而是通过四元数类型tf::Quaternion来表示,它等价于btQuaternion类型。在tf中,存在从旋转量矩阵(rotation matrices)得到四元数的方法:

static tf::Quaternion   tf::createQuaternionFromRPY (double roll, double pitch, double yaw)
static Quaternion   tf::createQuaternionFromYaw (double yaw)
static geometry_msgs::Quaternion    tf::createQuaternionMsgFromRollPitchYaw (double roll, double pitch, double yaw)

当然,反过来也可以,即我们也可以从四元数得到旋转量矩阵(rotation matrices)。具体可以参考ROS的API文档:transform_datatypes.h File Reference

在同类坐标系中,描述平移量(translation)和旋转量(rotation)是很方便的,只需要一个4x4的矩阵 WAT 即可,该符号读作:坐标系 A 相对于坐标系W的位姿。这个相对位姿的构造如下所示:

WAR0WtA1

在tf中,相对位姿可以用tf::Pose表示,他等价于符号类型btTransform。在这个类中我们可以通过getRotation()或者getBasis()获取相对位姿的旋转量,也可以通过getOffset()获取相对位姿的平移量(translation),具体可以参考:btTransform class reference

用于点的映射

如果将坐标位姿信息用于点的映射的话,那么 WAT 还有另外一个意思:将 A 坐标系中的点转换到W坐标系中。其实,根据这个语法关系可以得出这样一个表达式:

WAT×Ap=Wp

映射和转换都对应tf::Transform类型,它等价于符号类型btTransform,所以基本上位姿偏移和转换具有相同的类型。转换可以通过旋转量矩阵(rotation matrices)(或者旋转的四元数)和平移向量(vectors for the translation)来创建,具体可以参考btTransform class reference

转换的逆

转换 WAT 的逆是转换 AWT 的逆。点映射的逆是原转换的反方向。转换的逆可以通过btTransform的成员函数inverse()得到。

参考资料

  1. ROS wiki:tf/Overview/Transformations
  2. ROS REP文档:[REP 103]
  3. ROS API:transform_datatypes.h File Reference
  4. ROS API:btTransform class reference
  5. gaoxiang的cnblog:视觉SLAM中的数学基础 第二篇 四元数

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

  • 12
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值