PID非常好的光感巡线思路
“PID”中的“P”:比例控制是关键 如果我们把光电传感器读值的数据线段分成更多的段,会怎样呢?我们要解决的第一件事情是,当光电传感器读值的数据线段的分段数超过3段时,要如何确定“turn(转向)”的取值。在我们的第一种巡线方式啊中,机器人只做两件事情,转左或转右,“turn(转向)”的数值是一样的,只是方向不同。在第二种巡线方式中,我们在左右两个转向的基础上加上了“直行”。在光电传感器读值的数据线段分段超过3个时,我们需要更多“种类”的“turn(转向)”。为了帮助理解“更多种类的turn(转向)”,我们重新画出光电传感器读值的数据线段,并把它转换为图形。X轴(水平线)为光电传感器读值值,与上面的光电传感器读值的数据线段一样。Y轴(垂直线)是“turn(转向)”轴。 左边的图形表示的是我们第一种巡线方式——将光电传感器读值分成两段的情况,机器人只能做两件事(用蓝色的线表示),转左或转右,除了方向以外,转向值是一样的。中间的图形是第二种巡线方式——将光电传感器读值分成三段的情况,中间增加的一段是机器人直行的部分(turn=0),转向部分与前面的第一种巡线方式是一样的。右侧的图形是一个比例控制的巡线机器人,在两个极限点之间的转向变化很平滑。如果光电传感器读取的光值表明机器人离线很近,机器人就做小的转弯;如果读取的光值表明机器人离线很远,机器人就做较大的转弯。比例是一个重要的概念。比例的意思就是在两个变量之间存在线性关系,简单的说,就是变量之间的关系呈现为一条直线(如右侧图形所示)。 直线的表达式为: y= mx + b 这里,x,y是指直线上任意一点的坐标值(x,y),m是这条直线的斜率,b是直线在Y轴上的截距(当x=0时,直线通过Y轴上的点,该点在Y轴上的坐标值)。直线斜率的定义为直线上任意两点y值的变化量除以x值的变化量。我来把图形和表达式变得简单一些。首先,我们将光电传感器读值线段(X轴)的中心点定为0,因为我们的光电传感器读值范围是40到50,我们把所有光电传感器读数都减掉45(这是40和50的平均值,(40+50)/2),得到的结果称为“error(误差)”。当光电传感器读数为47时,可得到error=47-45=2。这个error(误差)表明了机器人的光电传感器离线的边缘有多远。当光电传感器正好在线的边缘上,“error(误差)”为0(因为此时光电传感器的读值为45,而我们要从光电传感器读值中减掉45)。如果光电传感器全部处在白色的地方,“error(误差)”为 +5,如果光电传感器全部处在黑色的地方,“error(误差)”为 -5。 2011-8-28 21:39 上传 下载附件(3.71 KB) 在上面的图形中,我已经用“error(误差)”来表示X坐标轴。因为这条直线正好在原点处通过Y轴,因此b的取值为0,这样表达式会变得简单一些: y = mx 或者使用我们的方法:
Turn= m*error我们还没有对转向轴做出定义,所以现在我们确定转向的范围是从-1(最大左转)到+1(最大右转),0转向的意思就是直行。上面图形中直线的斜率就可以用标为红色的两个点计算出来(其实直线上任意两点均可使用)。
斜率= m = (y值的变化量)/(x值的变化量) = ( 1- (-1)) / (-5- 5 ) = 2/10 = 0.2斜率是一个比例常量,用它乘以(x值)就可得到“(转向)”(y值)。请一定记住这一点。在各种PID文献中,斜率(也叫做比例常数、直线表达式中的m)被称作"K"。各式各样的Ks出现在PID文献中。你可以把K(或m,或斜率,或比例常数)看做是一个换算系数,用K把一个数字(光电传感器读值或我们例子中的error(误差))转换成另外一个数字(如Turn(转向))。这就是K的作用,非常简单也非常强大。
那么在我们的直线表达式中使用这些新的变量名字:
Turn=K*(error)
用语言表达就是:将误差值error乘以比例常数K得到所需的转向值Turn。这个Turn值就是P控制器的输出结果,因为它只涉及比例控制,被称为“比例控制部分”。
“error”的取值范围是由光电传感器的设置、巡线测试纸的颜色等因素决定的。你可能已经注意到了,在最后一个图形里,直线没有延伸到error(误差)值-5 到 +5 的范围以外。在-5 到 +5 的范围以外,我们就不能判断光电传感器到底离线有多远了。当光电传感器完全看不到任何黑线时,它看到的所有“白色”都是一样的。当光电传感器离线的边缘太远时,光电传感器读取到的光值变成恒定的数值,这就意味着光电传感器的读与error(误差)不再是比例关系。我们只能在光电传感器相当接近黑线时,判断光电传感器离线的边缘有多远距离,在非常小的数值范围内,光电传感器的读值与这个距离是成比例的,因此,我们的光电传感器值要设置在能给出比例关系的有限的范围内。超出这个范围,就只能给出机器人调整的正确方向,但数量大小是错误的,光电传感器读值或是误差会小于实际情况,这样在修正误差时,就不会有很好的效果。在PID文献中,把传感器能给出比例响应的范围称为“比例范围”。在PID控制中,比例范围是另一个非常重要的概念。在我们巡线机器人的应用中,光电传感器读值的比例范围是40到50,误差的比例范围是-5 到+5 ,马达的比例范围是-100(全马力后退)到 +100(全马力前进)。以下是有关比例范围的两个重要内容:
(1)我们希望比例范围尽可能的宽。光电传感器的比例范围是相当小的,就是说,光电传感器必须很接近线的边缘,才能获得比例信息。比例范围的宽度主要取决于光电传感器距离巡线测试纸的高度有多少。如果光电传感器非常靠近巡线测试纸,如1/16英寸(约0.16厘米),那么光电传感器在巡线测试纸上看到范围只是一个很小的圆圈。光电传感器的一个很小的移动就会产生-5到+5 范围的error(误差),也就是比例范围。你也许会说,光电传感器的视野狭窄,只能看到巡线测试纸的很小的一部分,光电传感器要非常接近线的边缘,读取的光电传感器值既不是“黑”,也不是“白”。如果光电传感器距离巡线测试纸的高度高一些,那么光电传感器在巡线测试纸上看到的范围就是一个大一些的圆圈。光电传感器距离巡线测试纸的高度大约为1/2英寸(大约1.27厘米)时,在巡线测试纸上能看到的范围是一个直径大约1/2英寸的圆圈。光电传感器处于这个高度上,比例范围更大,因为光电传感器在距离线的边缘+/-1/2英寸宽度的范围内,就可以保持比例输出。将光电传感器位置提高有两个缺点,光电传感器位置提高后更容易对环境光做出错误响应;在区分黑和白时,也与位置较低的光电传感器有些差异。光电传感器距离巡线测试纸的高度足够大时,对黑色和白色所读取的值是一样的。(2)在比例范围之外,控制器只能把机器人向正确的方向移动,但也只是趋向于正确。控制器的比例响应是受比例范围限制的。
PID光感巡 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)