第4章-能力风暴编程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

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

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功