工控网首页
>

应用设计

>

乐高机器人定位系统的研究与设计

乐高机器人定位系统的研究与设计

2013/9/5 10:40:31

一、简介:

在使用了乐高套装一段时间后,我们开始想知道是否有一种简单的方法来确定机器人的位置和它的运动方向,换句话说,我们想做出一种定位装置能够确定机器人的位置和方向。翻阅了一些书籍,浏览了一些网站,发现要实现这个任务相当困难,到现在还没有任何一种有效的解决办法。

在本章,我们将介绍定位的概念,它相当复杂。定位的方法可以归为两类:绝对和相对定位,绝对定位以外部参考点为基准,相对定位基于内部参考点。我们将举例说明这两种方法,给出一些可行的解决办法。在讨论绝对定位时,还要介绍如何在装有格子或渐变的垫上导航,使用激光梁来定位你的机器人。对于相对定位, 我们将会介绍如何为机器人装备合适的测量装置并且使用数学运算将测量值转换为相对应的运动。

二、选择内部或外部参考点

我们提到过,没有单一的方法可以决定机器人的位置和方向,但你能组合一些不同的方法得到有用且可靠的结果。所有的方法都可以归为两类:绝对和相对定位方法。它是根据机器人判断周围环境跟踪前进或根据自己的运动路线来分类的。

    绝对定位是通过机器人使用外部参考点来判断它的位置,在外界环境中设定标志,或者通过某种模拟视觉能识别的自然标志,或者更常用的,机器人本身能容易识别的模拟标志(诸如拈贴在地板上的彩色带)。另外一种常用的方法是使用无线信号作为航标,飞机和船上在任何天气下判断路线的一种系统。绝对定位需要很多条件:好的环境,或一些特殊的设备,或两者兼有。

相对定位与外界环境无关。它可以从它的前一个位置(已知)推断出现在的位置,然后从已知的位置移向下个位置。使用一种装置监控轮子的转动就可以实现这个方法,而且还要有惯性系统来测量速度与方向的改变,这种方法也称作航位推测法。

相对定位的实现相当简单,也同样适用我们的LEGO机器人。不幸的是,它有一个固有的,无法避免的问题使得本身不可能使用:它会积聚误差,即使你尽量去校准系统,因为打滑,负载或者变形仍就会在测量中产生误差。

   这些误差能快速的积累,从而将相对定位的应用归为短距离的测量。想象你用一把短尺测量长距离的桌子:你必须测量好几次,每次要从前一次测量的末点开始测。每一次尺子的放置都会产生小小的误差,最后测量结果往往与真实的长度有差距。

    船和飞机上所用的办法就是使用远距离无线导航系统或全球定位系统(GPS),现今应用与汽车工业中更多的是将两者结合使用:利用航位推测法不断的监控汽车运动,有时,某种绝对定位可以消除累积的误差并从前一个位置重新计算。这也是人类所能做到的:当你与你的朋友边谈话边散步时,你并没有寻找参考点,也没有估计自己的位置,相反的,你走路时边走边看你的朋友,然后又看一下道路,以此来得到方位并且确信自己没有偏离线路,然后你再回过来看你的朋友。在房间中你甚至闭上眼睛都能走一段路,因为从你走的最后一步推断出自己的位置。但如果不睁开眼睛或去触摸任何熟悉的物体,你多走几步就会丢失原来的方位。 

在本章的余下部分,我们将探索用乐高机器人来实现绝对和相对定位。在应用中是否使用他们中的一个或者两者都使用是由你自己决定的。你会发现这项工作非常具有挑战性。

三、寻找航标:绝对定位

放置人工航标最简单的方法是将它们水平放在地板上,在不影响机器人的移动并且在不受环境光线的强烈干扰下能读取光值,还可以在房间中的地板上粘贴一些胶带,或使用一张纸板,其它能让机器人定位的材料。

沿线走的机器人,是我们讨论最多,也是最简单的基于人工航标进行定位的例子,在这个例子中,机器人无法知道它所处的位置,因为它只能判别它是在线的左边还是右边,但这条线的确可以有效的帮助机器人从一处运行到另外一处。你可以自己感觉一下这个实验。比如在直线上做一些断口,看看机器人能否在中断点后继续沿着直线运动。当线中断时,简单的沿线走机器人会转弯并折回到线的另一端。你必须让你程序更灵活的检测突然的变化,而不是使用标准的路线修正程序,开始一个新的搜索算法来驱动机器人朝线的更远处前进。机器人必须向前运行一段距离大约等于断口的长度,然后向左或向右拐一点来找线,恢复标准的定位。

    当你做了并对结果感到满意,你就能向更复杂的任务发起挑战。再放一根与第一根线平行的线,同样也有缺口,并观察一下是否可以编程让机器人转弯90度,拦截第二根线并沿着它运动。如果这个动作能成功,你就可以准备定位短段的一个格子,要么沿着线走,要么就像条形码一样穿过它们。

