智能机器人实验报告

《智能机器人

  实验报告

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

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

学   号:       

姓   名:           

教   师:        

上交时间: 20XX 年 12  月 19 日

               

                  成   绩:                 

             实验中用到函数整理

l        函数:drive(x,y)

功能:控制两个电机的转动。

说明:函数的两个参数x、y 的取值范围是100到-100的整数。x用来控制前进的速度和方向,y用来控制转弯的速度和转弯的方向。 x和y的取值同时决定了电机的功率级别。

    左电机功率级别=x+y         右电机功率级别=x-y

当电机功率级别大于0时电机控制的轮子向前转动,当电机功率级别小于0时电机控制的轮子的向后转动。代表电机功率级别数值的绝对值越大转速越快,绝对值越小转速越慢。

l        函数:motor(n,x)

功能:控制单个电机的转动。

说明:函数中的两个参数n、x,其中n=1表示函数控制的是左轮电机,当n=2时表示函数控制的是右轮电机。参数x是用来控制电机转速的。X的取值范围为100到-100之间的整数,当x为正数时轮子向前转动,当x为负数时轮子向后转动。x的绝对值越大转速越快,x的绝对值越小转速越慢。

l        进程函数

格式:start_process(<函数名>)

功能:为函数建立执行时间为0.5毫秒的进程。

说明:在使用进程的时候,要注意的是不要在两个进程中调用一个驱动装置

l        光敏传感器函数

函数:photo(x)

功能:取得光敏传感器接收到的光强信息。

说明:函数中的变量x为1时,取得的函数值为右光敏传感器的检测值,      当x为2时,取得的函数值为左光敏传感器的检测值。函数的取值为0~255的整数。检测的值越小,光线越亮。检测的值越大,光线越暗。

l        红外传感器

函数:ir_detector()

功能:取得红外传感器接收到的信息。

说明:红外线传感器系统检测障碍的过程如下:

1.   初始阶段左右发射管均关闭,此时红外接收器探测一次当前信号,并作为原始数据保持下来;

2.   每调用一次ir_detector()函数,红外传感器系统就打开一次,完成后左右发射管重又关闭;

3.   当红外传感器系统打开时,首先左红外发射管发射一次,延时1ms之后红外接收器探测一次信号并保存;然后右红外发射管发射一次,延时1ms之后红外接收器探测一次信号并保存;此处红外接收器探测一次信号的时间为0.064ms;

4.   机器人对采集的信号进行比较、判断:只有在初始探测无反射,第二次探测有反射时,系统才认为左侧有反射;同样初始探测无反射,第三次探测有反射时,系统确认右侧有反射。

l        发声函数

格式:beep()

功能:产生一段0.3秒500赫兹的音频信号。

l        声音传感器(麦克风)

函数:microphone()

功能:取得声音传感器接收到的声音信息。

说明:函数取得声音传感器的检测值,即麦克风的音量检测值。

   函数的取值为 0~255的整数,函数值越大,声音越响。

l        碰撞传感器函数

函数:bumper()

功能:取得碰撞传感器接收到的碰撞信息。

说明:该函数的取值为来自8个方向的碰撞检测值。

l        编码器计数函数

格式:rotation(n)

功能:当n=1时,取左编码器的计数值,

   当n=2时,取右编码器的计数值,

说明:函数的执行会将编码器的计数重置为零。

l        编码器状态函数

格式:encoder(n)

功能:当n=1时返回左编码器的当前状态,

   当n=2时返回右编码器的当前状态。

说明:返回值为0时,表示码盘上的黑格对着红外发射接收芯片;反之,则是白格对着红外发射接收芯片。

l        系统时间清零函数

格式:resettime()

功能:将系统时间复位清零。

l        时间信息的获取函数

格式:seconds()
功能:以秒为单位获取系统时间信息。
说明:函数值为浮点型数据。

l        C语言程序的主函数

void main()
         {
        <程序内容>
    }

