PID非常好的光感巡线思路
PID控制器是一种常用的控制技术,常用于多种机械装置(如车辆、机器人、火箭)中。用数学方式来描述PID控制器是非常复杂的。本文描述了如何在使用NXT-G编程的LEGO机器人上创建PID控制器。
文中将以实例来说明如何创建PID来完成机器人巡线任务。PID创建完成后,经过简单的修改就可以应用到其他地方,如,让机器人跑直线,做两轮平衡机器人。其实学过微积分的人很容易理解PID的典型描述,本文是写给那些对PID几乎没有任何概念的读者,比如参加FLL比赛的3~8年级的孩子们。考虑到大家可能不了解微积分,因此我尽量不使用微积分,从非常低的起点开始建造整个概念。先来看看一个适于巡线的机器人是什么样的结构。看下图,这个机器人用两个马达驱动,分别与车轮A、C连接,前端装有垂直向下的光电传感器,红圈标出的部分就是光电传感器能“看到”的部分。带箭头的大长方形表示机器人的其余部分,箭头指示机器人的运动方向。
巡线是机器人的基本技术,也是大家学习机器人时最先要做的。能够巡线的自动装置具有机器人的全部特点:使用传感器收集周围环境的信息,并据此调整机器人的运动状态。巡线机器人可以使用1个光电传感器、2个光电传感器、一打光电传感器或者装上你所有的光电传感器。实际上,你使用的光电传感器越多,巡线的效果越好。只使用1个光电传感器也可以让机器人精确的巡线(即使线条是有弧度的),但是机器人移动过快时容易“飞线”(“飞线”——指机器人脱离线条,不能继续沿着线移动)。一般来说,使用的传感器越多,巡线的速度越快。现在我们来试验第一个方法(非PID方式)。巡线其实是让机器人沿着线的边缘走,因为如果沿着黑线本身走,当机器人偏离黑线,传感器“看到白色”时,我们不知道机器人到底在线的哪一边,是在线的右边还是左边?如果沿着线的边缘走,当光电传感器“看到白色”,我们知道机器人在线边缘(线)的左边,当光电传感器“看到黑色”,我们知道机器人在线边缘的右边(在线上)。因为机器人跟随的是线条的左边,因此这种方式被称为“左手法则”。我们需要知道当光电传感器“看到白色”和“看到黑色”时返回的读数值。一个典型的非校准传感器(数值0~100)“看到白色”会返回50,“看到黑色”会返回40。我们可以在一条数据线段上标出光电传感器的读值,来帮助我们理解如何将光电传感器的读值变化转变为机器人的运动变化。以下是我们画出的从“白”到“黑”的光电传感器读值。
我们把这个数值线段平分为两部分:当光电传感器值小于45,让机器人左转;当光电传感器值大于45,让机器人右转。在这里,我们不考虑机器人的转向动作的精确性。在相对较直的线上,机器人的转向动作可以比较细小;在有很多弯的线上,机器人通常要有明显的转向动作。做动作细小的转向时,你可以把速度快的轮子的马力值设置为50%,速度慢的轮子的马力值设置为20%。有很多弯的现上做明显转向动作时,你可以在快的轮子上设置30%的马力值,在慢的轮子上使用缓停或停止。无论你在轮子上设置什么数值的马力值,在做左右不同转向时,这个设置应该是一样的,即在一侧的轮子上设置较大的马力值,在另一侧轮子上设置较小的马力值(或设置为停止)。
这种巡线方式能够完成巡线任务,但效果并不是很好。在比较直的线上完成巡线任务,在编程中设置动作细小的转弯方式,整体巡线效果看起来还算不错;但是如果线上有较大的弯度,你又采用明显的转向动作让机器人完成巡线,机器人就会来回摆动,横向穿过线条。机器人只“知道”两件事情:转左和转右。用这种方法巡线,通常机器人的速度不会很快,而且看起来很糟糕。即使线是直的,这种方法也不能使机器人走直线,甚至不能完全对准线的边缘。如何使巡线更有效率呢?
让我们来调整一下。把光电传感器的读值线段分成三部分。当光电传感器值低于43时,我们让机器人转左。光电传感器值在44到47之间时,我们让机器人直行。光电传感器值大于47时,我们让机器人转右。这在NXT-G程序中,可以在判断模块中选择yes/no来实现。你实际上只需做两次判断,而不是三次。
第二种巡线方式效果比第一种方式好的多。至少机器人有时会直接向前走了。与第一种巡线方式一样,你依然要根据线的曲直特点来决定使用哪种转向方式(细小或者明显的转向动作)。机器人依旧会有相当数量的来回摆动。精明的读者也许会想“如果使用3个光电传感器是不会比2个光电传感器要好些呢?在增加更多的光电传感器会怎样?”这就是PID的开始了。
PID光感巡 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)