丹城中学灭火机器人共享方案(七)_第1页
丹城中学灭火机器人共享方案(七)_第2页
丹城中学灭火机器人共享方案(七)_第3页
丹城中学灭火机器人共享方案(七)_第4页
丹城中学灭火机器人共享方案(七)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、丹城中学灭火机器人共享方案(七)作者: 浙江省象山县丹城中学机器人实验室 顾熙杰一)走进机器世界程序设计语言是人类和机器进行沟通的语言,程序设计语言有很多,例如:机器语言汇编语言 c语言图形化设计语言等等其中机器语言是机器人真正掌握的语言,但机器语言由一系列和这样的进制代码组成,人类很难理解,所以人类开发出一系列的高级语言高级语言必须经过编译程序翻译成为机器语言后,才能被机器人接受在这里我们继续讨论 c语言及基础的数学理论,让我们通过他走进机器人世界一)逻辑运算)逻辑运算的结果逻辑运算的结果只有个,要么是真,要么是假在c语言中真可以用表示,假可以用表示)逻辑运算符在c语言中,逻辑运算符号主要有

2、下面几个符号名称简单意思又叫&与并且逻辑乘法|或或者逻辑加法!非不是逻辑负号,逻辑取反)逻辑运算律.1)逻辑乘法运算基本逻辑乘法意义1&1=1真并且真结果是真1&0=0真并且假结果是假0&0=0假并且假结果是假0&1=0假并且真结果是假逻辑乘法交换律a&b=b&a逻辑乘法结合律a&b&c=a&(b&c)=(a&b)&c=b&(a&c)例如:a表示前面火焰很强,b表示下面是白色地面,)如果a是真的,b也是真的,那么a&b也是真的,那么就可以判断机器人到了灭火圈(蜡烛跟前)如果a是真的,b是假的,那么a&b是假的,那么就可以判断机器人没有到灭火圈(蜡烛跟前)3)如果a是假的,b是真的,那么a&b是

3、假的,那么就可以判断机器人没有到灭火圈(蜡烛跟前)4)如果a是假的,b也是假的,那么a&b是假的,那么就可以判断机器人没有到灭火圈(蜡烛跟前)例如:int miehuoquan()/灭火圈检测程序if (analog(4)bs)&(analog(3)30)/如果位于白色地面并且火焰很强 return(1);/发现灭火圈else/否则 ruturn(0);/没有发现灭火圈例如:如果甲村通往已村需要过a,b两座桥梁,那么a村能否到b村,就可用下面逻辑进行判断a表示红桥是好的,b表示蓝桥是好的.if (a&b)/如果座桥都好通途else/否则断路也就是说只要有座桥坏了,路就走不通.)逻辑加法运算逻辑

4、加法意义1|1=1真或者真结果是真1|0=1真或者假结果是真0|0=0假或者假结果是假0|1=1假或者真结果是真逻辑加法交换律a|b=b|a逻辑加法结合律a|b|c=a|(b|c)=(a|b)|c=b|(a|c)例如: 如果甲村通往已村可以走a,b两条路,那么a村能否到b村,就可用下面的逻辑进行判断a表示红路是通的,b表示蓝路是通的.if (a|b)/a路好或者b路好通途else/否则断路也就是说只有2路都坏了,路才走不通.)逻辑取反运算逻辑取反意义!1=0不是真就是假!0=1不是假就是真!(!a)=a否定之否定结果不变!a+a=1a或者真或者假必有一个成立(!a)&(a)=0a和!a不可能同

5、时为真.)复合逻辑运算逻辑乘法对加法的分配律意义a&(b|c)=(a&b)|(b&c)摩根定理!(a&b)=(!a)|(!b)!(a|b)=(!a)&(!b))关系运算现实世界的关系十分复杂,我们这里只讨论一些简单的关系关系意义小于大于=大于或等于=等于!=不等于)关系的传递性例:如果ab且bc,则ac,大于关系是传递的例:如果a=b且b=c,则a=c,等于关系是传递的例3:如果a是b的父亲且b是c的父亲,则a是c的父亲,这是错误的,父子关系是反传递的)关系的对称性例:如果a=b,则b=a,等于关系是对称的例:如果a是b的同学,则b是a的同学,同学关系是对称的例:如果a爱b,则b爱a,这不一定

6、正确,爱关系是非对称的例:如果a是b的父亲,则b是a的父亲,这是错误的,父子关系是反对称的)关系的自反性例:a=a,等于关系是自反的例:ab)&(ab)/自相矛盾,永远是假的 i+;例3:无效的表达式,语法正确但功能错误.if ( analog(3)100) /如果火焰弱快速前进 motor(0,80); motor(1,80);else if ( analog(3)50) / 如果火焰较强中速前进永远得不到运行 motor(0,60); motor(1,60);else if ( analog(3)20) /如果火焰很强慢速前进永远得不到运行 motor(0,40); motor(1,40)

7、;正确的写法:if ( analog(3)20) /如果火焰很强慢速前进 motor(0,80); motor(1,80);else if ( analog(3)50) / 如果火焰较强中速前进 motor(0,60); motor(1,60);else if ( analog(3)100) /如果火焰弱快速前进 motor(0,40); motor(1,40);例4:等价的语句如if (analog(4)bs)&(analog(3)30)/如果位于白色地面并且火焰很强和if (analog(3)30)&(analog(4)bs)/如果火焰很强并且位于白色地面根据逻辑乘法交换律,效果一样例:等

