浙师大智能机器人实验报告

智能机器人

实验报告

             

              学   院:    数理与信息工程学院    

              专   业:计算机科学与技术(师范)111

              学   号:                          

              姓   名:                          

              教   师:      

              上交时间:       年       月      日

        实验一  机器人“听令”出发

一、实验要求与目的

1. 机器人的光敏传感器和红外传感器可以像人的眼睛一样,获取光线强弱的信息和周围障碍物体的信息。并且机器人还可以用声音传感器获取声音信息,在下面的项目中,将通过声音传感器为机器人发令。

2. 在机器人赛跑项目中,机器人的起跑是通过按机器人操作面板上的“运行”按钮来实现的。而在机器人“听令”出发的项目中,将通过发出起跑的声音命令来控制机器人的起跑。

二、实验设备与器材

1. 能力风暴智能机器人和仿真软件VJC1.5(每个学生1套);

2. 计算机(每个学生1台)。

三、实验原理与内容

1. 项目分析

能力风暴机器人的声音传感器实际上是一只可以接收声音大小的麦克风,通过该传感器,机器人可以“听到”发出的声音指令,并根据环境声音大小对机器人实现智能控制,请同学们找到声音传感器的位置。

(1)知识点提示:声音传感器(麦克风)函数microphone( )用于检测声音传感器接收到的声音信息。函数对音量检测值的范围为0~255的整数,函数值越大,声音越大。

(2)环境声音信号的检测:通过下面的程序可以检测到周围环境的声音信息,同时也可以检测到发令的声音强度信息,并将发令声音信息记录下来,作为机器人“听令”出发的判断依据。

Void main()

{

int micv;

while(1)

{

micv=microphone();

printf(“micv%d\n”,micv);

wait(0.3);

}

}

通过上面的程序获取环境声音的检测数据,并填入下面的空中以备项目实施时的应用:机器人所在场地的声音环境检测值是____22_______,发令时的声音检测值是______200_________。

2. 算法分析

图1-1  机器人听令出发程序的部分框图

通过反复判断环境声音信号的检测值来实现机器人的“听令”出发。

知识点提示:VJC系统的关系式:用能力风暴机器人的VJC系统编写程序时,循环控制和条件控制语句中都要用到条件判断,条件判断中的条件可以用VJC系统的关系表达式来表示。大于>,不等于!=,小于<,大于等于>=,等于= =,小于等于<=。

机器人“听令”出发程序的部分框图如图1-1所示。

四、分析思考与报告

(1)机器人为什么会按指令行“走”?通过什么传感器向机器人法令让其行“走”?如何修改相关参数?

因为机器人可以用声音传感器获取声音信息,并通过声音传感器为机器人发令,从而让机器人按指令行“走”。

通过声音传感器,机器人可以“听到”发出的声音指令,并根据环境声音的大小让机器人按指令行“走”。

声音传感器函数microphone()用于检测声音传感器接收到的声音信息。函数对音量检测值的范围为0-255的整数,函数值越大,声音越大。

(2)如何声控,击掌启动直行,击掌后退。

     程序代码:

           void main()

                  {

                      int voice1=0;

                      int voice2=0;

                      while(1)

                      {

                             voice1=microphone();

                             printf("voice1=%d\n",voice1);

                             if(voice1>=200)

                             {

                                    wait(0.5);

                                    stop();

                                    drive(30,0);

                                    while(1)

                                   {

                                          voice2=microphone();

                                          printf("voice2=%d\n",voice2);

                                          if(voice2>=200)

                                          {

                                                 wait(0.5);

                                                 stop();

                                                 drive(-30,0);

                                                 break;

                                             }

                                      }

                               }

                        }

                 }

(3)机器人开始直线行走,机器人听到声音命令后,机器人开始走圆形路径。

     程序代码:

         void main()

                  {

                      int voice=0;

                      drive(30,0);

                      while(1)

                      {

                             voice=microphone();

                             printf("voice=%d\n",voice);

                             if(voice>=200)

                             {

                                    wait(0.5);

                                    stop();

                                    drive(0,30);

                                    break;

                                }

                         }

                  }

