2.tf在多机器人编队中的应用

0x00 tf简介

 什么是tf,tf是一个让用户随时间跟踪多个参考系的功能包,它使用一种树型数据结构,根据时间缓冲并维护多个参考系之间的坐标变换关系,可以帮助用户在任意时间,将机器人中点、向量等数据的坐标,在两个参考系中完成坐标变换。

tf可以做什么,一个机器人系统通常有很多三维的参考系,而且会随着时间的推移发生变化,例如全局参考系(world frame),机器人中心参考系(base frame),机械爪参考系(gripper frame),机器人头参考系(head frame)等等。tf可以以时间为轴,跟踪这些参考系(默认是10秒之内的),并且允许用户提出如下的问题:

  • 五秒钟之前,机器人头参考系相对于全局参考系的关系是什么样的?
  • 机器人夹取的物体相对于机器人中心参考系的位置在哪里?
  • 机器人中心参考系相对于全局参考系的位置在哪里?

tf可以在分布式系统中进行操作,也就是说一个机器人系统中所有的参考系变换关系,对于所有节点组件,都是可用的,所有订阅tf消息的节点都会缓冲一份所有参考系的变换关系数据,所以这种结构不需要中心服务器来存储任何数据。下图是一个机器人中的tf系统,有了tf,机器人各个关节才能相互协调完成各种复杂的任务,没有它,就如同一尊雕塑没有生气。

0x01 编队为什么需要tf

要设计基于领航者-跟随者的多机器人编队,首先要产生编队,再保持编队。产生编队需要使两个机器人或多个机器人有固定的位姿,就是领航者机器人在运动过程中,使跟随者能够运动到领航者的设定好的位置,这个过程需要知道领航者和跟随者的坐标关系,自然就想到ROS中的tf,那么在编队中tf是如何获取领航者和跟随者之间的坐标关系呢?

  • 建立World坐标系,Robot1和Robot2在World坐标系中有自己的坐标;
  • Robot1向World广播自己的坐标,d1为Robot1在World中的方向,Robot2向World广播自己的坐标,d2为Robot2在World中的方向;
  • Robot2通过tf得知Robot1在以Robot2为原点的坐标;
  • Robot2坐标系下Robot1的坐标包括(x,y,z)和(x,y,z,w)即d1和d2之间的旋转关系;
  • tf_tree如下。

0x02 基于ROS的领航者-跟随者原理介绍

有了上文中的领航者和跟随者之间的坐标关系,我们需要给跟随者控制命令来产生编队,如果直接让跟随者冲向领航者,那么很有可能两个机器人会相撞。所以我们设计一个虚拟机器人,这个虚拟机器人与领航者有着固定的位姿,要产生编队的话,就需要跟随者与虚拟机器人重合。下图中 Robot1是领航者,Robot2是跟随者,Wingman1是Robot1的虚拟机器人,与Robot1有固定的位姿关系。

  • Robot1向World广播自己的坐标,Robot2向World广播自己的坐标,Robot1产生固定位姿关系的Wingman1;
  • Robot2通过tf得知Wingman1在以Robot2为原点的坐标;;
  • 将Robot1和Robot2的编队问题转化为Robot2对Wingman1的跟随问题。根据tf获取到的跟随者Robot和对应虚拟Robot的坐标关系,控制跟随者Robot运动;
  • 不同队形可产生不同位姿的Wingman,不同个数的Wingman。

如果想变换队形,我们只需要调整虚拟机器人相对于领航者的位姿,还可以添加多个虚拟机器人,扩充编队的数量。Robot1是领航者,Wingman1,Wingman2,Wingman3是虚拟机器人,Robot2,Robot3,Robot4是跟随者。

队形1
队形2

0x03 效果展示

Robot1是领航者,虚拟Robot与Robot1固定位姿关系,在Robot1运动过程中,跟随者Robot2跟随Wingman1运动。

0x04 总结与展望

本文介绍了领航者-跟随者队形产生的一种思路,添加虚拟机器人,使跟随者跟踪虚拟机器人。如果要产生不同的队形,则调整虚拟机器人的位置和数量。而且我们的三轮全向移动小车能够全向移动,不需要调整车头方向,使得队形的产生更为便利。接下来的工作是怎么设计控制器保持跟随者的速度从而保持编队效果,如果遇到障碍物又该如何设计合理的算法使得机器人避障然后恢复队形。

0x05 参考资料

[1].基于ROS的多机器人编队仿真[OL].古月居 https://www.guyuehome.com/8907.

[2].ROS探索总结(十二)—— 坐标系统[OL].古月居 https://www.guyuehome.com/265.

[3].Writing a tf listener (Python)[OL].http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20listener%20%28Python%29.

[4].ROS探索总结(十八)——重读tf[OL].古月居 https://www.guyuehome.com/279

[5].tf[OL].http://wiki.ros.org/tf.

0x06 问题反馈

大家在按照教程操作过程中有任何问题,可以关注ROS小课堂的官方微信公众号,在公众号中给我发消息反馈问题即可,我基本上每天都会处理公众号中的留言!当然,如果你要是顺便给ROS小课堂打个赏,我也会感激不尽的,打赏30块还会邀请进ROS小课堂的微信群与更多志同道合的小伙伴一起学习和交流!

评论:

1条评论

100%好评

  • 1 星级:(0%)
  • 2 星级:(0%)
  • 3 星级:(0%)
  • 4 星级:(0%)
  • 5 星级:(100%)

发表评论