- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十课 机器人 tf 转换和 tf 树
什么是 tf
tf 是一个让用户随时间跟踪多个参考系的功能包,它使用一种树型数据结构,根
据时间缓冲并维护多个参考系之间的坐标变换关系,可以帮助用户在任意时间,将点、向量等数据的坐标,在两个参考系中完成坐标变换。一个机器人系统通常有很多
三维的参考系,而且会随着时间的推移发生变化,例如全局参考系( odom),机器人中
心参考系( base_footprint ),姿态传感器参考系( gyro_link ),地图参考系( map),
激光雷达参考系( laser )等等。 tf 可以以时间为轴,跟踪这些参考系。
tf 可以在分布式系统中进行操作,也就是说一个机器人系统中所有的参考系变换
关系,对于所有节点组件,都是可用的,所有订阅 tf 消息的节点都会缓冲一份所有参
考系的变换关系数据,所以这种结构不需要中心服务器来存储任何数据。
2.tf 的使用流程
假设在机器人运行过程中, 激光雷达可以采集到距离前方障碍物的数据,
这些数据
当然是以激光雷达为原点的测量值,
换句话说,也就是 laser
参考系下的测量值。 现在,
如果我们想使用这些数据帮助机器人完成避障功能。
由于激光雷达在机器人之上, 直接
使用这些数据不会产生太大的问题,
但是激光雷达并不在机器人的中心上,
在极度要求
较高的系统中, 会始终存在一个雷达与机器人中心的偏差值。
这个时候, 如果我们采用
一种坐标变换,将及激光数据从
laser 参考系变换到 base_footprint
参考下。
参考系之间的坐标变换并不复杂,但是在复杂的系统中,存在的参考系可能有很
多个,如果我们都通过自己计算的方式进行变换,那么在代码中很不好维护,而且代
码量也会随着参考系增加。 ROS提供的 tf 变换就是为解决这个问题而生的,
tf 功能包
提供了不同参考系之间变换的功能,我们只需要告诉
tf 树这些参考系之间的变换公式
tf 会自动管理我们所需要的参考系变换。
同时我们知道激光雷达和姿态传感器都是固定在机器人本体上的,他们和机器人
中心之间的位置是永远固定的,不会随着机器人运动而变化。所以
tf
提供了一种静态
发布固定 tf 转换的功能。下面的的代码片段是
Hawkbot 启动文件中的静态
tf 转换。
3.tf 广播( C++)
下面我们将创建一个 tf 广播,时刻发布坐标系之间的 tf 转换。首先需要为此项目创建一个新的 ros 包。 ,创建一个名为 learning_tf 的包,创建的新软件包依赖于 tf 、 roscpp 、 rospy 和 turtlesim 。
接下来我们创建 cpp 文件,用代码实现 tf 广播功能。
1
开始编辑 turtle_tf_broadcaster.cpp 文件,添加代码段。
请将以上代码输入到文件中(我们也提供了相关的源码包) ,让我们先编译它。 打开
CMakeLists.txt 文件,并在底部添加编译和链接语句,确保 cmake 正常解析。
做好以上步骤后,就可以开始编译 ROS节点。
测试 tf 广播,首先打开新的终端运行 roscore
然后运行 tf 广播代码,会在终端看到 turtle_tf_broadcaster 节点会以 2HZ 的速度发
布 odom-base_link 之间的 tf 广播。同样我们可以使用 rviz 或者 rqt_tf_tree 查看两个坐标系的变化。
4.tf 监听器( C++)
上述过程已经成功编写和编译了 tf 广播的节点,下一步我们开始编译监听器节点。
2
一个功能包中可以同时存在多个节点,所以我们只需要在创建好的 learning_tf 包中
新建监听节点。
打开新建的文件,添加以下代码。
打开 CMakeLists.txt 文件,并在底部添加编译和链接语句,确保 cmake 正常解析。
使用 catkin_make 编译刚创建的监听节点。
测试 tf 广播和监听节点
1 打开新的终端运行 roscore
2 打开新的终端运行 rosrun learning_tf turtle_tf_broadcaster 3 打开新的终端运行 rosrun learning_tf turtle_tf_listener
然后再运行监听节点的终端中可以看到如下 tf 坐标系推移过程。
打开 rviz ,基础参考系选择 Odom,然后就可以看到 base_link 坐标系随着时间运动。
5. 总结
本节课程学了了 ROS tf 库的使用,主要是利用 tf 功能包进行坐标系之间的 tf 广播和 tf 参考系的变化监听。深度掌握 tf 是机器人导航建图的前提。
3
文档评论(0)