(4)机器人开始直线行走,机器人听到声音命令后,机器人开始走方形路径。

     程序代码:

         void main()

                  {

                      int voice=0;

                      drive(30,0);

                      while(1)

                      {

                             voice=microphone();

                             printf("voice=%d\n",voice);

                             if(voice>=200)

                             {

                                    while(1)

                                    {

                                           wait(1.0);

                                           stop();

                                           drive(0,30);

                                           wait(0.3);

                                           stop();

                                           drive(30,0);

                                       }

                                }

                         }

                  }

(5)总结实验收获与体会,碰到哪些问题及如何克服与解决的。

     一开始搞不懂机器人显示屏上显示的数字是什么,后来通过看ppt才理解microphone()函数,并且要使机器人行走起来必须要用drive()函数,需要注意的是左右轮速度的控制,因为这会影响机器人的行走路线,总体感觉还不错,就是有时候鼓掌要鼓很多次,机器人才能接收到开始行走。

实验二  机器人“唱”歌

一、实验要求与目的

1. 在机器人“唱”歌项目中,要“教会”机器人“唱”歌,然后掌握机器人发声的原理。

2. 找一段简单的简谱,翻译成VJC代码,控制机器人“唱”出简谱对应的歌曲。

二、实验设备与器材

1. 能力风暴智能机器人和仿真软件VJC1.5(每个学生1套);

2. 计算机(每个学生1台)。

三、实验原理与内容

1. 项目分析

机器人的主板上有一个喇叭,在VJC系统中用发声函数可以让喇叭发出声音。为了让机器人“唱”歌,可以如此设计。

编写机器人”唱”歌的程序算法分析:VJC系统的音频函数tone(float h,float t)用于产生一个音频为h赫兹,时间为t秒长的音频信号。函数中表示音频的变量h和表示时间的变量t都是实变量。

VJC系统的音频函数beep( )用于产生一段0.3秒500赫兹的音频信号。

2. 项目实施

(1)编写机器人“唱”歌程序

在学习编写机器人”唱”歌程序之前,先来了解一下给机器人编写简单发音程序的步骤。

步骤一、从“控制模块库”拖出“永远循环”模块,置于“主程序”模块下,使机器人不停的重复“唱”同一首歌曲;

步骤二、从“执行器模块库”拖出“发音”模块,置于“永远循环”模块下的循环体中,实现”唱”歌功能;

步骤三、在“发音1”模块上右击鼠标,弹出“发音模块”对话框,在该对话框中可以修改发音频率或发音时间,以“唱”出优美的歌曲。

(2)能力拓展:“祝你生日快乐”乐曲的子程序。

知识点总结:

tone (261.6,0.25);  ­——简谱dou的音

tone (293.6,0.25);  ——简谱rai的音

tone (329.6,0.25);  ——简谱mi的音

tone (349.2,0.25);  ——简谱fa的音

tone (391.6,0.25);  ——简谱sou的音

tone (440.0,0.25);  ——简谱la的音

tone (493.8,0.25);  ——简谱xi的音

tone (523.2,0.25);  ——简谱dou的高音

3. 请同学们自己寻找一段简单的歌曲简谱,翻译成VJC代码,编写机器人”唱”歌程序。

四、分析思考与报告

(1)机器人为什么会“唱”歌?通过什么传感器让机器人 “唱”歌”?如何修改相关参数?

机器人的主板上有一个喇叭,在VJC系统中用发声函数就可以让喇叭发出声音。

通过声音传感器发音。

VJC系统的音频函数tone(float h,float t)用于产生一个音频为h赫兹,时间为t秒的音频信号。控制h和t就可以编写简单的曲谱了。

(2)自己设计一个程序流程和程序函数参数,实现机器人”唱”出预定的歌曲,给出程序流程图和程序源代码。

     程序代码:                                流程图:

void main()

{                                       

   printf(" so so \n");

   while(1)

   { tone(441.0,0.5);

     tone(393.0,0.25);

     tone(423.0,0.25);

     tone(393.0,0.25);

     tone(523.0,0.5);

     tone(325.0,1.0);

     tone(342.0,0.25);

     tone(493.0,0.25);

     tone(341.0,0.25);

     tone(493.0,0.5);

     tone(388.0,0.5);

  }

       }