功能:建立一个无返回值的函数。其中void表示后面的main()函数执行后无返回值。在一个程序中主函数的标志main()是惟一的,后面花括号中括着的是主函数的程序内容。

l        多次循环控制语句:

格式:for (<表达式1>;<条件式>;<表达式2>)
      {
          <循环体>

      }

功能:当<条件式>成立的时候执行循环,条件不成立的时候退出循环。

说明:语句中的<表达式1>是用来给控制循环的变量提供初值的赋值表达式, <表达式2>是关于循环变量的增量表达式。

l        条件循环和永远循环的控制语句:

格式:while(〈条件式〉)
 {
   〈循环体〉
 }

功能:当条件成立(即条件式的值不为0时)执行循环体,否则(即条件式的值为0时)  退出循环继续执行“}”后面的程序内容。

说明:将条件式的值写为1时,可以实现永远循环的控制。

l        条件判断的控制——if语句

格式1:

     if (〈条件式〉)
{〈程序段A〉}
else
{〈程序段B〉}
<程序段C>

功能:当条件成立时执行程序段A,然后执行程序段c,否则执行程序段B,     然后执行程序段c。

条件判断的控制——if语句格式2

格式2:

  if (〈条件式〉)
{〈程序段A〉}

〈程序段B〉

功能:当条件成立时执行程序段A,然后执行程序段B,否则跳过程序段A执行程序段B。

说明:格式1也可以写成以下形式:

if (〈条件式〉) {〈程序段A〉}
           {〈程序段B〉}

实验一   教你的机器人“走路”

一、教学要求与目的

能力风暴个人机器人是可移动的智能机器人,它的移动就相当于我们人的行走。你可能会问:机器人没有“脚”靠什么走路?我们要熟悉机器人用于走路的“脚”,要教你的机器人学会走路,同时你要掌握控制机器人走路的基本方法。

二、教学内容

 1、机器人为什么会“走”

人的行走是靠脚来实现的,而机器人的“行走”是靠由电机、齿轮箱和轮子构成的行走装置来完成的。因此,要想让机器人移动,就要控制电机的转动。控制机器人“行走”的基本指令是motor(x,y)函数和drive(x,y)函数。

A、关于机器人的“脚”

“脚”是走路的关键。用于机器人走路的“脚”,是安装在机器人底盘下部的两只驱动轮和两只随动轮,两只驱动轮的转动是由电机带动的。电机、驱动轮、齿轮等构成了机器人的行走装置。电机、驱动轮、齿轮等部件的位置请同学们观察。

B、控制机器人走路

    机器人的“腿脚“已经有了,显然,要让机器人的”腿脚“动起来,我们只要通过控制机器人的行走装置就可以实现了。机器人的行走装置需要它的”大脑“来支配,就如同人用大脑去支配腿脚运动一样。我们要控制机器人的行走,就要通过JC程序来实现,即通过控制电机的转动,使机器人产生移动。

 2、驱动电机的函数

我们已经知道电机是机器人行走的关键,只要电机转动,就可以使机器人产生移动。我们通过JC程序控制电机转动,使机器人行走的指令有两个,它们是motor(x,y)函数和drive(x,y)函数,下面我们分别介绍。

一、motor(x,y)函数

此函数是“启动”电机,x取值1、2,分别表示左右两个电机;y表示电机转速

两个电机同时以相同速度启动,意味着什么?机器人将怎样运动?

进一步讨论:如果将一侧电机速度改为0,机器人将会怎样运动?(顺时针、逆时针旋转)

实验题一:让机器人顺时针、逆时针旋转

实验题二:首先机器人前进2秒,之后机器人逆时针旋转1.8秒,然后机器人前进1秒,最后停下来。小结:motor函数主要是实现旋转。

二、drive(x,y)函数

此函数是“直行”,x表示基准速度,y表示左右电机与基准速度的差。机器人左侧电机速度为x-y,右侧电机速度为x+y。

由前面的知识,可以推断:drive函数既可以直行,也可以转弯。

试一试下面程序能够干什么?

Void main()