你能提高机器人的导航能力,并减少编程的复杂度,在第4章提过,乐高光感在区分不同颜色之间的差别不是很好,但它能区分反射光强度之间的差别。你可以在白色的垫子上粘贴黑色和灰色的带子,将它们作为机器人的信息源。记住在黑色与白色的交界处返回的值与灰色的值是相同的。稍微移动并转动机器人调整它的正确的位置,或者使用多个光感。

你可以用黑白渐变颜色印刷到垫子上,而不是在它上作记号。例如,根据强度与距离比从点a开始打印一系列的点。离a点越近,点越黑,a点比较黑(如图1)。在这张垫子上,机器人完全能从任意一点回到a点,直到读数变为最小。

1 黑白渐变的垫子

ab两点可以使用同样的方法,一点是白色,一点是黑色。搜索白色的线路,机器人到达a点,而沿着最黑的线路,到达b点(如图2)。在足球比赛中就使用了这种原理:两个踢球的机器人,搜索一个特制的能发红外光线的球。当一个机器人找到足球时,它就使用渐变纸来寻找正确的进攻方向。

2 两个点的渐变图

还有其它可行的办法,比如在地板上使用条形码:当机器人发现一个时,它就与之匹配并读取它,从读取的值来推断它的位置。其它的一些用不同颜色条纹做成的复杂栅格。不幸的是,都没有一个简单的办法有效解决这些问题。你迫不得已才使用航位推测法来提高搜索。

制作一张渐变垫子

打印一张带有单独一个引点A的渐变垫子,让垫子上任何一点的黑色(白色)到A点的距离成比例。如果axayA点的坐标,x,y是指定象素点的坐标,距离为:

dist = sqrt((x-ax)*(x-ax)+(y-ay)*(y-ay))

测量最暗的A点和在垫子上距离A点最远处的距离,然后乘上一个常量(代表垫子上一个象素的最大亮度值)

intensity = dist/maxdist*maxbrite

将此值应用于下面的公式算出某个象素点的颜色值:

pixels[x,y] = rgb(intensity,intensity,intensity )

要做一张带有引点A和引点B(分别表示白和黑)的渐变垫子,使的垫子上某一点到B点的距离与这一点到A点和B点距离总和成比例。

adist = sqrt((x-ax)*(x-ax)+(y-ay)*(y-ay))

bdist = sqrt((x-bx)*(x-bx)+(y-by)*(y-by))

intensity = bdist/(adist+bdist)*maxbrite

pixels[x,y] = rgb(intensity,intensity,intensity)

1沿光线运动

在现实生活中,最好的定位系统是依赖某种无线电信号。通过使用至少三种信号,在一个2维平面中你就能决定机器人的位置。使用4种或更多的信号,在3维空间中也能计算出位置。总之,一种信号能给车辆提供有两种信息:它的距离和传播方向。距离是使用无线电波脉冲从发射点到接收点所需的时间计算的:时间越长,距离就越长。在罗兰无线电导航系统和GPS系统中使用的就是这种技术。图3显示了两个点不能决定位置:有AB两个位置离两个发射源的距离相同。

3 ab两点距离发射源相等

再增加一个发射点,这样就能解决定位问题,系统增加的第三个点不在a,b的连线上(如图4).这个特高频全方位范围的发射站(VOR)不能判断到发射点的距离,但能判别它的方向。也就是说,到每个发射站的路线方向。假设你知道方向朝北,两个VOR发射站在任何情况下都可以定位小车。

还有一种情况:三个发射点在同一直线上时,小车该定位在哪里?对于罗兰和GPS系统来说,三个发射点不能同时位于一条直线上。(5).

4 不在同一线上的三个发射点只能确定方位

5 VOR发射站通过方位来定位

使用3个发射站,就不需要指南针了,也就是说,你不需要知道你的运动方向朝北,只须你知道任意两发射点之间到你所在的位置所夹的角度(如图6),为了理解工作原理,你可以做一个简单的实验。拿一张纸,在上面标3个点代表3个发射点。现在拿一张透明的材料,将她覆盖在前一张纸上。在它上面的任意处弄上一点代表你的小车,从这点到3个发射点画3条线,同时延长3个发射点的线段,与发射点名字相对应的标记3条射线。现在移动透明的薄纸尽量使发射点与线相交。连接3个中的两个发射点的位置号有无数个,但连接3个发射点的位置有且只有一个。

