变换树(tf)
变换树是机器人软件中的一块,它负责追踪机器人每一个有名字的部件相对于其他每个部件在什么位置,以及这些关系如何随时刻变化。机器人身上布满了有名字的参考系——底座上一个、每个关节上一个、相机上一个、夹爪上一个、还有一个固定在世界上——而你通常需要知道的,是某个参考系从另一个参考系看过去的位姿(位置加朝向):此刻,夹爪相对于相机在哪里?变换树把所有这些关系都存起来,并能随时回答这一类问题。它最著名的形态出现在机器人操作系统里,干脆就叫 tf。
之所以叫树,是因为这些参考系像家谱一样挂在一起:世界参考系是根,机器人底座挂在世界之下,第一节臂挂在底座之下,下一节又挂在它之下,如此一直延伸到指尖和相机。每一条从父到子的连接,都存着一个刚体变换——把你从父参考系带进子参考系的那次旋转加平移。要算出任意两个参考系之间的关系,哪怕它们分处遥远的不同枝杈,软件只需沿着连接二者的那条路径一段段走下去,把沿途的变换依次相乘即可。把参考系排成一棵树、让每个参考系恰好只有一个父节点,就保证了任意两个参考系之间,永远有一条清晰、无歧义的链路。
关键在于,变换树并不是一张凝固的快照——它带着时间戳、并被持续更新,因为机器人的关节和轮子一直在动。不同部件在不同瞬间各自上报自己的变换,于是系统会保留一小段滚动的历史,还能做插值,以回答这样的问题:在那张照片拍下的那一刻,夹爪相对于地图究竟在哪里。正是这一点,让感知、规划和控制能就同一幅共享的空间图景达成一致:一台深度相机发现一个物体,变换树能把这一发现换算到机械臂自己的坐标里,机械臂便能伸手去够它——这一切之所以成立,是因为每个部件都信任同一张被持续维护的、记录着谁在何处的地图。
一台移动机器人的相机看到前方两米处有个门口。由于变换树知道从相机到轮子再到地面的那条链路,导航程序能立刻把这个门口改用地面坐标重新表述,并径直驶过它。
变换树能把一个部件的视角换算成任何其他部件的坐标,于是整台机器人共享同一张空间地图。
tf 是机器人操作系统中那个著名变换树库的名字;而其背后的思想——一棵带时间戳的参考系关系之树——则适用于一般的机器人软件。