{drive(60,-20);

wait(11.0);         ——参数11.0可以调整,调整的变化是什么?

stop(); }

三、实验流程图或代码 以及观测记录

   

    一、motor(x,y)函数

      实验题一:让机器人顺时针、逆时针旋转

    (1)用vjc语言或者流程图让能力风暴顺时针走直径约1米的圆形路径;

 

      程序:

       void main()

      {

          while(1)

         {

          motor( 1 , 80 );

          motor( 2 , 20 );

          }

          stop();

       }

 (2)用vjc语言或者流程图让能力风暴逆时针走约1米立方的正方形路径;

 

      程序:

       void main()

      {

          while(1)

         {

          drive( 100 ,0);

          wait( 1.000000 );

          stop();

          motor( 1 , -20 );

          motor( 2 , 20 );

          wait( 0.500000 );

          stop();

          }

        }

     

     

     

      实验题二:首先机器人前进2秒,之后机器人逆时针旋转1.8秒,然后机器人前 

                进1秒,最后停下来。小结:motor函数主要是实现旋转。

          实验代码:

                Void main()

               {

                   Drive(60,0);

                   Wait(2.000000);

                   Stop();

                   Drive(0,-60);

                   Wait(1.800000);

                   Stop();

                  Drive(80,0);

                  Wait(1.000000);

                  Stop();

          }

    二、drive(x,y)函数

     试一试下面程序能够干什么?

         Void main()

         {drive(60,-20);

          wait(11.0);     ——参数11.0可以调整,调整的变化是什么?

          stop(); }

      答:上述所给程序可以画圆。参数11.0调整后所画圆弧弧度变小。

四、实验总结思考

使机器人行走的指令有两个,它们是motor(x,y)函数和drive(x,y)函数。

通过这个实验,在应用这两个函数时得出以下经验:

             (1)函数:drive(x,y)

功能:控制两个电机的转动。

   说明:函数的两个参数x、y 的取值范围是-100到100的整数。x用来

        控制前进的速度和方向,y用来控制转弯的速度和转弯的方向。 X

        和y的取值同时决定了电机的功率级别。

         左电机功率级别=x+y         右电机功率级别=x-y

        当电机功率级别大于0时电机控制的轮子向前转动,当电机

     功率级别小于0时电机控制的轮子的向后转动。代表电机功率级

     别数值的绝对值越大转速越快,绝对值越小转速越慢。

             (2)函数:motor(n,x)

   功能:控制单个电机的转动。

   说明:函数中的两个参数n、x,其中n=1表示函数控制的是左轮电机,

        当n=2时表示函数控制的是右轮电机。参数x是用来控制电机转

        速的。X的取值范围为100到-100之间的整数,当x为正数时轮子

        向前转动,当x为负数时轮子向后转动。x的绝对值越大转速越

        快,x的绝对值越小转速越慢。

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

一、教学要求与目的

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

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

二、教学内容

1、项目分析

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

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

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

Void main()

{  int micv;

     while(1)

       {  micv=microphone();

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

          wait(0.3);

         }

  }

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

2、算法分析

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

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

    机器人“听令”出发程序的部分框图。

 

3、项目实施

机器人执行以下的项目程序时,会根据环境声音信号检测时的声音信号检测值(80),对发令声音信号进行判断来决定是否起跑。

Int mic1=0;

Void main()

{

while(mic1<80)

{

mic1=microphone();

printf(“mic1=%d\n”,mic1);

}

drive(80,0);

wait(2.0);

stop();

}

(1)能力拓展:机器人开始直线行走,机器人听到声音命令后,后退。

(2)高级应用:如何声控,击掌启动直行,击掌后退。

三、实验流程图或代码 以及观测记录

机器人执行以下的项目程序时,会根据环境声音信号检测时的声音信号检测

    值(80),对发令声音信号进行判断来决定是否起跑。

Int mic1=0;

Void main()

