《第4章能力风暴编程ppt课件.ppt》由会员分享,可在线阅读,更多相关《第4章能力风暴编程ppt课件.ppt(13页珍藏版)》请在三一办公上搜索。
1、1,第4章 能力风暴编程,2,4.1 第一个VJC程序,Hello robot!,双击桌面上的VJC1.5开发版图标,进入了机器人编程界面。VJC1.5开发版支持流程图程序和交互式C语言(JC)程序。下面我们就用VJC1.5开发版的流程图为机器人编写第一个程序“Hello,robot!”。这个程序要求在能力风暴的液晶显示屏LCD上显示“Hello,robot!”我们要编写的程序如图4-1左图所示:,图4-1 Hello,robot!,点击工具栏中的“新建”按钮,新建一个程序;用鼠标将“执行器模块库”中的“显示”模块拖入到流程图生成区,放在主程序模块正中的下边沿的位置,看看“主程序”模块与“显示
2、”模块之间是不是有箭头连接,有则说明连接上了,否则再调整一下“显示”模块的位置。右键点击“显示”模块,就会出现如图4-1右图(部分)所示的对话框,请将显示信息由HI改写为Hello,robot!设定完毕,按确定就可以了!在“程序模块库”中选择结束模块,将它连在“显示”模块之后,这样整个程序就编写完成了,按工具栏中的“保存”按钮,将程序保存在VJC目录下!将机器人与计算机连接起来(用串口连接线,一端接计算机的九针串口,一端接机器人后面控制面板上的下载口)。将机器人的“开关”按钮打开,使机器人处于开机的状态。按VJC界面中的“下载”按钮,待看到“下载成功!”字样时,取下串口连接线,将机器人放在平稳
3、的地方,按机器人头顶上的“RUN”按钮,机器人的液晶显示屏上就会显示出Hello,robot!,void main()printf(Hello robot!n);,3,4.2 让机器人动起来,下面我们就尝试着让机器人动起来。(相关的知识介绍请参看VJC1.5开发版使用手册)在VJC1.5开发版执行器模块库中有一专门控制机器人“移动”的模块,这里我们就用它来编写一个机器人直线行走的程序。要求:先让机器人以速度100前进3秒,再让机器人以速度-60后退5秒,再在原地以功率80旋转1秒。(如图4-2所示),图4-2 机器人移动,4.2.1 在VJC1.5开发版窗口中编写流程图(示范操作步骤)a)编写
4、流程图:用鼠标将“执行器模块库”中的“移动”模块移到流程图生成区并与主程序模块连接上;设置时,右击“移动”流程图模块,在弹出框中输入移动速度为100、时间为3;b)再用鼠标将“执行器模块库”中的“移动”模块移到流程图生成区并连接在流程图的末端位置;设置第二个“移动”流程图模块,点击右键在弹出框中输入移动速度为-60、时间为5;c)再将“执行器模块库”中的“转向”模块连接到程序中,点击右键进入设置对话框,分别设置速率和时间为:80和1d)再将“程序模块库”中的“任务结束”移入到流程图生成区并连接在程序的末尾。,4,void main()drive(100,0);wait(3.000000);st
5、op();drive(-60,0);wait(5.000000);stop();drive(0,80);wait(1.000000);stop();,Void drive(int move,int turn),点击“工具栏”中的“编辑JC程序代码”按钮,切换到JC代码界面,可以对此界面中显示的JC代码进行修改,比如我们可以让机器人后退7秒,那么我们就可以把程序中与“移动”模块相对应的参数5.000000修改为7.000000。,5,4.2.2 保存源代码程序 点击工具栏中的“保存”按钮,输入文件名,按“确定”。4.2.3 程序下载 此时,能力风暴要处于开机状态,并且串口连接线已与计算机连接。点
6、击“工具”中的“下载当前程序”按钮,就会出现下载对话框,等待出现“下载成功!”字样,说明程序已经下载到能力风暴里了。4.2.4 运行程序 将串口连接线取下,将机器人带到安全的地方,按机器人身上的“运行”键,能力风暴智能机器人就按程序要求快速前进3秒,再后退7秒,然后再旋转1秒。,6,4.2.5 走出规则轨迹,下面我们让能力风暴在地上走出一个规则的轨迹。void round()drive(60,30);/顺时针转弯 wait(10.0);stop();能力风暴顺时针走约一米见方的正方形路。void rectangle()int i;for(i=0;i 4;i+)drive(100,0);wait
7、(1.0);drive(0,60);wait(0.2);stop();能力风暴逆时针走约一米见方的正方形路径。其中wait(0.2)是能力风暴转90弯所需要的时间。该值和转弯速度以及能力风暴的电机有关,需要实际调整,此外地面的摩擦力也有影响。利用wait()函数是控制电机工作的常用方法。,7,4.3 让机器人感知环境信息,在VJC1.5开发版的“传感器模块库”中,有让机器人能够感知环境信息的模块,这些功能模块的调用能够带给机器人感觉。比如说“光敏检测”能够让机器人感觉到外界光线的强弱;“红外测障”能够让机器人检测前/左/右方的障碍等等。下面我们就试着让机器人感知外界环境。让机器人对外界的光线进
8、行检测,并在LCD上显示左右光敏所检测到外界光线的平均值。示范操作步骤如下:,4.3.1 编写流程图 a)用鼠标将“控制模块库”中的“永远循环”模块移到流程图生成区并与主程序模块连接上。b)用鼠标将“传感器模块库”中的“光敏检测”模块移到“永远循环”模块内部并连接上;右击“光敏检测”流程图模块,在弹出框中方向一栏选择“平均”,按确定。c)再用鼠标将“执行器模块库”中的“显示”模块移到流程图生成区并连接在“光敏检测”的后面;d)设置“显示”模块,点击右键在弹出框中选择“应用变量”,就会出现一个“变量百宝箱”的界面,在此界面中点击“光敏”图标,在“光敏变量引用”中选择“光敏变量一”,按确定即可,这
9、样“显示”模块中的“显示信息”就为“光敏变量一”;f)再将“程序模块库”中的“任务结束”移入到流程图生成区并连接在程序的末尾。,图4-4 机器人感光VJC程序,也可以点击“工具栏”中的“编辑JC程序代码”按钮,切换到JC代码界面,对JC代码进行修改。,8,4.3.2 保存程序 点击工具栏中的“保存”按钮,文件名输入:感光,按“确定”。此时,“感光.flw”流程图程序文件已被保存。4.3.3 程序下载 此时,能力风暴要处于开机状态,并串口连接线已与计算机连接。点击“工具”中的“下载当前程序”按钮,就会出现下载对话框,等待出现“下载成功!”字样,说明程序已经下载到能力风暴里了。4.3.4 运行程序
10、 将串口连接线取下,将机器人带到安全的地方,按机器人身上的“运行”键,在机器人的LCD上就会显示出外界光线的平均值。,9,4.3 JC程序的基本程序结构,下面是JC程序中最常见的一种程序模式。,while(1)/*循环检测*/ir=ir_detector();/*对环境采样*/if(ir0)/*条件判断*/语句1;/*做相应的处理(模块A)*/语句2;else 语句3;/*做相应的处理(模块B)*/语句4;wait(0.1);/*采样周期*/,10,4.3.1 一个机器人“台球”程序,下面结合“台球”程序来学习碰撞传感器的使用。void main()int bill_trans=0;/*定义直
11、行变量*/int bill_rot=0;/*定义转弯变量*/int bmpr=0;/*定义碰撞变量*/while(1)/*无限循环检测*/bmpr=bumper();/*检测碰撞*/if(bmpr!=0)stop();wait(0.1);/*碰后停0.2秒确定两个开关均触发*/if(bmpr=0b0011)/*正前碰撞*/bill_trans=-40;/*后退*/bill_rot=0;else if(bmpr=0b1100)/*正后碰撞*/bill_trans=40;/*前进*/bill_rot=0;else if(bmpr&0b1010)/*右侧碰撞*/,bill_trans=0;bill_
12、rot=-40;/*左转*/drive(bill_trans,bill_rot);wait(0.25);/*左转0.25秒*/bill_trans=40;bill_rot=0;/*前进*/else if(bmpr/*驱动*/,在该函数中有一个检测传感器的常用结构“while(1)检测传感器;作出响应;”。在这个例子里,能力风暴响应来自外部四个方向上的碰撞,并相应地改变运动方向。看起来象打台球。,11,4.4.2 红外和光敏的使用,能力风暴的红外传感器可以说是它最有用的武器。通过红外传感器,能力风暴可以探测到前方和左右两侧1080厘米以内的障碍,就象它的一对“眼睛”。下面我们看一个有趣的程序,看
13、看如何使用能力风暴的“眼睛”。,12,void main()int ir=0;/*红外检测变量*/int bmp=0;/*碰撞检测变量*/int old_bmp=0;/*前一次的碰撞检测结果*/int fol_trans_def=80;/*预设的前进速度*/int fol_rot_def=40;/*预设的转弯速度*/printf(Follown);/*显示在LCD屏幕上*/while(1)ir=ir_detector();/*取红外系统检测结果*/bmp=bumper(),这个例子实现了跟随前方物体。能力风暴可以跟随前方移动的人或物;如果撞上前方的物体,就停一停;如果前方红外系统探测范围内没有物体,它就停下来。可以修改上面的程序,让能力风暴避开障碍物。给一个能力风暴下载避让程序,其他的能力风暴下载跟踪程序,在适当的条件下能看到,能力风暴一个跟着一个排成长龙,鱼贯前进。光敏的使用和红外系统类似,所不同的是光敏只能感知左右两侧的明暗,和距离没有直接关系。调用“photo(l);photo(2);”就能返回两侧光敏的测量值。,13,本章结束,