ROS tf
ROS中tf是核心基础功能之一,负责将世界中的所有link联系在一起,记录带有时间戳的相对三维坐标关系,让我们可以随时得到不同link之间的相对位置关系。
基础使用
查看tf信息
1. 创建link关系图
此命令将会创建一个pdf类型的tf关系图,可以查看发布者、频率等信息
$ rosrun tf view_frames
2.在rqt中查看link关系图
$ rosrun rqt_tf_tree rqt_tf_tree
3. 终端中输出tf变换关系
$ rosrun tf tf_echo [reference_frame] [target_frame]
4. rviz中查看
打开rivz,点击Add添加tf查看
程序中使用
ros wiki 中给出了比较详细的介绍与教程,包括命令行工具、教程、API接口等,可以进行初步的了解与学习。
API链接 tf,支持python与C++两种语言。
以下使用C++语言举例:
最常用的是tf::Transformer 、 tf::TransformBroadcaster 和 tf::TransformListener,分别负责转换、发布与监听的任务。
Transformer
- frameExists()
查看frame是否存在 - lookupTransform()
查看两个frame之间的转换关系 - transformPose()
转换获的得一个posestamped值基于某坐标系的位姿 - waitForTransform()
等待两个坐标系的转换发出
示例1:
获取两个坐标系的转换关系
说明: 获取tf时经常会抛出异常,所以使用循环不断读取直到获取,其中waitForTransform()也可以提高获取概率
rate = rospy.Rate(10.0)
listener = tf.TransformListener()
get_pose = False
while not rospy.is_shutdown() and not get_po