{

while(mic1<80)

{

mic1=microphone();

printf(“mic1=%d\n”,mic1);

}

drive(80,0);

wait(2.0);

stop();

}

         实验测试结果:机器人服从命令起跑了

(1)能力拓展:机器人开始直线行走,机器人听到声音命令后,后退。

void  main()

{       int mic;

drive(20,0);

 while(mic<70)

          {

              mic=microphone();

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

 wait(0.5);

         }

drive(-20,0);

 }

(2)高级应用:如何声控。击掌启动直行,击掌后退

void  main()

{  int b=1;int mic;

       while(1)

       {

mic=microphone();

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

            wait(0.5);

            if(mic>60) b=b*-1;

         if(b==1)   drive(20,0);

            if(b==-1)  drive(-20,0);

       }

}

四、实验总结思考

 这个实验主要用到的是声音传感器,声音传感器用于检测声音传感器接收

  到的声音信息。机器人通过判断声音的大小来决定执行哪个命令。  声音传感器(麦

 克风)microphone()主要可以概括为:

           声音传感器(麦克风)

函数:microphone()

功能:取得声音传感器接收到的声音信息。

说明:函数取得声音传感器的检测值,即麦克风的音量检测值。

   函数的取值为 0~255的整数,函数值越大,声音越响。

   在调试过程中,函数取值和自己发出声音大小没有控制好会让自己绕几个圈子后才成功,虽然实验很简单,但是成功往往是来之不易啊。

实验三  机器人唱歌

一、教学要求与目的

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

二、教学内容

(一)项目分析

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

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

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

(二)项目实施

1、编写机器人唱歌程序

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

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

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

C、在“发音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的高音

同学们找一段简单的简谱,翻译成VJC代码,编写机器人唱歌程序。

三、实验流程图或代码 以及观测记录

 流程图:

程序代码:                               

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);

  }

       }

四、实验总结思考

   这个实验其实真简单,就是运用了音

频函数而已,但是把一个个音符敲进去还

是挺麻烦,费时间的,还老敲错,因为音频函数要控制频率和时间,敲出一首好听的歌曲还是需要音乐细胞,要看的懂乐谱,还要把乐谱翻译成机器人语言,这个够麻烦。

实验四   边走边唱

一、教学要求与目的

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

二、教学内容

(一)项目分析

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

1、写机器人唱歌的程序

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

(二)算法分析

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

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

(三)项目实施

1、写机器人唱歌程序

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

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

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

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

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

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

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

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

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

三、实验流程图或代码 以及观测记录

程序代码:

void main()

{   start_process(task_0());

    while(1)

   {   drive( 100 ,0);

        wait( 1.000000 );

        stop();

        motor( 1 , -20 );

        motor( 2 , 20 );

        wait( 0.500000 );

        stop();

    }   

}

void task_0()

{

  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);

  }

 }

四、实验总结思考

   这个实验其实是实验一(机器人走路)和实验三(机器人唱歌)组合而成的,主要用的还是走路的drive(x,y)、motor(n,x)两个函数和唱歌的音频函数tone(float h,float t),所以经过前面这两个实验的学习,要机器人边走边唱还是不难的,比想象中要容易,不过要机器人按照自己意愿走还是挺难的,它非常不听话,要不断的修改数值,这就是所谓的理论和实践总是存在各种意想不到的误差的。

实验五  机器人追光

一、教学要求与目的

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

二、教学内容

(一)项目分析

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

光敏传感器是能力风暴智能机器人所使用的传感器之一,它通过感测机器人外部环境光线的强弱来感知光源的位置,在机器人追光项目的完成过程中,将学会光敏传感器的运用以及结合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、知识点提示

if(条件表达式)

{  程序段A   }

else

{  程序段B }

程序段C

1、流程图

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

 

3、项目实施

通过执行这个程序,机器人就可以完成追光的任务了,但是一定要注意机器人转向的时间和速度以及机器人直行的时间和速度都要根据使用的机器人进行具体的设定和调试。

能力提高:能否让机器人朝黑暗的地方走?

