当前位置:首页 > 知识基础 > 编程技术 > 数学在机器人制作中的应用(2)

数学在机器人制作中的应用(2)

发表日期:2016-10-31 20:58:28文章编辑:浏览次数: 标签:    

数学表达式在机器人程序中的重要应用

    数学是个神奇的东西,它可以使问题简单化。学习机器人,如果有较好的数学基础,能帮助你更加清晰地分析问题和处理问题。

   下面是对寻线的程序中表达式书写的分析。

void check()

{

   ll=grd.getV(1);   //这些数据,看到黑线为0,未看到黑线为1

   l=grd.getV(2);

   m=grd.getV(5);

   r=grd.getV(3);

   rr=grd.getV(4);

   n=ll+l+r+rr+m;    //  n==5时为五个眼睛全看到白色区域

}

     这个函数里引入的变量n,获取五个地面寻线传感器取值之和。看似一个非常简单的表达式,却为后面书写复杂条件提供了方便。

举例如下:

1、五个眼睛都看到白色区域:n==5(每个眼睛看到白色的传感器取值为1)

2、五个眼睛都看到黑色线:n==0

如果没有引入n这个变量,要说明上述两个条件也不难,就写:

ll+l+m+r+rr==0/5

可要表达下面这个条件,变量n的作用就明显起来

3、五个眼睛中有四个看到白色,只有其中一个看到黑色,表达式为:n==4。

想想看,如果没有变量n,你打算如何写。从未思考过这个问题的同学,你或许还无从下手。

4、五个眼睛中仅三个眼睛看到白色,两个眼睛看到黑线:n==3

更大的优势表现在下面的条件中:

5、至少有3个眼睛同时看到黑线:n<3

6、至少有4个眼睛同时看到黑线:n<2

读者不妨去掉n这个变量,看看这两个条件如何写。如果你能写出正确的表达式,你更会觉得变量n的引入,真让人太方便了。

    我们再来看下面这段我们最常见的程序

先将地面寻线传感器的读数程序改动如下:

void check()

{

   ll=1-grd.getV(1);   //经这么修改,看到黑线为1,未看到黑线为0

   l=1-grd.getV(2);

   m=1-grd.getV(5);

   r=1-grd.getV(3);

   rr=1-grd.getV(4);

   n=ll+l+r+rr+m;    //n==5时,是五个眼睛全看到黑线

}

   这里多次使用  x=1-y   形式的表达式,其作用是使x与y的0/1属性刚好相反。

   经过上面的改动,n的值对应于n个眼睛看到黑线,更符合人们的习惯。且常用的寻线程序如下:

void line()

{

   if (ll+l==2) motor(-10,50);

   else if (ll==1) motor(0,40);

      else if (l==1) motor(10,30);

         else if (r==1) motor(30,10);

             else if (rr==1) motor(40,0);

                 else if (rr+r==2) motor(50,-10);

                     else if (m==1) motor(20,20);

   if (n>2)                            //三个或以上的眼睛同时看到黑线

   {

      motor(0,0);

     return;

  }

}

我们再借助2个变量,将程序写成另一种形式,但效果一样。

int v0=20;

void line()

{

   k=2*ll+l-r-2*rr;

   motor(v0-10*k,v0+10*k);

   if (n<3)

   {

      motor(0,0);

     return;

     }

}

    这样程序变量相对简单,且不易出错。修改也简单,我们只要修改v0和k的系数,就可以改变机器人对不同线型循迹的需要。

     在这里,变量k的取值对应下面的情况:(v0=20)

变量或表达式

   ll

   l

   r

   rr

   k

v0-10*k

v0+10*k

分    析

   1

0

0

0

0

0

20

20

全白

   2

0

1

0

0

1

10

30

黑线偏左

   3

1

0

0

0

2

0

40

黑线偏左严重

   4

1

1

0

0

3

-10

50

左边两个眼睛同时看到黑线

   5

0

0

1

1

-3

50

-10

右边两个眼睛同时看到黑线

   6

0

0

0

1

-2

40

0

黑线偏右严重

   7

0

0

1

0

-1

30

10

黑线偏右

   8

1

1

1

1

1

20

20

全黑

     从上表的分析,我们可以看出一个简单的语句与上面程序中多个分支语句(if 结构)的对应关系,而表达式

                         k=2*ll+l-r-2*rr;

和语句motor(v0-10*k,v0+10*k)里的两个速度表达式,将复杂的条件分析简化为数学运算。但数学表达式的产生,需要大家在实践中总结经验,才能获取理想的描述现象的表达式来。

 

如没特殊注明,文章均为亮宁电子原创,转载请注明出处
相关新闻

分治思想在巡线过程中的应用(图文)

一、预备知识 分治思想也称分治算法,指在面对一个信息量大、结构复杂的问题时,将这个问题拆分成若干个相对简单、易于处理的小问题,再根据各个小问题的具体特点和情况,采取...

日期:2017-02-17

数学在机器人制作中的应用(2)

数学表达式在机器人程序中的重要应用 数学是个神奇的东西,它可以使问题简单化。学习机器人,如果有较好的数学基础,能帮助你更加清晰地分析问题和处理问题。 下面是对寻线的程序中表达式书写的分析。 void check(...

日期:2016-10-31

系统函数使用说明

程序中必须引用LNDZ.h头文件(#include<LNDZ.h>)。 Ver 1.00 Beep蜂鸣器 beep(蜂鸣时长); 如:beep(200),//鸣叫200毫秒 屏幕输入输出函数 用USB将主板与电脑相连并下载程序后,用菜单tools下的Serial monitor命令,将弹出程...

日期:2016-10-31

亮宁可视化编程应用第二讲

第二讲 函数调用与引用变量 这一讲,我们来用可视化界面编写一些实用的程序。 例一,我想让机器人蜂鸣器连续发声0.3秒,设置步骤如下: 第一步设置变量名为t,并赋初始值为300毫秒; 第二步设置蜂鸣器开启; ...

日期:2016-10-31

亮宁可视化编程应用第三讲

第三讲 设备说明与应用 大部分接设备,与单片机的联结方式不止一种,有些设备,一次性也可能不止接入一个,所以通常要用不同的标识来区分同一种设备,同时指明接入的方式。例如: ser1.attach(9); ser2.attach(...

日期:2016-10-31

亮宁可视化编程应用第四讲

第四讲 分支结构与注释语句 为了讲解分支结构,先我们来做些准备工作。 先在四轮小车结构前方添加红外接收传感器(上有五个黑色红外接收二极管的板子)。接线方法是,VCC(白线)、GND(黑线)将其与主板相连,提供传感器电源...

日期:2016-10-31