陕西国防工业职业技术学院.docx
《陕西国防工业职业技术学院.docx》由会员分享,可在线阅读,更多相关《陕西国防工业职业技术学院.docx(32页珍藏版)》请在冰豆网上搜索。
![陕西国防工业职业技术学院.docx](https://file1.bdocx.com/fileroot1/2023-2/4/5aa1b3b4-6bc0-4b90-b091-9625738d7226/5aa1b3b4-6bc0-4b90-b091-9625738d72261.gif)
陕西国防工业职业技术学院
陕西国防工业职业技术学院
二O一四届毕业设计(论文)任务书
专业:
机电一体化班级:
机电311姓名:
学号:
设计题目:
仿人擂台机器人的设计与开发
设计条件:
要求在创意之星标准版硬件基础上设计仿人机器人结构,能够完成爬坡、举柱子、将棋子推下擂台等动作,并在擂台上巡游,保证机器人不掉下擂台。
设计任务:
1.仿人擂台机器人硬件结构设计;
2.机器人传感检测系统的设计与开发,保证机器人通过传感器检测擂台边沿,当接近边沿时后退或转弯。
3.编制程序使机器人完成爬坡、举圆柱、推棋子、对抗及在擂台上巡游的动作。
4.机器人具有“软开关”。
毕业设计(论文)内容包括:
1)课题的来源和意义,系统设计方案的确定及说明。
2)系统硬件结构及功能说明。
3)系统软件编程及功能实现。
起止日期:
2013年月日-2013年月日(共周)
指导教师:
摘要
近年来,随着社会飞速发展,机器人的研究及应用得到迅速发展,因其在教育,医疗,军事,工业等领域的巨大应用,因此得到许多国内外科学家的关注。
机器人是先进制造技术和自动化装备的典型代表,是人造机器的“终极”形式。
它涉及到机械、电子、自动控制、计算机、人工智能、传感器、通讯与网络等多个学科和领域,是多种高新技术发展成果的综合集成,、因此它的发展与众多学科发展密切相关。
机器人分军用机器人和民用机器人两大类。
民用机器人分为工业机器人、农业机器人、服务机器人、仿人机器人四大类。
机器人学技术是集机械工程学、计算机科学、控制工程、电子技术、传感器技术、
人工智能、仿生学等学科为一体的多学科和技术交叉、结合的综合高技术领域。
每一台机器人都是一个知识密集和技术密集的高科技机电一体化产品。
机器人在以后社会快速发展的过程中会起着越来越重要的作用。
相信在不久的将来机器人将会取代繁重的人力劳动,使劳动者的人身安全得到保障。
同时机器人的发展也将为以后的社会发展奠定良好的基础。
关键词:
机器人程序设计
第一章概述
阿西莫夫提出的“机器人三定律”:
第一,机器人不得伤害人,也不得在人造受伤害时袖手旁观;第二,机器人必须服从人的命令,除非该命令与第一定律相抵触;第三,机器人必须保护自己,除非保护行为与上述两定律相抵触。
这三条定律明确规定了人与机器人的主从关系和相互制约关系,几十年来已成为公认的研制和使用机器人必须遵循的基本准则。
[1]而,机器人通常可以分为三代:
第一代,可编程机器人,从上个世纪60年代后半期开始投入使用,这也是当代工业机器人中主要的类型,这类机器人一般可以根据操作员所编写的程序,完成一些重复性操作。
第二代,自适应机器人,或感知机器人,具有不同程度的感知能力,这归功于近些年来各种传感器的广泛应用。
第三代,智能机器人,具有感知,识别,推理,规划和学习等诸智能机制,主要处于试验阶段。
[2]由于人类的需求,随着科技的发展,依靠信息的交流,现代科技界对机器人发展提出了展望,主要沿着三个方向发展:
一是让机器人具有更强的智能和功能;二是让机器人更具人形,也就是更像人;三是微型化,让机器人可以做更多细致的工作。
[3]这些都可以让机器人更有能力并更好的为人类服务。
而,我认为这些都需要人类在信息技术方面有更好的提高。
第二章仿人擂台机器人设计
2.1.1仿人擂台机器人的工作及逻辑设计
图2-1“软开关”流程图2-2爬坡流程
2.1.2举柱子流程图
图2-3
2.2.3仿人擂台机器人逻辑
图2-4
//左检测侧传感器(检测物体)//检测柱子-右1
z=MFGetDigiInput(0);s1=MFGetDigiInput(4);
//右侧传感器(检测物体)//检测柱子—右2
y=MFGetDigiInput
(1);s2=MFGetDigiInput(5);
//测距传感器//检测柱子-右3
c=MFGetAD(0);s3=MFGetDigiInput(6);
//左侧传感器(检测擂台边沿)
t=MFGetDigiInput
(2);
//右侧传感器(检测擂台边沿)
t1=MFGetDigiInput(3);
第三章仿人擂台行机器人设计与制作
3.1仿人擂台机器人传感器“眼睛”要求及原理
3.1.1光电传感器
电传感器是采用光电元件作为检测元件的传感器。
它首先把被测量的变化转换成光信号的变化,然后借助光电元件进一步将光信号转换成电信号。
光电传感器一般由光源、光学通路和光电元件三部分组成。
光电传感器是通过把光强度的变化转换成电信号的变化来实现控制的。
光电传感器在一般情况下,有三部分构成,它们分为:
发送器、接收器和检测电路。
发送器对准目标发射光束,发射的光束一般来源于半导体光源,发光二极管(LED)、激光二极管及红外发射二极管。
光束不间断地发射,或者改变脉冲宽度。
接收器有光电二极管、光电三极管、光电池组成。
在接收器的前面,装有光学元件如透镜和光圈等。
在其后面是检测电路,它能滤出有效信号和应用该信号。
此外,光电开关的结构元件中还有发射板和光导纤维。
三角反射板是结构牢固的发射装置。
它由很小的三角锥体反射材料组成,能够使光束准确地从反射板中返回,具有实用意义。
它可以在与光轴0到25的范围改变发射角,使光束几乎是从一根发射线,经过反射后,还是从这根反射线返回。
3.1.2测距传感器
超声波对液体、固体的穿透本领很大,尤其是在阳光不透明的固体中,它可穿透几十米的深度。
超声波碰到杂质或分界面会产生显著反射形成反射成回波,碰到活动物体能产生多普勒效应。
因此超声波检测广泛应用在工业、国防、生物医学等方面以超声波作为检测手段,必须产生超声波和接收超声波。
完成这种功能的装置就是超声波传感器,习惯上称为超声换能器,或者超声探头。
红外线测距传感器工作原理:
红外测距传感器利用红外信号遇到障碍物距离的不同反射的强度也不同的原理,进行障碍物远近的检测。
红外测距传感器具有一对红外信号发射与接收二极管,发射管发射特定频率的红外信号,接收管接收这种频率的红外信号,当红外的检测方向遇到障碍物时,红外信号反射回来被接收管接收,经过处理之后,通过数字传感器接口返回到机器人主机,机器人即可利用红外的返回信号来识别周围环境的变化。
3.1.3灰度传感器
灰度传感器是模拟传感器,灰度传感器利用光敏电阻对不同颜色的检测面对光的反射程序不同,其阻值变化在的原理进行颜色深浅检测。
灰度传感器有一只发光二极管和一只光敏电阻,安装在同一面上。
在有效的检测距离内,发光二极管发出白光,照射在检测面上,检测面反射部分光线,光敏电阻检测此光线的强度并将其转换为机器人可以识别的信号。
图3-1
3.1.4碰撞传感器
利用压阻效应或压电效应原理工作,当机器人小车碰撞前方物体时电路开关1和2端口闭合,电路接通VCC产生电平信号传送给MultiFLEX2控制器芯片。
传感器电路(包括驱动板部分电路)产生数据信息提交给嵌入式ARM板进行处理。
嵌入式程序根据所提交的数据编写日志文件以及通信文件,并发出停车指令,底层驱动板则驱动电机停转.
图3-2
3.3仿人擂台机器人的组成
(1)控制部分采用MultiFLEX™2-AVR控制器,如下图:
图3-3
(2)检测部分采用7个红外传感器如图3-4一个测距传感器如图3-5
图3-4图3-5
(3)执行部分采用了9个舵机如图3-6和四个大功率电机如图3-7
图3-6图3-7
(4)机械部分采用创意之星模块化机器人套件如图3-8
图3-8
(5)动力采用充电电池提供动力
3.4仿人擂台机器人的制作结果
3.4.1示例图片如图3-9、3-10
图3-9
图3-10
第4章仿人擂台机器人软件设计
4.1机器人的程序编写软件介绍
−NorthStar(路径为:
教程、使用说明书\CDS5500)
−RobotServoTerminal(教程、使用说明书\CDS5500)
−AVRStudio4.13(控制器资料汇总\AVR单片机开发环境\AVRStudio4.13
−高级开发阶段eclipse(开发环境\Eclipse安装包\eclipse-cpp-galileo-SR2-win32\eclipse-cpp-galileo-SR2-win32).Java(4、开发环境\Eclipse安装包\JavaStandardEdition\Java)WinAVR-20100110-install等。
*安装完三个软件之后eclipse已经安装好,可以直接找到位置可以打开,为以后调用打开方便最好在桌面上设置一个快捷方式
−调试器驱动程序(部件资料汇总\多功能调试器\driverfordebugger\调试器驱动程序)*第一次连接多功能调试器会有提示连接,手动连接寻找到该驱动器所在位置。
−波特率为1M,不需要更改。
此时需要通过多功能调试器连接舵机,并且多功能调试器需外接电源(为了给舵机供电)。
对舵机调试时先找准COM口号(右击我的电脑-资源管理器-端口),将多功能调试器应该打在SERVO模式上,然后单击RobotServoTerminal左边的OPEN;此时多功能调试器指示灯为红色,当指示灯从长亮变为闪烁时即可点击SEARCH,是调试多个舵机需要注意不能选择SingleNode、SingleBand(RobotServoTerminal机器人舵机调试系统)即去掉选项前的对号,搜索到ID号后点击Stop。
单击你需要调试或修改的舵机,通过PrimarySet部分设置ID号,通过ServoOpration部分进行舵机(ServoMode)、电机(MotorMode)模式的调试,可以观察到舵机的运转过程。
一般情况下只需要更改ID号就可以了,一定要记住ID号。
−*调试舵机时注意不要发生过载情况,不仅要注意舵机也要注意RobotServoTerminal中ErrorInstruction部分指示灯的提示,千万切记电机接有零件时不要被卡住,一旦出现情况可立即拔掉电源。
−通过多功能调试器给MultiFLEX™2‐AVR控制器的ATmega128下载程序时需将调试器设为AVRISP模式,打开MultiFLEX™2‐AVR控制器的电源开关,拨至Debug方式,多功能调试器可以不需要外接电源;通过NorthStar进行在线调试时,在NorthStar界面下编辑区域双击舵机图标出现舵机操作对话框,可在此对每个舵机的参数进行设置也可在线调试。
“启动服务”时的调试器打至AVRISP模式,此过程中多功能调试器的指示灯长亮,控制器的指示灯也会闪烁。
指示灯结束指示后将调试器打至RS232模式,选对COM号,点击“打开”,(波特率保持在57600上面无需更改),勾选“调试”,拖动滑动条可以对舵机调试,可观察到舵机运转。
此过程中需注意是舵机(Servo)还是电机(Motor)模式,以免出现误操作对舵机产生破坏。
舵机两种模式的切换在菜单栏设置-工程设置里面。
−使用NorthStar进行编程后,若是使用AVR控制器,编译、下载成功后机器人即可自动执行程序,切断电源后程序亦可得到保存,待下次打开电源后机器人亦可继续执行程序,下载过程中调试器应在AVRISP模式。
使用AVR控制器时,NorthStar工具栏“运行”这个按钮是灰显的。
−下载完成的提示栏显示:
FLASHverifidesuccessfully\Programmingmodeleft\ConnectiontoSTK500V2closed
4.2仿人擂台机器人机器人主程序编写
#include"Apps/SystemTask.h"
#include"func\Func_1.h"
uint8SERVO_MAPPING[11]={1,2,3,4,5,6,7,8,9,10,11};
intmain()
{
boolt1=0;
booly=0;
bools1=0;
boolz=0;
bools2=0;
bools3=0;
intc=0;
boolt=0;
MFInit();
MFInitServoMapping(&SERVO_MAPPING[0],11);
MFSetPortDirect(0x00000F80);
MFSetServoMode(1,0);
MFSetServoMode(2,0);
MFSetServoMode(3,0);
MFSetServoMode(4,0);
MFSetServoMode(5,0);
MFSetServoMode(6,0);
MFSetServoMode(7,0);
MFSetServoMode(8,0);
MFSetServoMode(9,1);
MFSetServoMode(10,1);
MFSetServoMode(11,0);
Func_1();
while
(1)
{
//左检测侧传感器(检测物体)
z=MFGetDigiInput(0);
//右侧传感器(检测物体)
y=MFGetDigiInput
(1);
//测距传感器
c=MFGetAD(0);
//左侧传感器(检测擂台边沿)
t=MFGetDigiInput
(2);
//右侧传感器(检测擂台边沿)
t1=MFGetDigiInput(3);
//检测柱子-右1
s1=MFGetDigiInput(4);
//检测柱子—右2
s2=MFGetDigiInput(5);
//检测柱子-右3
s3=MFGetDigiInput(6);
if(t==1)
{
MFSetServoPos(1,512,0);
MFSetServoPos(2,512,0);
MFSetServoPos(3,512,512);
MFSetServoPos(4,512,512);
MFSetServoPos(5,512,512);
MFSetServoPos(6,512,512);
MFSetServoPos(7,512,512);
MFSetServoPos(8,512,512);
MFSetServoRotaSpd(9,0);
MFSetServoRotaSpd(10,0);
MFSetServoPos(11,509,512);
MFServoAction();
DelayMS(2000);
MFSetServoPos(1,512,-250);
MFSetServoPos(2,512,250);
MFSetServoPos(3,512,512);
MFSetServoPos(4,512,512);
MFSetServoPos(5,512,512);
MFSetServoPos(6,512,512);
MFSetServoPos(7,512,512);
MFSetServoPos(8,512,512);
MFSetServoRotaSpd(9,-250);
MFSetServoRotaSpd(10,250);
MFSetServoPos(11,485,512);
MFServoAction();
DelayMS(2000);
MFSetServoPos(1,512,500);
MFSetServoPos(2,512,500);
MFSetServoPos(3,512,512);
MFSetServoPos(4,512,512);
MFSetServoPos(5,512,512);
MFSetServoPos(6,512,512);
MFSetServoPos(7,512,512);
MFSetServoPos(8,512,512);
MFSetServoRotaSpd(9,500);
MFSetServoRotaSpd(10,500);
MFSetServoPos(11,485,512);
MFServoAction();
DelayMS(2000);
}
else
{
if(t1==1)
{
MFSetServoPos(1,512,0);
MFSetServoPos(2,512,0);
MFSetServoPos(3,512,512);
MFSetServoPos(4,512,512);
MFSetServoPos(5,512,512);
MFSetServoPos(6,512,512);
MFSetServoPos(7,512,512);
MFSetServoPos(8,512,512);
MFSetServoRotaSpd(9,0);
MFSetServoRotaSpd(10,0);
MFSetServoPos(11,485,512);
MFServoAction();
DelayMS(1000);
MFSetServoPos(1,512,-250);
MFSetServoPos(2,512,250);
MFSetServoPos(3,512,512);
MFSetServoPos(4,512,512);
MFSetServoPos(5,512,512);
MFSetServoPos(6,512,512);
MFSetServoPos(7,512,512);
MFSetServoPos(8,512,512);
MFSetServoRotaSpd(9,-250);
MFSetServoRotaSpd(10,250);
MFSetServoPos(11,485,512);
MFServoAction();
DelayMS(2000);
MFSetServoPos(1,512,500);
MFSetServoPos(2,512,500);
MFSetServoPos(3,512,512);
MFSetServoPos(4,512,512);
MFSetServoPos(5,512,512);
MFSetServoPos(6,512,512);
MFSetServoPos(7,512,512);
MFSetServoPos(8,512,512);
MFSetServoRotaSpd(9,500);
MFSetServoRotaSpd(10,500);
MFSetServoPos(11,485,512);
MFServoAction();
DelayMS(2000);
}
else
{
if((s1==0)&&(s2==0))
{
MFSetServoPos(1,512,512);
MFSetServoPos(2,512,512);
MFSetServoPos(3,512,512);
MFSetServoPos(4,512,512);
MFSetServoPos(5,512,512);
MFSetServoPos(6,512,512);
MFSetServoPos(7,512,512);
MFSetServoPos(8,512,512);
MFSetServoRotaSpd(9,0);
MFSetServoRotaSpd(10,-300);
MFSetServoPos(11,485,512);
MFServoAction();
DelayMS(1000);
}
else
{
if((s3==0)&&(s2==0))
{
MFSetServoPos(1,512,512);
MFSetServoPos(2,512,512);
MFSetServoPos(3,512,512);
MFSetServoPos(4,512,512);
MFSetServoPos(5,512,512);
MFSetServoPos(6,512,512);
MFSetServoPos(7,512,512);
MFSetServoPos(8,512,512);
MFSetServoRotaSpd(9,300);
MFSetServoRotaSpd(10,0);
MFSetServoPos(11,485,512);
MFServoAction();
DelayMS(1000);
}
else
{
if(s2==0)
{
//复位
MFSetServoPos(1,512,300);
MFSetServoPos(2,512,300);
MFSetServoPos(3,512,300);
MFSetServoPos(4,512,300);
MFSetServoPos(5,512,300);
MFSetServoPos(6,512,300);
MFSetServoPos(7,480,512);
MFSetServoPos(8,480,512);
MFSetServoRotaSpd(9,0);
MFSetServoRotaSpd(10,0);
MFSetServoPos(11,485,512);
MFServoAction();
DelayMS(3000);
//手臂初抬
MFSetServoPos(1,830,300);
MFSetServoPos(2,512,300);
MFSetServoPos(3,512,300);
MFSetServoPos(4,200,300);
MFSetServoPos(5,512,300);
MFSetServoPos(6,512,300);
MFSetServoPos(7,512,512);
MFSetServoPos(8,512,512);
MFSetServoRotaSpd(9,0);
MFSetServoRotaSpd(10,0);
MFSetServoPos(11,485,512);
MFServoAction();
DelayMS(1000);
//手臂直接伸直
MFSetServoPos(1,830,50);
MFSetServoPos(2,1023,512);
MFSetServoPos(3,682,512);
MFSetServoPos(4,200,50);
MFSetServoPos(5,1023,512);
MFSetServoPos(6,682,512);
MFSetServoPos(7,512,512);
MFSetServoPos(8,512,512);
MFSetServoRotaSpd(9,0);
MFSetServoRotaSpd(10,0);
MFSetServoPos(11,485,512);
MFServoAction();
DelayMS(3000);
//手臂上升
MFSetServoPos(1,950,70);
MFSetServoPos(2,1023,512);
MFSetServoPos(3,682,512);
MFSetServo