8、价的语句如if (analog(4)bs)&(analog(3)30)|(analog(5)30)和if (analog(4)bs)&(analog(3)30)|(analog(4)bs)&(analog(5)30)根据逻辑乘法对加法的分配律,效果一样)算术运算在中小学机器人程序设计中常用的有1)+加法运算2)-减法运算3)%取模运算,就是相除求余数例如: i+; if (i%2)=0)/如果是偶数次 /走左手法则 else if (i%2)=)/如果是奇数次 /走右手法则4)赋值运算例:i=80;例2:i=i+1;例3:i+;/和例的效果是一样的说明:在c语言中=不是等号,如果=是等号,上面

9、的例2例3是不可能成立的等号是=,=出现在逻辑表达式中如 while(a=b)是正确的,while(a=b)则是错误的如 if(a=b)是正确的,if(a=b)则是错误的)变量的声明例:常数的声明# DIFINE bs 80;/表示白线的灰度# DIFINE hs 160;/表示地面的灰度# DIFINE hy 230;/表示有没有火焰的分界值例2:短整数的声明(表示范围小)(有初值)int bs=80;/表示白线的灰度int hs=160;/表示地面的灰度int hy=230;/表示有没有火焰的分界值例:短整数的声明(表示范围小)(没有初值)int bs;/表示白线的灰度int hs;/表示

10、地面的灰度int hy;/表示有没有火焰的分界值例:长整数的声明(表示范围大)(没有初值)long in_door_time;/进门时间long out_door_time;/出门时间变量的名字最好用英语或拼音,这样容易记忆)函数的声明例:左手法则函数void migong_left()/在里面写代码前面的void 表示这个函数没有返回值,后面的()里面没有东西,表示他没有参数例2:不分房间的灭火函数void fire()/在里面写代码前面的void 表示这个函数没有返回值,后面的()里面没有东西,表示他没有参数例:分房间的灭火函数void fire(int f)/在里面写代码前面的void

11、表示这个函数没有返回值,后面的()里面有f,表示他有房间号参数例:灭火圈检测函数int miehuoquan()/灭火圈检测程序if (analog(4)bs)&(analog(3)30)/如果位于白色地面并且火焰很强 return(1);/发现灭火圈else/否则 ruturn(0);/没有发现灭火圈前面的int 表示这个函数的返回值是整数,后面的()里面没有东西,表示他没有参数函数和参数自己可以取名字,返回值的意义自己做好约定,在整个灭火程序中的使用要一致二)灭火程序设计的基本方法本文的论述基于下面的简单机器人简单配置的纳英特灭火机器人除了基本套件外,需要个火焰检测传感器,个红外避障传感器

12、,个灭火风扇,及把他们组装在机器人身体上的积木套件灭火风扇安装在机器人前部,17.5cm高度,假设接motor2接口个火焰检测传感器安装在机器人前部,17.5cm高度,假设接3号模拟口硬件的组装调试请问你的指导老师在这里我们先不讨论怎样走个房间,怎样走的快,怎样灭的稳,怎样回家,那么灭火程序的基本原理就是:)没有发现火时走迷宫)发现火后去灭火根据上面的基本原理,主要程序可以有下面一些形式例1)void main()/左手灭火程序while(1)/永远循环使用下面的代码检测所有传感器 migong_left();/如果没有发现火焰,走左手法则if (analog(3)50)/如果没有发现火焰,走

13、左手法则migong_left();else/如果发现了火焰 fire();/灭火 break;/退出左手法则例:void main()/左手灭火程序while(analog(3)50)/如果没有发现火焰,走左手法则migong_left(); fire();/灭火/发现了火焰/退出了上面的循环后 stop();灭火程序设计的基本方法)从顶往下的设计方法例如:我们设计了下面的主程序void main()/左手灭火程序while(analog(3)15)/如果没有发现火焰,走左手法则migong_left(); fire();/灭火/发现了火焰/退出了上面的循环后 stop();但由于migon

14、g_left()和fire()函数没有设计好,机器人还是不会灭火,我们可以增加个函数:void migong_left()motor(0,60);motor(1,60);void fire()motor(2,100);/如果发现风扇转反,修改为 motor(2,-100)sleep(5.0);就这样,你一生中第一个机器人灭火程序就产生了,只是他不会真的走迷宫,需要把蜡烛放在机器人前面米左右的地方,然后打开电源开关你只要把migong_left()函数修改为真正的左手法则,就这样,一个不是很稳定,很慢的机器人灭火程序就在你的手下产生了!)自下往上的设计方法例如:先编写程序让你的机器人能走迷宫vo

15、id main()/主程序while(1)migong_left();void migong_left()/左手法则代码假设左红外接11口,左前红外接12口,前红外接13口. if (digital(12)=1 | digital(13)=1) /前有墙右转motor(0, 30); motor(1, -90); else if (digital(11) = 1) /左有墙前进motor(0, 70); motor(1, 70);else /什么也没看到,左转motor(0, -60);motor(1, 60);motor(0, 80); motor(1, 80);motor(0, -40);motor(1, 40);但他只会走迷宫,不会灭火,我们把主程序修改为:void main()/主程序while(1)migong_left();if (analog(3)30)/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论