配置使用tf库

1、tf介绍

许多ROS功能包,都要求利用tf软件库,以机器人能识别的变换树的形式进行发布。变换树代表了不同坐标系之间的变换和旋转。

如果用户自己管理坐标转换关系,意味着需要自己去保存,以及在需要的时候调用。但是,这种做法的缺陷是随着坐标转换关系数量的增加,而愈加麻烦。

通过利用tf来管理这种关系,只需要把他们添加到转换树(transform tree)中。转换树中的每一个节点都对应着一类坐标系,节点之间的连线即是两个坐标相互转换的一种表示,一种从当前节点到子节点的转换表示。

Tf利用树结构的方式,保证了两个坐标系之间的只存在单一的转换,同时假设节点之间的连线指向是从parent到child。

如图所示,假设一个简单的机器人,只有一个基本的移动机体和挂在机体上方的扫描仪,传感器挂在机体中心的前方10cm,高度20cm处,分别定义两个坐标系:一个对应于机体中心点的坐标系“base_link”,一个对应于扫描仪中心的坐标系“baser_laser”,则从传感器到机体的坐标转换关系应该为(x:0.1m,y:0.0m, z:0.2m),同时需要创建两个节点。为了定义两者的关系,首先需要决定谁是parent,谁是child,因为tf假设所有的转换都是从parent到child,谁是parent是有差别的。建立关系以后,从“base_laser”的数据到“base_link”的转换过程可以通过简单的调用tf库完成。

在这里插入图片描述

2、创建源码包“robot_setup_tf”,并添加依赖包roscpp,tf 和 geometry_msgs:
在这里插入图片描述

3、编写广播变换broadcaster代码,创建节点来发布转换关系baser_laser->base_link:

在这里插入图片描述

4、编写调用变换listener代码,创建节点来利用转换关系,将从传感器获取的数据转换到机体对应的数据,即从“base_laser”→到“base_link”坐标系的转换:

在这里插入图片描述

5、构建代码:

a、在CMakeList.txt文件末尾添加生成和链接的脚本:
在这里插入图片描述

b、回到工作空间根目录进行编译:

在这里插入图片描述

6、运行代码:

a、在终端中运行roscore:

在这里插入图片描述

b、打开一个新的终端,运行 tf_broadcaster:

在这里插入图片描述

c、在第三个终端中运行tf_listener,将从传感器坐标系获取的虚拟点,变换到机体坐标系,结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值