机器人高级编程控制概要.docx
《机器人高级编程控制概要.docx》由会员分享,可在线阅读,更多相关《机器人高级编程控制概要.docx(13页珍藏版)》请在冰豆网上搜索。
机器人高级编程控制概要
第3章机器人高级编程控制
通过前面的学习,同学们对能力风暴机器人的结构和传感器已经有了比较全面的了解,并且能够利用VJC系统编写可视化的流程图程序来控制机器人的动作,这对进一步学习和研究机器人是非常重要的。
能力风暴机器人的编程方式有两种,即流程图方式和JC代码方式。
流程图方式虽然简单直观,但功能有限,如果要编写更复杂的程序,特别是进行机器人创意设计时,就需要使用JC代码方式来编写程序了。
使用JC代码方式编程,将有利于我们进一步掌握计算机解决问题的思路和方法,更深层次地理解机器人智能化的工作原理,为进一步研究和制作机器人奠定基础。
本章我们将通过VJC系统开发版软件,介绍如何在JC编程环境下直接使用JC代码编写程序。
同时还将结合国内外机器人大赛中的一些比赛项目,如:
机器人灭火、机器人踢足球、机器人创意制作等,引导同学们综合实践机器人项目编程控制的方法与全过程。
3.1JC语言编程方法简介
在前面的学习中,我们为机器人编写控制程序都是采用VJC系统中的流程图形式,相信同学们已经感受到这种编程方法确实直观易学。
然而,如果我们要编写更自由、更复杂的机器人程序一般就要采用第二种编程方法---JC语言编程。
本节我们就来了解JC语言编程的基本方法。
由于VJC系统仿真版不支持JC代码编程,所以,本节编程必须在VJC系统开发版中进行,并下载到真实机器人上调试。
1.进入JC编程界面
用JC语言编程时,首先要在计算机中安装VJC系统开发版软件。
启动软件时,双击桌面上的VJC图标,在VJC对话框中选择“JC代码程序”,再单击“确定”按钮,就可进入JC编程界面,界面组成如图3-1-2。
图3-1-2JC语言编程界面
注意:
流程图编程方式与JC代码编程方式可通过VJC工具栏上的编程方式切换按钮进行切换,这种方式有利于初学者从流程图编程方式起步,然后逐步过渡到用JC语言方式进行编程。
2.编辑JC语言程序
在JC代码编辑窗口内逐行用JC语句编写程序,每一句的后面均可加入注释(注释内容放在“/**/”之间),便于阅读和修改。
例如:
下面就是一个用JC语言编写的控制机器人走正方形的程序。
图3-1-3机器人走正方形的JC程序
分析上面的JC程序可以看出,编写JC程序有如下基本规定:
(1)一个JC程序至少有一个主函数,主函数说明语句一般是:
voidmain()
其中:
void为函数返回值类型,void类型表示该函数不返回值,其它返回值类型还有:
int(整型)、float(浮点型)。
main为函数名,主函数一般均命名为main,自定义函数可命名为其它名称。
每个函数名后面必须有一对圆括号“()”,圆括号内可以定义函数的参数。
(2)每个函数说明语句的下面都会有一对花括号“{}”,用于标出函数定义的开始位置和结束位置。
(3)在函数定义范围内是一系列用于控制动作、循环、判断等的JC语句或库函数(JC的库函数请参看本书附录),每个JC语句后面必须以分号“;”结束。
(4)如果在循环体或分支体内是一组语句,那么这组语句必须包含在花括号“{}”内。
3.下载调试
编辑好的JC程序可通过“下载”按钮下载到机器人中进行调试。
下载前首先按照1.2节阅读材料所述连接方法,将真实机器人与计算机通过下载线正确地连接起来,然后打开机器人的电源开关,再单击JC工具栏的“下载”按钮,就可将程序下载到机器人中。
如果程序编写无误,下载时系统会自动编译程序,并在编译窗口内显示“编译成功”,同时弹出下载提示信息,如图3-1-4。
如果程序编写有误,下载时在编译窗口内会显示相应的提示信息。
图3-1-4下载提示信息
下载完毕后,拔掉下载线,将机器人放入调试的场地中,按下机器人上的“运行”按钮,就可以运行或调试程序了。
用JC语句编程时,除了要熟记前面我们介绍的各模块对应的JC语句或函数外,还应了解一些JC编程的相关知识。
1.常量
常量是程序运行过程中其值不能改变的量。
JC中常量分为整型常量、长整型常量和浮点型常量。
(1)整型常量
常见的整型常量有以下几种形式:
十进制形式的整型常量:
如:
0、1、255、-1等;
二进制形式的整型常量:
通常用“0b”作为前缀,如:
0b1001001;
十六进制形式的整型常量:
通常用“0x”作为前缀,如:
0x1abf;
字符串型常量:
字符串型常量是用双引号引起的一个或若干个字符,如“a”、“abcd”;
整型常量的取值范围从-32768到+32767(十进制数)。
(2)长整型常量
在十进制整数后加上后缀“L”就变成了长整型常量,其取值范围从-2147483648到+2147483647(十进制数)。
(3)浮点型常量
浮点型常量是用小数形式或科学计数法表示的一类数,如:
1.24、2.543E+8,后者表示2.543×108。
浮点型常量的取值范围从10-38到1038。
在能力风暴机器人中因无浮点运算硬件,浮点运算要比整型运算慢,所以尽量不要采用浮点运算。
2.变量
变量是程序中用于存放数据的量,它在程序运行过程中可以发生改变。
(1)变量的命名
变量的命名一般由字母、数字、下划线字符组成(首字符必须为字母),如:
a、gi_1,但JC语言规定的专用词不能用作变量名,如:
if、wait、drive等,此外,变量名和函数名也不能相同。
(2)变量的类型
在JC程序中,变量的类型可分为整型(int)、长整型(long)、浮点型(float)和字符型(char)。
(3)变量的定义
在JC程序中,要求变量必须先定义,后使用,通常变量定义语句放在函数外或函数内块的起始处。
变量定义语句的格式有两种:
<类型><变量名>;
<类型><变量名>=<初始值>;
如:
intgi_1=0;
floattime;
(4)局部变量
局部变量指在函数内部定义的变量(或函数的参数),它的作用范围是局部的,即该变量只在该函数定义范围内有效。
(5)全局变量
全局变量指在函数的外面定义的变量,如图3-1-3程序中的a变量。
全局变量在该程序的所有函数范围内均有效。
当局部变量与全局变量同名时,在该函数内系统会自动屏蔽全局变量。
为了避免产生混乱,一般多用局部变量,尽量少定义全局变量。
3.运算符号及运算顺序
算术运算符:
加法+,减法-,乘法*,除法/
关系运算符:
大于>,小于<,等于==,大于等于>=,小于等于<=,不等于!
=
位运算符:
按位或|,按位与&,按位异或^,按位取反~
逻辑运算符:
或运算||,与运算&&,非运算!
对于多种运算混合的表达式,一般运算顺序是:
非运算→算术运算→关系运算→与运算和或运算。
对于算术运算的顺序可概括为一句话:
先括号、后函数、再乘除、最后加减。
4.屏幕显示函数及格式化字符参数
在前面的学习中,我们已经了解到屏幕显示函数主要用于输出数据,语法格式如下:
printf(格式化字符串,[参数1],……[参数N]);
如:
printf(“max=%d\n”,max)表示显示字符串“max=”及其变量max的值,其中%d表示以十进制数的形式显示,“\n”表示显示后光标自动换到下一行。
我们将%d称作格式化字符,其它的格式化字符见下表:
格式化字符
数据类型
说明
%d
Int
十进制整数
%X
Int
十六进制整数
%b
Int
二进制数
%C
Int
ASCII字符
%f
Float
浮点数
%S
Char
字符串
【实践名称】JC环境下的编程与调试。
【实践目的】初步掌握用JC语言编写机器人控制程序的方法。
【实践项目】试编写一段机器人在场地内听令出发并自动走出迷宫的JC程序。
【实践步骤】
1.项目分析:
这个程序编写思路我们在前面已分步讨论过,即:
机器人听令出发后,采用左行规则划弧前进,不断检测左方和前方是否有障(墙),遇到碰撞时,先后退一点,然后右转再继续前进,直至到达迷宫出口。
因为用JC编程,除了要启动VJC开发版软件进入JC编程环境外,还会用到许多JC函数、存放检测值的变量以及循环结构和判断结构等,例如:
声音检测函数:
microphone(),碰撞检测函数:
bumper()
红外检测函数:
ir_detector(),单轮驱动函数:
motor(1,100),双轮驱动函数:
drive(-60,0)
2.编程与调试:
(1)启动VJC开发版,进入JC编程界面;
(2)
在代码编辑窗口内逐行输入下列程序:
(3)将机器人通过下载线与计算机连接起来,打开机器人电源开关,单击VJC工具栏中的“下载”按钮,将程序下载到真实的机器人中;
(4)下载完毕时,拔掉下载线,将机器人放在真实的迷宫场地,按下“运行”开关,并拍手发声,检验机器人能否走出迷宫。
注意:
如果用真实的机器人实践本程序,首先应调整红外检测的距离,调整方法可参看相关的说明书。
通过实际运行,再微调一下其它参数,如转弯的时间、速度等。
如果无真实的机器人,则下载调试这一步省略不做,只要理解并能在JC环境下编出程序即可。
(1)你能编写一段机器人自动寻光的JC程序吗?
(2)你能编写机器人绕标比赛的JC程序吗?
试试看,如有困难,先打开前面编写过的机器人绕标比赛流程图程序,分析其对应的JC代码,然后再独立用JC语言进行编辑。
学习小结
本节主要学习了能力风暴机器人的JC语言编程的基本方法。
介绍了JC环境的进入、界面组成以及如何编辑JC程序、如何下载JC程序等。
另外还介绍了与JC编程相关的基础知识,如:
常量、变量、运算符、表达式、运算顺序、显示命令等。
最后通过一个小实践项目,体验了JC编程控制机器人的全过程。
【反思评价】回顾本节学习内容,评价本节学习情况。
(1)我在本节学会了:
______________________________________________________
________________________________________________________________________
(2)对于JC程序的基本格式及相关的基础知识:
我已理解并能运用□初步理解□还需进一步学习□
(3)对照流程图程序:
我可以写出对应的JC代码程序□
我可以读懂对应的JC代码程序□
我还需要别人的帮助或提示才能读懂□
(4)用JC编程并控制机器人运行:
我已熟练掌握□初步掌握□还需进一步实践和研究□
阅读材料
“更深的蓝”战胜了什么?
北京时间1997年5月12日凌晨4时50分,当“深蓝”将棋盘上的兵走到C4位置时,卡斯帕罗夫推秤认负。
至此轰动全球的第二次人机大战结束,“深蓝”以3.5:
2.5微弱的优势取得了胜利。
那么“更深的蓝”是何许人也?
卡斯帕罗夫又是何许人也?
“更深的蓝”是美国IBM公司生产的一台超级国际象棋电脑,重1270公斤,有32个大脑(微处理器),每秒钟可以计算2亿步。
“更深的蓝”输入了一百多年来优秀棋手的对局两百多万局。
卡斯帕罗夫是人类有史以来最伟大的棋手,在国际象棋棋坛上他独步天下,无人能出其右。
可是,在临近世纪末的1997年,孤独求败的卡斯帕罗夫不得不承认自己输了,而战胜他的是一台没有生命力、没有感情的电脑。
也许这是一件偶然的事件,可是,这件事使人类看到了一个自己不愿看到的结果:
人类的工具终于有一天会战胜自己。
“深蓝”和卡斯帕罗夫曾于1996年交过手,结果卡斯帕罗夫以4:
2战胜了“深蓝”。
经过一年多的改进,“深蓝”有了更深的功力,因此又被称为“更深的蓝”。
“更深的蓝”与一年前的“深蓝”相比具有了非常强的进攻性,在和平的局面下也善于捕捉杀机。
卡斯帕罗夫与“更深的蓝”的较量,引来了全世界无数棋迷和非棋迷的关注。
人们对此次人机大战倾注了巨大的热情,各种新闻媒体都竞相报道和评论此次人机大战,显然不只是出于对国际象棋的热爱,事实上,许多关心比赛的记者和读者都是棋盲,是因为这场比赛所蕴涵的机器与人类智慧的较量的特殊意义吸引了他们。
卡斯帕罗夫输掉这场人机大战在社会上引起了轩然大波,引出了两种不同的观点:
一部分人对此深感悲观,甚至惊恐不安,就像一些人对克隆技术感到可怕一样。
另外一些人则只是对这一结果感到不愉快,但他们认为这未必不是好事。
首先,比赛的结果不足以说明电脑就战胜了人脑,因为电脑的背后是包括美籍华裔谭崇仁、许峰雄等一大批计算机专家。
这些专家经过多年的努力,培养出来一个世界超级电脑棋手。
电脑的进步表明人类对人脑的思维方式有了更深入的了解。
从科学意义上讲,人机大战只是一项科学实验。
其次,虽然电脑在棋盘上战胜了人类,但这并不会封杀国际象棋艺术,相反许多棋坛人士从人机大战中看到了国际象棋的新机遇。
他们认为,如果在
今后的国际象棋比赛中,棋手们可以使用计算机,通过高科技手段检验我们认为天才而又过分大胆的棋着。
不错,我们已经发明了比我们跑得快的、举得重的、看得远的机器,如汽车、起重机、望远镜等,它们只能成为人类的一种工具,并没有影响到人的本质。
人类发明的机器或许可以分为两类:
“体能机器”和“智能机器”。
体能机器如汽车、飞机等,已经得到了公众的赞许,但智能机器却得到完全不同的反应。
向来都自以为智商最高的人类,却在智力游戏中输掉了,于是有人惊呼,今天我们输掉了最伟大的棋手,明天我们还将输掉什么!
材料来源:
中国科普博览网