智能机器人实验报告电子稿

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

一、要求与目的

熟悉机器人用于走路的“脚”,要教你的机器人学会走路,同时你要掌握控制机器人走路的基本方法。

二、内容                                                      

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

要想让机器人移动,就要控制电机的转动。控制机器人“行走”的基本指令是motor(x,y)函数和drive(x,y)函数。

2、驱动电机的函数

通过JC程序控制电机转动,使机器人行走的指令有两个,它们是motor(x,y)函数和drive(x,y)函数,介绍:

一、motor(x,y)函数

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

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

答:机器人将直走。

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

答:左侧电机速度为零,则逆时针旋转;反之,则顺时针旋转。

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

(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)函数

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

推断:drive函数既可以直行,也可以转弯。

试一试下面程序能够干什么?  答:可以画圆。

Void main()

{drive(60,-20);

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

stop(); }               

答:调整后所画圆弧弧度变小。

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

一、要求与目的

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

二、内容

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

}

实验测试结果:188,机器人起跑

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

void  main()

{      int mic;

drive(20,0);

 while(mic<70)

         {

                mic=microphone();

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

 wait(0.5);

        }

drive(-20,0);

}

         实验测试数据:72, 机器人后退。

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

          }

}

     实验测试数据:72,机器人数据188

实验三 机器人唱歌

一、要求与目的

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

二、内容

(一)项目分析

机器人的主板上有一个喇叭,在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的高音

实验程序:

void main()

{

   printf("just for fun\n");

   while(1)

   { tone(393.0,0.25);

    tone(393.0,0.25);

    tone(441.0,0.5);

    tone(393.0,0.5);

    tone(524.0,0.5);

    tone(495.0,1.0);

    tone(393.0,0.25);

    tone(393.0,0.25);

    tone(441.0,0.5);

    tone(393.0,0.5);

    tone(588.0,0.5);

    tone(524.0,1.0);

    tone(393.0,0.25);

    tone(393.0,0.25);

    tone(786.0,0.5);

    tone(660.0,0.5);

    tone(524.0,0.5);

    tone(495.0,0.5);

    tone(441.0,1.0);

    tone(700.0,0.25);

    tone(700.0,0.25);

    tone(660.0,0.5);

    tone(524.0,0.5);

    tone(588.0,0.5);

    tone(524.0,1.0);

  }

}

实验四   边走边唱

一、要求与目的

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

二、内容

(一)项目分析

机器人的主板上有一个喇叭,在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("just for fun\n");

  while(1)

  { tone(393.0,0.25);  tone(393.0,0.25);

    tone(441.0,0.5);  tone(393.0,0.5);

    tone(524.0,0.5);  tone(495.0,1.0);

    tone(393.0,0.25); tone(393.0,0.25);

    tone(441.0,0.5);  tone(393.0,0.5);

    tone(588.0,0.5);  tone(524.0,1.0); tone(393.0,0.25);  tone(393.0,0.25);

    tone(786.0,0.5);  tone(660.0,0.5); tone(524.0,0.5);  tone(495.0,0.5);

    tone(441.0,1.0);  tone(700.0,0.25); tone(700.0,0.25);  tone(660.0,0.5);

    tone(524.0,0.5); tone(588.0,0.5); tone(524.0,1.0);

  }}

实验五  机器人追光

一、要求与目的

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

二、内容

(一)项目分析

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

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

}}

(二)算法分析

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

1、流程图

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

2、知识点提示

if(条件表达式)

{  程序段A   }

else

{  程序段B }

程序段C

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

    {

      drive(0,20);

      wait(0.1);

    }

    else

    {

      drive(0,-20);

      wait(0.1);

    }

    drive(20,0);

    wait(0.5);

    stop();

  }   

}

综合实验六 卫星

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

[实验目标]

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

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

[实验设备]

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

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

[实验内容]

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

实验实现程序:

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

        }

    } }

相关推荐