三、实验流程图或代码 以及观测记录

    程序代码:

        朝亮处走:

void main()

{

  int photo_1=0,photo_2=0;

  while(1)

  {

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

    if(photo_1>photo_2)

    {

      drive(0,20);

      wait(0.1);

    }

    else

    {

      drive(0,-20);

      wait(0.1);

    }

    drive(20,0);

    wait(0.5);

    stop();

  }   

}

       朝暗处走:

void main()

{

  int photo_1=0,photo_2=0;

  while(1)

  {

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

    if(photo_1

    {

      drive(0,20);

      wait(0.1);

    }

    else

    {

      drive(0,-20);

      wait(0.1);

    }

    drive(20,0);

    wait(0.5);

    stop();

     }   

    }

四、实验总结思考

 能力风暴机器人的左前方和右前方分别装有一个光敏传感器。这个实验主要用到了光敏传感器函数,学会了这个函数就能使机器人按照光强弱来决定如何行走,下面是对光敏传感器函数的整理:

                  光敏传感器函数

 函数:photo(x)

 功能:取得光敏传感器接收到的光强信息。

    说明: 函数中的变量x为1时,取得的函数值为右光敏传感器的检测

          值,当x为2时,取得的函数值为左光敏传感器的检测值。函

          数的取值为0~255的整数。检测的值越小,光线越亮。检测的

          值越大,光线越暗。

  过程中发现在白天实验室的光还真难控制,所以这个只能归结与环境因素影响。

综合实验六  卫星

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

图 卫星

[实验目标]

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

    2.巩固对机器人传感器及执行器的认知。

[实验设备]

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

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

[实验内容]

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

一、 熟悉和了解SVJC软件的使用方法;(建议自学)

二、 方案设计

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

图10-1 卫星原理分析图

怎样才能得到临界值呢?

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

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

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

表5-3 数据记录表

确定临界值后,根据要求确定整体方案!(可参考图10-2)


图10-2 流程图

三、实验流程图或代码 以及观测记录

程序代码:

int photo_1=0;

int photo_2=0;

int bmp_1=0;

void main()

{

    while(1)

    {

        photo_1 =photo(1);

        photo_2 =photo(2);

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

      if(photo_1 - photo_2>0 && photo_1-photo_2<15 )

        {

            motor( 1 , 20 );

            motor( 2 , 5 );

        }

        else

        {

            if(photo_2 - photo_1>0 && photo_2-photo_1<15 )

            {

                motor( 1 , 5 );

                motor( 2 , 20 );

            }

            else

            {

                motor( 1 , 20 );

                motor( 2 , 20 );

            }  

        }

        wait( 0.050000 );

         bmp_1 = bumper();

    if(bmp_1 != 0)

        {

            motor( 1 , -40 );

              motor( 2 , -40 );

            wait( 0.300000 );

            drive( 0 , -40);

            wait( 0.400000 );

            stop();

        }

}

}

四、实验总结思考

      这个实验名字叫卫星,一做才知道原来是叫机器人绕着蜡烛转,而这个蜡烛是发光体,主要用到了机器人的光敏传感器。这里是用机器人的右光敏感测光源,也就是让机器人围绕蜡烛顺时针旋转。向前行走的过程中右光敏传感器不断的检测外界的光线值,并将返回值与临界值进行比较。如果,检测到的光线比设定的光线弱,就向靠近蜡烛的方向转,否则就前进。这样机器人就可以以固定的半径围绕蜡烛旋转。

     这个实验主要是要找出那个临界值,那个临界值是测试了好多次,然后取平均得出来,具体要编写一个不断检测右侧光敏传感器,并将传感器检测到的数值在LCD上显示的程序,运行,进入仿真界面,场地中“点”上蜡烛。经过多次的调试和记录,知道差不多为止,过程有点繁琐。最后有了这个值,根据实验五用过的光敏函数、条件判断控制和实验一用过的motor(n,x)函数编写程序,实现了机器人围绕蜡烛转,所谓的“卫星”。

相关推荐