(3)总结实验收获与体会,碰到哪些问题及如何克服与解决的。

     这个实验本身并不困难,但是要唱出有节奏的歌还真的需要一点音乐底子,像我这种五音不全的根本不知道什么叫拍,tone()里的数改了好几遍都不成功,真的很麻烦,于是后来我就干脆从网上找了一个流程和编码,自己操作了一下感受就好了。

实验三  机器人边“走圆(方)形路径”边“唱”

一、实验要求与目的

1. 在机器人边走边“唱”项目中,首先要“教会”机器人“唱”歌,然后再让机器人在运动过程中“唱”歌。

2. 机器人“走”路与“唱”歌的结合,例如走不同图形“唱”不同的歌曲。

二、实验设备与器材

1. 能力风暴智能机器人和仿真软件VJC1.5(每个学生1套);

2. 计算机(每个学生1台)。

三、实验原理与内容

1. 项目分析

机器人的主板上有一个喇叭,在VJC系统中用发声函数可以让喇叭发出声音。为了让机器人一边行走一边“唱”歌,可以从以下两个方面进行设计。

(1)写机器人“唱”歌的程序

(2)利用VJC的多任务功能,以分时的方式,使机器人“同时”执行“走”矩形和““唱””歌的程序。

2. 算法分析

VJC系统通过进程函数,可以让用户为几段具有独立功能的程序分配很小的时间片,使这些程序段按分配的时间片和进程函数的顺序反复被执行。由于时间片很小,所以使我们感到几段程序好象使在“同时”执行。

在实验机器人”唱”歌项目时,可以分别编写走矩形和”唱”歌的两段程序,通过进程为它们分配时间片,并按顺序反复调用这两段程序。

3. 项目实施

(1)写机器人“唱”歌程序

在学习编写机器人“唱”歌程序之前,先来了解一下给机器人编写简单发音程序的步骤。

步骤一、“控制模块库”拖出“永远循环”模块,置于“主程序”模块下,使机器人不停的重复”唱”同一首歌曲;

步骤二、“执行器模块库”拖出“发音”模块,置于“永远循环”模块下的循环体中,实现”唱”歌功能;

步骤三、在“发音1”模块上右击鼠标,弹出“发音模块”对话框,在该对话框中可以修改发音频率或发音时间,以“唱”出优美的歌曲。

(2)VJC的多任务功能,以分时的方式,编写机器人“同时”走方形(圆形)和”唱”歌的程序。实现的操作步骤如下:

步骤一、“程序模块库”中的“任务开始”模块拖到流程图窗口,作为任务1的开始

步骤二、前面用流程图编写的走矩形程序置于任务1的“任务”模块的下面,形成名为task-0的任务,同时形成以task-0为任务的进程start-process(task-0()),来实现机器人走矩形的功能。

步骤三、“程序模块库”中的“任务开始”模块拖到流程图窗口,作为任务2的开始。

步骤四、前面用流程图编写的简单发音程序置于任务2的“任务”模块的下面,形成名为task-1的任务,同时形成以task-1为任务的进程start-process(task-1()),来实现机器人”唱”歌的功能。

四、分析思考与报告

(1)机器人为什么会边“走”边“唱”?通过哪些传感器控制机器人的边“走”边“唱”?如何修改相关参数?

利用VJC的任务功能,以分时的方式,使机器人“同时”执行走圆形和唱歌的程序。VJC系统通过进程函数,可以让用户为几段具有独立功能的程序分配很小的时间片,使这些程序段按分配的时间片和进程函数的顺序反复被执行。由于时间片很小,所以使我们感到“唱”和“走”程序好像同时执行。

声音传感器。

VJC系统中函数motor(a,b)和drive(a,b)都是让机器人行走的函数,改变a,b的值可以控制机器人的速度。VJC系统的音频函数tone(float h,float t)用于产生一个音频为h赫兹,时间为t秒的音频信号。控制h和t就可以编写简单的曲谱了。

