Tf: 变换库
摘 要
tf库提供一种标准的方法,目的是在整个系统中去跟踪坐标系和转换数据,这样单个组件用户就可以在不需要具备所有坐标系系统相关知识的情况下,确信这些数据是在他们的坐标系中想要的。在早期开发机器人操作系统(ROS)期间,跟踪坐标系被开发人员公认为是痛苦的事情。这个任务具有很大的复杂性,使得当开发人员在不当使用变换库时经常会产生错误。分布式资源中不同坐标系中的信息转换存在的问题同样也是一种挑战。本文将解释问题的复杂性和提炼需求,然后它将从设计到需求讨论tf库。几个用例将演示成功部署的库和强大核心能力的扩展,比如能够同时在时间和空间中转换数据。
1.介绍
当让机器人完成任务时,让机器人意识到它身在何处、和其余的世界与它的关联是至关重要的。一个可以很好说明这个的例子:一个移动机器人发现一个红色的球并用它的钳子去接触这个球。这个挑战只是把钳子移动到球,然而,为了完成这个简单的任务钳子和球之间的关系是未知的。如果房间中有个传感器能在空间中找到这个球,需要的就是去计算从传感器得到的关于房间、机器人的躯干、肩、肘、腕和钳子的转换数据。然后比较球的位置,你可以只比较两个对象在同一坐标系中的位置。如果结果是钳子必须在传感器的坐标系中左移3厘,为了计算机器人要做什么动作,通过计算从传感器到房间和躯干的转换关系,左移3厘米的传感器坐标系必须转换成躯干的坐标系。从这里我们可以发现在传感器坐标系中的左移3厘米在机器人坐标系中实际是下移3厘米。因此机器人只需要让它的手臂下移3厘米。
这只是一个简单的关于机器人系统的例子,但是要做到这个需要计算整个系统中的相关知识。机器人系统包括传感器、机器、计算和通信,即使设计得很简单也会快速变得复杂。随着机器人系统变得复杂,子系统拥有其余系统的知识的能力减少,组件的设计者必须考虑什么信息对他们的模块是必要的再能完成其任务。当一台计算机的这是一个挑战,设计模块间的接口提供的所有信息。随着机器人系统分布在多台计算机有一个点,并不是所有的信息可以提供由于带宽的限制。
如果程序员可以简单地从一个图书馆请求什么向量是我需要的,以用来移动夹持的躯干让它来联系球,这将是非常强大的。这是相关任务中的实际问题,程序员不需要知道配置的任何中间环节。如果这是拥有第二个机器人从另一个角度观察球的更复杂的系统,这对程序员和机器人头上的传感器都不会有丝毫影响。请求在任何情况下都是相同的,程序员只需知道他们他们想要操作的坐标系和相关的任务,只需要系统知道中间帧和计算的转换结果。
tf库的设计是用来提供一种标准的方法在整个系统中跟踪坐标系和转换数据 ,这样一来单个组件用户就可以确信他们想要坐标系中的数据而不需拥有整个系统坐标系的知识。随着机器人系统变得越来越复杂,能够只专注于精确的任务框架和相关的协调框架变得非常关键。大多数机器人系统从拥有不同的坐标系的许多不同的传感器中融合数据。
tf库开发作为ROS包提供此功能。tf库有两种标准模式:Broadcaster 和 Listener。这两个模块被设计集成为一个ROS系统,但是在ROS之外也常常用到。
2.相关工作
与tf库最接近的概念是场景图,场景图在用来表示3D场景的渲染中是一种常见的数据类型。场景图大多在呈现3D场景的可视化编辑器和机器人模拟器中用的比较多。场景图基本由一个对象树呈现,每个对象与父对象的位置和其他信息有关。这取决于应用程序的其他信息的范围,可以从可视化网格纯渲染更到新规则和模拟器的惯性特性。
图1:Willow Garagersquo;s PR2机器人的标准tf框架,RGB缸代表X,Y,Z轴的坐标框架。每一个坐标框架的名字是为了更好的可视性。
一个有趣的场景图的扩展是OSGAR项目试图利用开放项目,帮助增强现实场景图。3D引擎OGRE也同样使用场景图,tf树已经集成到OGRE渲染场景图的工具中。在图一中可以看到tf树同时需要在OGRE场景图呈现为元素,也要用来告知OGRE场景图PR2躯干的位置网络。在设计阶段树数据结构已经被证明在tf的目的中是有用的。
3.需求
tf库能被分为两个不同的部分。第一部分是在整个系统中传播转换的信息。第二部分是库接受并储存转换信息备用。第二部分在不同的坐标系中能够响应需求的相关结果。
这里经常会有一个系统中不同坐标系数据信息的不同的源头,每个源头信息通常会与一个硬件连接,并且在不同的频率时产生数据,也可能通过简单的延迟或包滴连接在一起。在这种情况下tf库必须接受异步输入和经过延迟或遗失的信息。
tf库被设计为ROS系统中的核心库。为了能够支持ROS应用它,需要加强拥有延迟和不可靠网络的分布式计算环境。这个设计同样受到通信需要的影响,通信主要使用匿名发布订阅消息传递。
这个库需要能够提供一种能同时在两个坐标系转换的能力。如果数据不能及时获得,库必须提供给用户适当的错误信息并不返回无效的数据。它也会在数据分布的顶部建立,也会加强同样类型的噪声。
它不会假设系统拥有结构常数,因此它会根据不同框架的添加数据,重新移动和改变不同坐标系的联系,来动态提供改变不同框架之间关系的能力。
4.设计
由于需求分离,为了设计方便,分布被发展为广播模块,同时为了转换的接收和查询功能在监听模块。
4.1 数据结构
转换和坐标系可以被看做为一个图表,这个图表中转换表示边缘,坐标表示节点。在这种表示中,转换网络可以简单看做连接两个节点的边缘的产物。这个图表可以和一个或多个非相干的子图表共存,同时转换能在子图表中计算出来,但是不能在非相干的子图表之间得到。转换本质上来说是直接的。为了遍历一个边缘,逆运算也是可以用到的。然而,在一个任意图表中,两个节点之间有很多路径,拥有两个或多个潜在的转换网络使得结果查询变得模糊。为了避免这种情况图表必须是无环的。
为了提供快速查询,树必须能够被快速查找。对树路径的限制能够让快速查找表达更有连通性。当图表的复杂性增加时,这个也变得更加重要。作为一个例子复杂的树PR2机器人,它的图如图二所示。
图2 在tf库中PR2机器人的标准模型
树回声的选择被看做时场景图的发展。场景图和tf树结构之间的一个不同时场景图被设计为定期迭代,而tf树被设计为异步查找特殊的值。
一个树结构同样对允许在不用额外信息下结构的动态改变有好处,当然是在没有用到有向图边缘的情况下。当边缘被当做一个引用不同的父节点的节点发布时,树会在没有其它信息的情况下生成一个新的父树。
每个树边缘的更新对它测量的时间点来说都会特殊的。比如,查询一个树时需要正在查询这个特殊的时间点。为了使这个成为可能,一个图边缘的历史值被存储在一个按时间顺序排序的清单中,可以在这份清单中快速查找。在图3中调试信息显示5秒中接收的每个边缘的历史信息。数据存储是为了一个特殊的过程,在这个期间它能够有望在没有tf树的情况下查询一个转换网。
图3 在ROS教程中两只乌龟中简单的tf树与调试信息
为了操作所有数据都能转换,tf库必须具备两条信息:它所代表的坐标系和它的有效时间。这两条信息被看做标志数据,里面包含的数据能被转换成已知的数据类型。
4.2 变换广播
广播模块被设计得很简单。它每次在听到特定转换的最低频率时才会更新广播信息。
4.3 转换接收
不管信息变化与否,广播器都会定期发送更新信息。侦听器收集的值都会保存到顺序列表中,这里查询的值能插入到两个最近的值之间。由于广播器定期发送转换信息,侦听器并不会假设现有的坐标系和将来一样。频率应该根据广播器选定,当频率足够高时,球形线性插值能够近似看做两个标签关节之间的运动。虽然更高的频率会增加精度,它也会导致更高的带宽需求,尽管它要求使用尽可能低的频率,还是超出了系统的累积误差精度要求。
插值是一个很重要的能力。它允许发布者不同步和不以同一个速率发布。只要更新以高频进行,球形线性插值就能允许在不同标志空间任意查找。能够插入同样会让系统在丢包方面有所加强。许多丢包都能在没有丢失精度的情况下插入。
4.4 变换计算
为了计算任意两个节点之间的转换关系,跨度集合需要计算,然后转换网络要根据跨度集合来计算。为了计算源和目标框架之间的跨度集合,接收模块走到树的边缘直到在跨度集合中发现公共的父节点。如果没有发现公共的父节点,寻找失败并返回错误。如果查找成功,侦听器会计算从源框架大目标框架需要的跨度集合需要的转换网络的边缘。当转到一个树边缘的顶部时会使用到逆运算,当转到树边缘的底部时会用到转换。
当计算两个框架的转换时,a、b、c之间有直接的链式转换关系:
Tc a = T b alowast; Tc b
4.5 优势
简单的核心数据结构贯穿了整个系统。它在高效和灵活方面都有优势,在分布式同步环境中仍能进行调试。
4.5.1 高效
tf库的设计使得开发者在运用传感器数据和转换数据时只需要一次广播数据,转换数据由权威方一次广播。举个例子,许多转换的发布只由电机控制。然而,经常会有其它转换数据的权威方,比如本地化过程。每个权威广播最佳估计一次,所有的侦听器直接接收数据。直接连接的单一广播最小化了带宽和延迟。
对每个接收的信息,一个侦听器把它存储在时间顺序列表中。设计系统只需要侦听器把信息插入接收数据的存储列表中。监听时最小数量的操作是很重要的,因为操作一个侦听器需要不断接收更新和利用有限的计算资源。
保持列表的储存是很重要的,因为转换数据可能会在传输时出现延迟。当数据确实像命令的那样插入类列表中,有此简化附加的新的转换数据才是最有效的,但是这样会增加丢失命令数据。
tf库使传感器数据或其它标签数据通过网络发送它的原始坐标,同时储存它的原始坐标。当一种算法想要在最相关的坐标系中使用数据时,它从tf图书馆中得到从标签坐标系到所需的坐标系的转换信息。使用结果数据来转换数据的时候需要防止不必要的中间变换,同时节约计算时间和由于重复处理潜在的舍入问题数据退化的时间。
方便起见,为了所能获得的最新数据,在查询值时0时刻请求将会返回最新的通用时间。如果这个时间并不存在或者一个在缓存历史之外的时间被查询,侦听器将会引发异常。
4.5.2 灵活性
为了让用户能够以其原始格式高效存储和传送数据,tf允许用户更加灵活。他们能够改变坐标系,在这里他们能动态操控,同样也能做一些事情,比如在不同的坐标系中再加工记录数据,而不是使用收集的数据。这使得处理离线处理记录数据变得容易,原始的传感器数据和转换数据是所有需要记录的东西。在返回时间,转换数据和原始传感器数据都会被返回。当返回数据时,处理算法能重运行不同的参数包括记录模块运行时产生的数据。一个关于返回时正在被处理的坐标系的例子就是一个正在被SLAM算法处理的地图,这里面移动障碍会被追踪。使用原始数据记录的储存车辆,使用相同的数据集合时SLAM算法和障碍追踪算法都会被独立更新。
广播和接收模块匿名发布订阅消息通过系统提供向开发者提供添加或移除模块的灵活性。只要一个新的广播模块开始发布转换数据,所有的接收模块会连接,并且它们的外部缓冲会存储转换数据。
同样所有接收模块会与对应的广播模块的起始部分连接起来,并且立刻建立缓冲区用来查询转换结果。这允许任何接收模块在没有配置的情况下开始执行,而且不需要任何确定的坐标。虽然缓存在结束追踪接收的转换数据前处于高速运转状态,但是不对用户的配置有要求。有一种情况需要用户注意,就是当在开始后立刻查询转换信息时当接收模块没有收到系统完整的信息时会出现错误。还有很多其他原因会导致查找失败。良好的用户代码会捕获错误并返回,之后缓冲会被填满。
网络延迟的抗干扰性在分布式系统中经常是个问题。当传输数据时,在特殊时刻传输的被标注的数据必须是可得到的。在系统中有两种情况延迟是有影响的。第一种是标注数据延迟了但是转换数据已经可以得到。在这种情况下转换数据的缓冲历史会在没有进一步动作时解决问题。第二种是当标注数据在转换数据之前到达。这种下面情况会发生,当在广播器离网络很远或者如果需要的转换数据实际上是另一个计算需求处理进程得到的估算结果,就像基于激光定位的算法。为了解决第二种情况,接收模块同时提供阻断和非阻断两种方法在转换数据可以得到之前保留标志数据。阻断方法就是等待更新,非阻断方法会在接收每个转换信息时进行测试,当转换网在预料的时间内能被计算时,会提供一个返回。在多数情况下用户会期望推断未来的一小段差距,作为近似计算。在tf库中有可以推断的选择。然而在PR2测试中任何推断会导致不可预测的后果,因为tf库中并没有准确的在正确的时间点时关于系统动态的信息。
5.示例
在他们在脚本和库中都能被实例化而不担心碰撞总和时,拥有许多接收模块是很有帮助的。一个常见的用法的就是库在整合接收模块,使它们内部去做核心工作,比如PR2导航库的在建立地图时的转换信息。与此同时在导航库内部的接收模块在其它例子中能用在机器人脚本路标的监控进展上。当一个机器人完成它的目标时脚本监控进展能轻易在不影响不断提供抽象地图中转换信息的库的内部距离的条件下获取接收模块的信息。
不看接收模块的数量,把数据转换到任意坐标系中对简化任务是一个强大的工具。用到的一个例子就是用目标特殊化坐标系在门检测和PR2的自我阻塞中都能看到。这上面两种显示中,感知算法都用来探测世界的固定装置,这些装置随后为了特殊的运用而从观察的框架中转化为最方便的任务坐标中。
即使在没有物理表示的时候目标的特殊坐标还是可以使用的。其中的一个用法就是在本地坐标信息很缺乏的时候进行导航。一个简单的例子就是认为机器人向障碍移动并把它记录到地图中。如果本地机器人突然跳跃,就像GPS要
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[141319],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。