PID非常好的光感巡线思路
编程哪一家比较好在这篇文章里所有的代码都不是真正的程序代码,只是
作者对编程的示意,或者说是用类似程序代码的方式对
编程的内容进行解释。作者希望读者能自行选择程序语言,自己完成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”中的“P”:比例控制是关
键
如果我们把光电传感器读值的数据线段分成更多的段,会怎样呢?我们要解决的第一件事情是,当光电传感器读值的数据线段的分段数超过3段时,要如何确定
“turn(转向)”的取值。在我们的第一种巡线方式啊中,机器人只做两件事情,转左或转右,
“turn(转向)”的数值是一样的,只是方向不同。在第二种巡线方式中,我们在左右两个转向的基础上加上了“直行”。在光电传感器读值的数据线段分段超过3个时,我们需要更多“种类
”的“turn(转向)”。为了帮助理解“更多种类的turn(转向)”,我们重新画出光电传感器读值的数据线段,并把它转换为图形。X
轴(水平线)为光电传感器读值值,与上面的光电传感器读值的数据线段一样。Y轴(垂直线)是“turn(转向)”轴。
左边的图形表示的是我们第一种巡线方式——将光电传感器读值分成两段的情况,机器人只能做两件事(用蓝的线表示),转左或转右,除了方向以外,转向值是一样的。中间的图形是第二种巡线方式
——将光电传感器读值分成三段的情况,中间增加的一段是机器人直行的部分(turn=0),转向部分
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论