6 三个不在同一直线上的发射点确定一个位置

如果想试一下这个方法,首先要解决的问题就是在乐高中没有能发射任何无线电信号的设备,因此必须找到一种、可替代的设备。如果你对无线电不熟悉,就不能设计出自己的无线电系统,最好还是找一些简单的装置,你也不需要

使用无线电波-光波同样也有效,我们已有了这种探测器(光电传感器)连接RCX

使用光源作为灯塔,理论上能让机器人找到路,但仍旧有困难。

-光电传感器是没有方向性的-你必须设法缩小发射角度。

-环境光线会产生干扰,因此你必须在无光线的房间内操作。

-为了能让机器人区别无线电波,你必须定制每一种无线电波,比如,让他们一不同频率打闪光信号(实际的灯塔就可以作到)

激光是最好的选择。它是以微慢射的方式传播的,因此当它朝光感发射时,光感读数几乎达到了100%激光源现在比较常见也很便宜,非常容易找到。

警告:激光,即使是低能量,对人的眼睛也是有损坏的-不要直接对着人或动物

如果选择激光作为光源,就不需要关心周围环境光线的干扰,但如何正确使用激光呢,搭建一个旋转的激光灯塔吗?太复杂了,假如我们将激光源放到机器人上会出现什么情况呢?现在你只须一个激光源,并旋转它去加热不同的位置点。这样接下来的困难就是估计什么时候加热其中一个位置点。如果在每个位置点放上一个带有光感的RCX,当被加热时,就可以将信息发回一个信息,每个站使用不同的信息,这样使机器人可以区分是从哪个站点发过来的信息。

当我们实际测试这个时,我们发现用激光加热的传感器目标太小,结果认识到我们已设置了一个不可能的目标。为了继续使用前面的原理,我们发现在目标前搭建一种能探测教大范围的扩散器。Jonathan Brown建议使用用普通纸做成的扩散器,它的效果很好。

现在有了这种方法,但遗憾的是,你需要很多RCX,位置点至少要三个且机器人需要三个。还有其它更好的方法吗?与此不同的还有一种方法使用在汽车上用的反光镜,它的特点就是可以将射到镜面上的光线按原路反射回去。使用它们作为无源站,当机器人上激光发射到它上面并返回到机器人,在机器人身上

安装一个光感以便检测反射的光线。

看起来这个方法非常不错,但仍有缺点,首先,机器人不能区分站点。而且你还要使用推测航法来估计站点标志。我们说过推测航法不是很精确,很容易积累误差.但它给出了每个站点方位的近似值。是可以让你区分它们。当接收到实际读数时,你可以调整被测量点的预计方位。第二个要解决的缺点是大部分返回光线容易直接回到激光。你必须将光感安装在靠近激光发射点位置以便截取返回光线,即使使用这个方法,还是很难检测返回光线。

在根据无线电波判断机器人人位置中包含了一些数学问题,这类数学对学生来说是比较头疼的:三角学(不要担心,在附录A中提供了一些公式)但

这会导致另外一个问题,标准的固件不支持三角函数,尽管在理论上可以使用表和插值法在NQC语言中执行它们,但乐高固件没有提供足够的变量来取得

有用的结果。如果你想用无线电波来处理,那你真的必须用leJOSlegOS固件,它们提供了更多的计算功能。

如果你没心情去对付那些复杂的三角式和可选固件,你可以实验一些更简单的项目,它们也包含激光发射器和反光镜。比如,你搭建一个可以“

回家”的机器人将反光镜放在机器人的出发点,也就是它的“家”编程让机器人在某处转弯并击活激光,当机器人接收到返回的光线后,就朝哪个

方向直线行走。同时不断的检查激光发射的目标来调整方位。

四、测量运动:相对定位

相对定位、推测航法都是基于小车本身引起的或由外力引起的(加速)的其中一个运动的测量。我们将不管后面这一种,因为它需要昂贵的惯性传感器

和回转式罗盘,他们不容易与RCX连接。

   测量小车运动的技术称为计步,需要编码器将轮子的转动转换成相应的移动距离。这个编码器在乐高中有,它就是角度传感器。而且,你已从第四章了解到用一个触动传感器或光感来可以模拟角度传感器。典型的需要其中两个传感器,尽管通过使用第八章中看到的一些特殊的平台你能使用一个角度传感器来执行计步。如没有角度传感器,参照第四章一些可替代的传感器。

