ROS教程译文1———TF转换树的设置和使用

来源:互联网 发布:函授和网络教育含金量 编辑:程序博客网 时间:2024/06/16 19:53

本文属于ROS翻译文章,来自WIKI:
http://wiki.ros.org/navigation/Tutorials/RobotSetup/TF

(由于水平有限,翻译错误在所难免,发现错误欢迎评论或联系作者)


Author: SuperDeveloper
Email: na1206@live.com
Description: Study ROS


机器人创建篇–用TF设置你的机器人

教程级别:初级

下一篇:使用机器人状态发布者

1. 转换配置

许多ROS包都需要tf软件库发布的转换树。在一个抽象层上,转换树根据不同坐标系之间的平移和旋转来计算偏移量。具体来说,假如有一个简单的机器人,它有一个可移动的基体以及在基体上端的一个激光器,我们定义两个坐标系:一个对应基体中心点,另一个对应基体上的激光器的中心点。我们给两个坐标系一个名字,称移动基体的坐标系为” base_link “(重要的是,对于navigation来说,这个被放置在机器人的旋转中心),我们称激光器的坐标系为”base_laser”。框架命名约定参见: http://www.ros.org/reps/rep-0105.html

我们假定有来自激光器中心点的距离数据,换句话说,我们有来自“base_laser”坐标系的数据,假设我们想要用这个数据去帮助移动基体避免世界中的障碍。为了成功实现这点,我们需要一种将数据从“base_laser”坐标系转换到“base_link”坐标系的方式。本质上,我们需要在“base_laser”和“base_link”之间定义一种关系。

这里写图片描述

为了定义这种关系,假设我们将激光器中心点安装在距离移动基体中心点横向10cm,纵向20cm的位置。这就给了我们一个”base_link”和”base_laser”之间的可转换的偏移量。特别地,我们知道了从”base_link”获取数据到”base_laser”必须应用一种关系(x:0.1m,y:0m,z:0.2m),同样从”base_laser”获取数据到”base_link”我们必须应用相反的转换关系(x:-0.1m,y:0.0m,z:-0.2m).

我们可以选择自己组织这些关系,意味着在必要的时候在坐标系之间使用恰当的转换关系,但是这会随着坐标系数量的增加变得异常困难。幸运的是,我们不需要自己来做这些事。取而代之,使用tf我们需要定义”base_link”和”base_laser”的关系,用它来为我们组织坐标系之间的转换。

在使用tf时为了定义和储存”base_link”和”base_laser”坐标系之间的关系,我们需要将他们添加到转换树中。从概念上讲,转换树中的每一个节点对应一个坐标系,每一条边对应着当前节点到其子节点的转换关系。TF使用一种树形结构来保证任意两个坐标系之间只有一个单遍历(对应关系——译者注),并且假设树中所用的边都从父节点指向子节点。

这里写图片描述

为我们的简单例子创建一个转换树,我们将创建两个节点,一个为”base_link”坐标系,一个为”base_laser”坐标系。为了创建他们之间的边(箭头——译者注),我们首先需要确定哪个节点为父节点以及哪个为子节点。记住,这个区别(父节点和子节点——译注)非常重要,因为TF假设所有的转换都从父到子。我们选择”base_link”坐标系为父,因为其他的部分或传感器是添加在基体上的,通过穿越”base_link”坐标系做出最适合他们到”base_laser”的关系(就是用”base_link”到某点的坐标值减去”base_laser”到相同点的坐标值——译注)。这意味着转换关系,即”base_link”与”base_laser”之间的边应当为(x:0.1m,y:0.0m,z:0.2m).随着这个转换树设置完毕,转换激光器在”base_laser”接收到的(数据)到”base_link”坐标系只需要简单的调用TF库。我们的机器人能使用这些信息在”base_link”坐标系中解释激光器(的数据)以及安全地规划避开环境中的障碍。

<接下来:代码编写………….待续>