本文主要内容参考自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
在坐标系
坐标位姿
在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
和
平移量(translation)是
W
坐标中的一个向量,这里用tf::Vector3
来表示,也等价于btVector3
。
A的旋转量(rotation)用一个旋转量矩阵(rotation matrices)来表示,这里用
WAR
来表示,其中
R
是
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
相对于坐标系
在tf中,相对位姿可以用tf::Pose
表示,他等价于符号类型btTransform
。在这个类中我们可以通过getRotation()
或者getBasis()
获取相对位姿的旋转量,也可以通过getOffset()
获取相对位姿的平移量(translation),具体可以参考:btTransform class reference。
用于点的映射
如果将坐标位姿信息用于点的映射的话,那么
WAT
还有另外一个意思:将
A
坐标系中的点转换到
映射和转换都对应tf::Transform
类型,它等价于符号类型btTransform
,所以基本上位姿偏移和转换具有相同的类型。转换可以通过旋转量矩阵(rotation matrices)(或者旋转的四元数)和平移向量(vectors for the translation)来创建,具体可以参考btTransform class reference。
转换的逆
转换
WAT
的逆是转换
AWT
的逆。点映射的逆是原转换的反方向。转换的逆可以通过btTransform
的成员函数inverse()
得到。
参考资料
- ROS wiki:tf/Overview/Transformations
- ROS REP文档:[REP 103]
- ROS API:transform_datatypes.h File Reference
- ROS API:btTransform class reference
- gaoxiang的cnblog:视觉SLAM中的数学基础 第二篇 四元数
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。