(2)自己设计程序流程和函数参数,实现机器人边“走方形(圆形)”边“唱”,给出程序流程图和源代码。

     “走圆形”源程序:

                        void main()

                            {

                                start_process(task_0());

                                start_process(task_1());

                            }

                            void task_0()

                            {

                                while(1)

                                {

                                       drive(0,80);

                                       wait(0.100000);

                                       stop();

                                   }

                            }

                            void task_1()

                            {

                                while(1)

                                {

                                       tone(441.0,0.5);

                                    tone(393.0,0.25);

                                    tone(423.0,0.25);

                                    tone(393.0,0.25);

                                    tone(523.0,0.5);

                                    tone(325.0,1.0);

                                  tone(342.0,0.25);

                                  tone(493.0,0.25);

                                  tone(341.0,0.25);

                                  tone(493.0,0.5);

                                  tone(388.0,0.5);

                                     wait(0.500000);

                                   }

                            }

(3)总结实验收获与体会,碰到哪些问题及如何克服与解决的。

这次实验让我体会到了系统分时的优点,原本互相独立运行的操作现在可以让它们同时进行,感觉很奇妙。遇到的问题就是机器人在走方形的时候总是出问题,总也走不出来,同学告诉我应该是机器人轮子的问题,会在行走时出现误差,所以后来我就用圆形走了,这个操作就成功多了。

实验四  机器人“追”光

一、实验要求与目的

1. 利用光敏传感器来做一个项目——追光(就好比飞蛾扑火,机器人向有光的地方运动)。

2. 可以将点亮的蜡烛作为光源,让机器人寻找光源或者移动蜡烛让机器人能够跟随光源移动。

3. 光敏传感器函数photo()的使用,photo(1)为左眼,photo(2)为右眼。

二、实验设备与器材

1. 能力风暴智能机器人和仿真软件VJC1.5(每个学生1套);

2. 计算机(每个学生1台)。

3. 蜡烛、打火机(实验中注意用火安全,必须有人看守时才点亮蜡烛,人离开时必须吹灭蜡烛)。

三、实验原理与内容

1. 项目分析

在机器人追光项目中,将机器人放在黑暗的房间里,当打开电筒时,机器人会朝着电筒光亮的方向行进。在信息处理的过程中,信息获取时信息处理的首要环节,能力风暴机器人可以通过各类传感器获取不同的信息。

光敏传感器是能力风暴智能机器人所使用的传感器之一,它通过感测机器人外部环境光线的强弱来感知光源的位置,在机器人追光项目的完成过程中,将学会光敏传感器的运用以及结合VJC系统的条件判断功能来处理信息的方法。

机器人追光的项目是通过反复对光敏传感器采集的光线信号做出比较判断来确定光线较强的方向,从而使机器人朝着光线较亮的方向移动。能力风暴机器人的左前方和右前方分别装有一个光敏传感器。

运行下面的程序,来体会光敏传感器的应用。光敏传感器是通过光敏传感器函数的驱动来反复采集环境光线信息的,并通过输出端LCD显示采集到表示光线强弱的数据。

Void main()

{

int photo1=0; int photo2=0;

while(1)

{

photo1=photo(1); photo2=photo(2);

printf(“p1=%d p2=%d\n”,photo1,photo2);

wait(0.3);

}

}

2. 算法分析

在项目实施过程中,机器人可以对环境光线强度进行检测,并根据比较左右光线强度的大小做出判断,以控制机器人向光线强的方向行走。在该项目中,对所获取的左右光敏信号的判断及处理是解决问题的关键。

(1)流程图

机器人追光项目的算法可以用图4-1所示的流程图来表示,它能以直观的方式表达解决问题的算法和步骤。

(2)知识点提示

if(条件表达式)

{  程序段A   }

else

{  程序段B }

程序段C

图4-1  机器人追光算法框图

3. 项目实施

完成机器人追光的任务。

4. 能力提高

思考能否让机器人朝黑暗的地方走?采用何种方法可以让机器人更快地寻找到光源位置?

四、分析思考与报告

(1)机器人为什么会追逐发光物体?通过什么传感器控制机器人的追光?如何修改相关参数?

光敏传感器通过感测机器人外部环境光线的强弱来感知光源的位置。在追光过程中,利用光敏传感器和VJC系统的条件判断功能来处理光源位置的问题。

光敏传感器。

光敏传感器函数photo()的使用,photo(1)为左眼,photo(2)为右眼。通知检测左右两个传感器的差值,若差值为负数,说明左边比右边亮,则让机器人左转;否则,说明右边比左边亮,则让机器人右转;若差值为0,则让机器人往前直行。

