乐高EV3巡线机器人



 依然是EV3巡线的相关问题,这次所发内容是本人这三天学习《乐高机器人:EV3程序设计艺术》里有关巡线的知识之后整理出来的,望各位大神指点。      巡线一直是一个热门话题,大家说的比较多的就是PID巡线,作为小白的我根本不知道啥意思。于是狂啃书本,从最基本的巡线开始。
     切换
<ignore_js_op>
      这种就是转左或者转右,没有直行的情况。于是又引入了直行的情况:

<ignore_js_op>
      到这我相信各位看官也知道该如何去设置更多的运动状态,比如加入向左急转,向左稍微转弯,直行,向右稍微转弯,向右急转。这些都可以用切换模块来实现。然而这些远远满足不了千奇百怪的巡线路径。于是,我们继续优化我们的巡线程序。
     比例巡线
     这里我们就要引入误差值,增益值以及转向值。
     比例巡线是根据目标值(机器人走直线时颜色传感器的值,计算公式:目标值=(最大值+最小值)/2)和输入值(颜色传感器实际测量的值)来改变控制变量(控制变量本人理解为移动转向模块里的转向值)的。
     增益值决定了机器人对误差值变化的反应速度,是自己设置或者调试得到。
     误差值=目标值-输入值
     转向值=误差值*增益值
<ignore_js_op>          增益值需要反复的实验,找到最合适的增益值。用你自己的目标值和增益值测试这个程序,运行效果应该比切换程序更好。
    PID巡线
那么接下来将写到我所学到的PID巡线(可能称不上是PID,自己觉得良好)。之前看到唐伯虎大神写的PID巡线,觉得受益匪浅,结合《乐高机器人:EV3程序设计艺术》,浅谈一下学习PID巡线的感受。
     PID控制器——比例-微分-积分控制器
     和比例控制器一样,PID控制器也是用颜色传感器读数来调整起到控制作用的变量,也就是转向值。
     首先我们要采集颜色传感器的最大值和最小值,这个部分可以通过挪动机器人来实现,也可以让机器人自己完成。如何让机器人自己完成呢?首先我们需要一个机器人,然后写入程序就可以了。怎样知道颜色传感器采集的数值呢?将采集到的数值显示出来就可以了,这里需要用到显示模块。
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>                       <ignore_js_op>    下面是完整的机器人自己读取最大值和最小值的程序

<ignore_js_op><ignore_js_op><ignore_js_op> 



     附件传不了,只能截图了。后期能传了再传一下。


     取得最大值和最小值之后又该怎么做呢?书上提到标准化传感器读数和目标值,公式是:标准化读数=100*(传感器读数-最小值)/(最大值-最小值)  它有什么好处呢?举个例子,不同的环境,不同的颜色,反射光值是不同的。以线路A最小值10和最大值80,线路B最小值30和最大值60为例,它们的目标值都是45,但是数值的范围不同,那么机器人对于这两种线路应该是不同的反应。线路A颜色传感器读数为60时,它还在线的边缘,而对于线路B它可能已经完全脱离线了。使用标准化读数之后,线路A的60,标准化为71,而线路B的60标准化为100。这个时候就反映出标准化读数的实用性,合理性。
     之前我们提到过目标值和误差值,在这里我们都将它们标准化。以线路A为例
     目标值45,标准化目标值为50     那么:误差值(Error)=目标值-测量值,标准化误差值=50-100*(测量值-10)/70
<ignore_js_op>    之前写到过 转向值=误差值*增益值。
    这里我们将增益值记为Kp,这里就是PID里的P部分。
    PID里的转向值,转向值=误差*Kp+微分*Kd+积分*Ki。
    误差:Error,微分:Weifen,积分:Jifen。
    Weifen=Error-上一个Error。新的Jifen=0.5*Jifen+Error。 
微分项    <ignore_js_op>
积分项           <ignore_js_op>
转向值        <ignore_js_op>           PID巡线虽然好用,可是调试过程非常困难,希望大家能耐住性子慢慢调试。

<ignore_js_op>
`DE35{N56$LE4DD)1$0V8%1.png (33.35 KB, 下载次数: 29)

 

点击确认后出现这样的程序,连接好通道就好了。

点击确认后出现这样的程序,连接好通道就好了。

<ignore_js_op>

H$WD98K[RV~0~8@TJX62CSD.png (88.66 KB, 下载次数: 17)

 

让机器人取最大值和最小值

让机器人取最大值和最小值


<ignore_js_op>

DisplayMinMax.ev3

 

9.3 KB, 下载次数: 212

 

读取Max和Min.

转载http://bbs.cmnxt.com/thread-19729-1-1.html