参考资料:http://blog.exbot.net/archives/1686
参考资料:http://www.ncnynl.com/archives/201609/860.html
什么是tf变换?
为什么用tf变换,不可以自己计算吗?
我们在移动机器人中使用坐标,往往是有其自身的参考系的,比如一个简单的,激光雷达观测到的数据是以雷达为中心的数据,移动机器人自身参考系是以机器人中心为参考系的;
这两个参考系有区别,而往往我们想把雷达观测到的数据转成机器人中心参考系的数据!
转换这个事很简单,往往一次就完成了,但是当涉及到多个坐标系、并且从二维平面地图变为三维立体的变换时候,复杂度会大大上升,变换涉及到同一坐标系下面的坐标变换,一个坐标在其它坐标系中的变换;
如果坐标系很多,建立一个坐标系树,保证每两个坐标系之间只能有唯一条路径,然后输入一个坐标系的坐标,tf变换可以获得所有坐标系下对应的坐标;
关于变换的描述:
使用矩阵描述:同一个基下,一个点到另外一个点的运动的线性变换;
可以描述一个基坐标系在另外一个基坐标系下的表示;
可以描述一个基坐标系到另外一个基坐标系的线性变换;
实现坐标变换:当前点在坐标系的描述换成另外一个坐标系的描述
当前坐标系咋参考坐标系下的描述(一个矩阵)去描述(乘以)这个点在当前坐标系下的描述(坐标)
如果不考虑平移,只考虑旋转,当前坐标系叫做动坐标系,参考坐标系叫做固定坐标系,
tf树:对于n个坐标系,任意两个的变换矩阵有C(n,2)个,如果给任意两个坐标系建立转换关系,一旦n多起来,那就多了,而且这种方式建立联系后,从一个坐标系到另外一个坐标系之间的转换关系可以经过多个其它坐标系中转,这样就会有多个转换关系,需要加入选择处理机制。tf树的这种结构,只有一种转换结果,结构简单。
实现:tb的类中有个publisher,tl的类里有个subscriber,一个发布叫/tf的topic,一个订阅这个topic传送的消息tfmessage里包含了parrent frameid的child frameid的信息。