(2)自己设计一个程序流程和程序函数参数,实现机器人能够寻找和追逐蜡烛的移动,给出程序流程图和程序源代码。

     源代码:

              int photo_1=0;

                   void main()

                   {

                          while(1)

                          {

                                 photo_1=photo(1)-photo(2);

                                 f(photo_1<0)

                                 {

                                        drive(0,30);

                                        wait(0.100000);

                                        stop();

                                        drive(30,0);

                                        wait(0.500000);

                                        stop();

                                 }

                                 else

                                 {

                                        if(photo_>0)

                                        {

                                               drive(0,-30);

                                               wait(0.100000);

                                               stop();

                                               drive(30,0);

                                               wait(0.500000);

                                               stop();

                                        }

                                        else

                                        {

                                               drive(30,0);

                                               wait(0.500000);

                                               stop();

                                        }

                                 }

                                 printf("photo_1=%d\n",photo_1);

                          }

                   }

(3)总结实验收获与体会,碰到哪些问题及如何克服与解决的。

     虽然实验挺简单的,但是教室里光线太亮了,实验操作起来效果不是很好,后来到外面的暗处做了,还算成功,不过就是亮光稍微远一点就感应不到了。

实验五  机器人模拟卫星运动

一、实验要求与目的

1. 熟练使用机器人编程软件。

2. 巩固对机器人的各种传感器和执行器的认识和编程操作。

二、实验设备与器材

1. 能力风暴智能机器人和仿真软件VJC1.5(每个学生1套);

2. 计算机(每个学生1台)。

3. 蜡烛、打火机(实验中注意用火安全,必须有人看守时才点亮蜡烛,人离开时必须吹灭蜡烛)。

三、实验原理与内容

1. 熟悉和了解SVJC软件的使用方法(建议自学)

SVJC是能力风暴智能机器人的仿真软件,它可以在计算机中仿真机器人程序的运行。用SVJC软件编程,让机器人如同一个卫星一样,围绕“恒星”(一支点亮的蜡烛)以一定的半径旋转,即不远离也不靠近。

要让机器人围绕一支点亮的蜡烛以一定的半径旋转,这就要求机器人能够感知到蜡烛所在的位置,能够判断自身离蜡烛距离的远近,并能在出现偏移的情况下及时地做出调整。

2. 方案设计

如图5-2所示,让机器人围绕蜡烛旋转,有多种可以实现的方案,这里提出用机器人的右光敏感测光源,也就是让机器人围绕蜡烛顺时针旋转。向前行走的过程中右光敏传感器不断的检测外界的光线值,并将返回值与临界值进行比较。如果,检测到的光线比设定的光线弱,就向靠近“恒星”的方向转,否则就前进。这样机器人就可以以固定的半径围绕“恒星”旋转。

图5-2  机器人模拟卫星运动原理分析图

怎样才能得到临界值呢?

首先,编写一个不断检测右侧光敏传感器,并将传感器检测到的数值在LCD上显示的程序,运行,进入仿真界面,场地中“点”上蜡烛;

其次,确定一个绕蜡烛旋转的半径,比如是40 cm,把机器人放在离蜡烛40 cm的各个方向上,看光敏传感器的测量值(LCD上显示的值),并记录下这些值,并填入表5-1中;

最后,并将测得的值进行平均,确定临界值。

表5-1  数据记录表