从译码的运动计算位置的等式是根据机器人的结构,我们将使用差速齿的例子作例子。再提一下在附录A中关于数学的一些资源可能你会用的到。

    假设机器人有两个角度传感器,通过传动链将每一个角感连接到主动轮上。轮子的直径为DR为角感的分辨率,G为编码器与轮子的传动比,你

能得到一个转换系数F,它将角度传感器的每一个单位转换成响应的运动距离:

F = (D x π) / (G x R)

这个比的分子是D x π,表示轮子的圆周长,它刚好等于轮子转动一周运动的距离。这个比的分母是G x R,定义编码器计数的增量刚好等于轮子的一转。F就表示每跳动一下移动的单位距离。

机器人使用最大的轮子,它的直径是81.6mm。角度传感器每一转有16的分辨率,她与轮子的传动比是1;5(轮子转动一圈,角度传感器转动5圈)。结果是:

F = 81.6 mm x 3.1416 / (5 x 16 ticks) = 3.2 mm/tick

就是说每次传感器计数一次,轮子就会运动3.2mm。在任何给定的时间间隔,左轮运动的距离TL等于角度传感器计数的增量IL乘以系数F

TL = IL x F

同样,对右轮:

TR = IR x F

机器人的中心点,就是在连接两轮的的中线上的一点,它移动的距离是TC

TC = (TR + TL) / 2

为了计算方向ΔO的变化你需知道机器人的另一个参数,轮子间的距离B,或更精确一点,轮子与地接触的那两点间的距离。

ΔO = (TR TL) / B

这个公式返回的值ΔO是弧度,使用下面的关系式将弧度转变为角度。

ΔODegrees = ΔORadians x 180 /π

你现在可以计算机器人的相对方位,在I时刻的新方位ΔO是建立在I-1时刻的方位变化ΔO

O是机器人所指的方位,为ΔO选择同样的单位的结果是:

Oi = Oi-1 + ΔO

同样的,新的中心点卡迪尔坐标是根据前一中心点移动距离的增量:

xi = xi-1 + TC x cos Oi

yi = yi-1 + TC x sin Oi

这两个三角函数把移动距离的矢量表示转换成卡迪尔坐标。

不幸的是,在进行定位时你无法除去三角式中角度O,还好,有些特殊的情况,你可以避免三角函数,比如,当机器人在某个位置精确的转动90度,并按照你所期望的笔直往前走。在这种情况下,xy有一个是常量,其它运动距离的增量TC也同样。回顾第8章,

使用双差速齿你只需要一个角度传感器,安装在左或右轮上。这个机械结构保证了当一个马达打开时机器人直线驱动,当另一个马达打开时机器人就转弯,在第一种情况下,角度传感器,角度传感器将会测量小车运动的直线距离TC而在第二中情况下,你必须要根据角度传感器的增量让它以90度的倍数旋转。在第23章的一个机器人实例就使用该原理,一个双差速齿驱动的机器人使用角度传感器进行导航。我们将再感受一下数学的应用,并讲述使用NQC来完成公式的运算。

  同步驱动轮子的转动只能限制在90度范围内,关于这个方向改变角度的物理约束,你确信使用右角度来处理。将角度传感器连接到马达上,与前面的例子一样用它来测量移动的距离。在这个机构中,与使用双差速齿的情况一样,只要使用一个角度传感器。 

小结:

  我们在简介中就说过,这一章难度比较大,不过,搭建一个粗糙的定位系统还是比较容易的。

  估计位置的方法有两种:第一种常需要人造标志或使用灯塔作为外部参照物。这两种我们都研究过了,在沿线走,到具有标志的栅格,再到更复杂的渐变垫子都使用了人造标志。他们通过使用一个光感都能很好的进行导航。机器人套件对于使用灯塔来进行绝对定位没有提供足够的部件。然而我们在激光的基础上讨论了一些可行的方法并介绍了其中碰到的难点。

  相对定位对LEGO机器人,我们在使用差速齿进行航位推测时解释了一些数学原理,建议采用一些可选结构来简化计算,不幸的是,相对定位有一个无法避免误差的累积,你能减少大量的问题,但你不能避免它。这就是为什么现实中汽车、飞机、轮船上使用的导航系统都依靠相对和绝对定位两类方法共同使用:航位推测法在短距离范围内无法达到高的精度,而绝对定位常常将误差减小到零

 

投诉建议

提交

查看更多评论
其他资讯

查看更多

自动化机床的故障排除技术浅析

安川焊接机器人编程

ABB机器人控制软件RobotWare应用手册SafeMove(英文)

ABB IRB7600 机器人维护信息

ABB IRC5P机器人培训教材