3. 确定临界值后,根据要求确定整体方案!(程序流程图可参考图5-3

图5-3  机器人模拟卫星运动程序流程图

四、分析思考与报告

(1)机器人通过哪些传感器实现卫星功能?如何修改相关参数?

 通过光敏传感器来感知光源的位置来实现机器人围绕光源来转的功能。当检测到光强度的值小于254时,机器人就直走0.2s,不然就右转0.05s再直走0.05s。

(2)自己设计一个程序流程和程序函数参数,实现机器人像卫星一样能够围绕蜡烛转动,给出程序流程图和程序源代码。

     源代码:

               int photo_1=0;

               void main()

              {

                     while(1)

                    {

                           photo_1=photo(1);

                           if(photo_1<254)

                           {

                                  drive(20,0);

                                  ait(0.200000);

                                  stop();

                           }

                           else

                          {

                                 drive(0,20);

                                 wait(0.050000);

                                 stop();

                                 drive(20,0);

                                 wait(0.050000);

                                 stop();

                          }

                          printf("photo_1=%d\n",photo_1);

                   }

            }

(3)总结实验收获与体会,碰到哪些问题及如何克服与解决的

     这个实验主要是要找出那个临界值,那个临界值是测试了好多次,然后取平均得出来,具体要编写一个不断检测右侧光敏传感器,并将传感器检测到的数值在LCD上显示的程序,运行,进入仿真界面,场地中“点”上蜡烛。经过多次的调试和记录,知道差不多为止,过程有点繁琐。而且教室的光线太亮,不利于机器的向光运动,还有不同的机器人同样的速度转的圈的大小也不一样,要不断修改左轮右轮速度,才能是机器人做卫星运动。

实验综合设计  机器人群“鸭”过河比赛

一、实验要求与目的

1. 熟练使用机器人编程软件。

2. 巩固对机器人的传感器和执行器的认识与编程操作。

3. 可以小组的形式开展比赛,要求在 “机器人鸭妈妈”带领下“机器人小鸭”能够安全过河(河和过河规则可以根据需要自行设计),最后以安全过河的“机器人小鸭”数量和过河时间决出胜负。

二、实验设备与器材

1. 能力风暴智能机器人和仿真软件VJC1.5(每组学生5套);

2. 计算机(每个学生1台)。

3. 比赛的“河”可以自行设定和搭建(多组可以设定和搭建一个,然后轮流使用和比赛)。

三、实验原理与内容

1. 实验任务

以小组的形式展开比赛,让其中一台机器人作“机器人鸭妈妈”,另外几台机器人作“机器人小鸭”,要求“机器人小鸭”能够在“机器人鸭妈妈”的代领下,一个跟在一个后面,一起安全“游”过“河”,“河宽根据实际场地情况自行设定”。最后以安全过“河”的机器人个数最多和时间最短的队获胜。群鸭过河示意图如图1所示。

图1  机器人群“鸭”过河示意图

2. 任务分析

“机器人鸭妈妈”带着一队“机器人小鸭”过河,那么就需要为“机器人鸭妈妈”编写“过河”程序,其他“机器人小鸭”能够一个跟着一个,那么就要为它们分别编写“跟随”程序。

3. 活动准备

(1)物品准备:能力风暴智能机器人               5台

              计算机                           1台

(2)让机器人移动要使用到库函数drive(a,b),在前面已经作过相应的介绍,在这里就不重复说明了,可通过复习实验一中的内容加以掌握。

(3)判断与循环语句的使用。

    while(1)

   {

     …

      }

这个语句是一个无限循环语句。while语句不断对其后( )中的内容进行判定。当判断的值为1时就将{}内的语句执行一遍,然后再接着对( )中的值进行判断。而在这里while后面( )里的内容为1,所以这个语句会无限循环下去。

if ( )

else或者else if()

也是比较常见的判断语句,这种语句能够将问题的多种情形都罗列出来,分别进行处理。

(4)红外传感器可以检测到正前方、左前方、右前方是否有障碍物,调用一次库函数ir_detector(),红外传感器就进行一次检测,并有返回值。返回值的具体意义为: 0à没有障碍;1à左边有障碍,2à右边有障碍;4à前方有障碍。

(5)机器人的碰撞传感器,能够检测到前、后、左、右四个方向的碰撞,调用一次 bumper()函数,就进行一次碰撞检测,有返回值。其具体意义为:1à左前;2à右前;4à左后;8à右后;3前;12à后;5à左;10à右。

4. 方案设计

方案的设计分为“过河”和“跟随”两个部分。

(1)“过河”

过河的方案有很多,比如:直着过河、斜着过河、波浪式过河等,不同的过河方法,程序编写的难度有所不同,随后的小鸭“跟随”的难度也有所不同,波浪式过河,后面跟随的小鸭就比较容易跟丢,带小鸭成功过河的可能性就比较小。

(2)“跟随”

要让小鸭能够跟随,这就需要用到红外传感器,当小鸭“看到”前方有物体时,就会主动跟上前去。这时候,如果小鸭的前进速度比较慢,它很可能就跟不上了,速度快又会撞到前面的小鸭,因此速度的设置比较重要。

如果小鸭撞到了前面的鸭子,该怎么办?可以让它停下来,再去检测前面有没有可以跟随的鸭子。

如果小鸭迷失了方向该怎么办呢?也让它停下来,在原地等着鸭妈妈。

具体的方法由大家自己来设计,能够完成整个活动的方案就是好方案!

5. 画流程图

试着根据思路画流程图,画这个流程图时遇到的判断比较多,难度增加了。要仔细地思考。条理清晰,会有利于编程。

根据流程图或JC代码所学知识编写程序,再将编写好的程序下载、运行。先从小鸭妈妈带一个小鸭过河开始,逐渐增加小鸭的个数,看哪个队的小鸭妈妈一次能带过河的小鸭最多!

若未达到活动效果,则说明程序还需要调试,该改动哪些地方呢?并将出现的异常现象和解决办法填入表1。

表1  出现的异常现象及解决办法

四、分析思考与报告

(1)机器人通过哪些传感器可以实现行为控制?如何修改相关参数?

 红外线传感器、碰撞传感器

(2)自己设计一套群鸭过河规则,然后根据该规则设计出一个程序流程和程序函数参数,给出程序流程图和程序源代码。

母鸭部分程序如下:

                 

   void main()                   

{

int ir = 0;                 

    int v_f =20;                                

int v_t =15;                             

    ir = ir_detector();           

    while(1)

    {    

           if(ir==0)drive(v_f,0);     

           else if(ir==4)                     

           {    

                  if(ir==1)           

                  {

                         if(ir==2)stop(); 

                         else                         

                         {

                                drive(v_f, v_t); 

                                drive(v_f,0);    

                            }

                     }

                     else                   

                     {

                                 drive(v_f, -(v_t)); 

                                drive(v_f,0);    

                     }

              }

              else drive(v_f,0);     

       }

}

小鸭的程序,每只小鸭的速度有所不同:

void main()                     

{

    int ir = 0;                  

    int bmp = 0;                 

int pre_bmp = 0;             

    int v_f =25;                               

    int v_t =15;                             

    while (1)

    {

        ir = ir_detector();         

        bmp = bumper() & 0b0011; 

        if (pre_bmp && bmp)      

                                                              

        {

            stop();

            wait(0.5);             

        }

        else if (bmp)          

             stop();                  

        else if (ir == 0)              

             stop();                  

        else if (ir == 4)             

             drive(v_f,0);             

        else if (ir == 1)            

             drive(v_f, (- v_t));      

        else if (ir == 2)             

             drive(v_f, v_t);          

             wait(0.1);                    

        pre_bmp = bmp;

    }

}

(3)怎样才能让跟随的“机器人小鸭”不把“机器人鸭妈妈”跟丢,或者提高跟随“机器人小鸭”的数量?

     首先母鸭速度要控制,母鸭速度太快,小鸭的反应不过来,容易跟丢,所以母鸭速度慢一点,控制在10-20左右。小鸭的速度如果和母鸭差不多的话,小鸭会在母鸭后面一定距离跟随,但是很容易跟丢。为保险起见,将第一只小鸭速度适当调大,使其能紧随其后。为了能使跟随更多的小鸭,从第二只小鸭开始,每只小鸭的速度应该都要比前一只小鸭适当大些。通过多次实验调试,最终找到最合适的紧紧跟随的速度。

(4)总结实验收获与体会,碰到哪些问题及如何克服与解决的。

     这次实验的综合性很强,难度也有点大,主要有是母鸭和子鸭程序的设计以及小鸭子速度参数的修改。我们小组设计的母鸭是直行过河,遇到障碍转弯,程序相对于鸭子比较简单,但是实验室的机器人很多都有故障,很多都会在直行过程中都会转弯,所以在选择母鸭时,进行了很多次执行直行的测试。而鸭子的程序有点难度,要实现自动跟随,需要红外检测检测附近是否有障碍物,有就向障碍物就前进。然后就是对母鸭和小鸭们的调试,由于每次实验课调试的地方有所差异及机器人不同,而且能用的机器人数量也不多,所以调试都经过两三个星期的时间,这也是本次实验难度最大的地方,经过我们小组三位成员的辛苦协作,实验结果还是比较理想的。

相关推荐