机器人技术作为20世纪人类最伟大的发明之一,自60年代初问世以来,经历40余年的发展已取得长足的进步。走向成熟的工业机器人,各种用途的特种机器人的实用化,昭示着机器人技术灿烂的明天。机器人技术是涉及机械学、传感器技术、驱动技术、控制技术、通信技术和计算机技术的一门综合性高新技术,既是光机电软一体化的重要基础,又是光机电软一体化技术的典型代表。
现代机器人的研究始于20世纪中期,其技术背景是计算机和自动化的发展,以及原子能的开发利用。随着计算机技术和人工智能技术的飞速发展,使机器人在功能和技术层次上有了很大的提高,移 动机器人和机器人的视觉和触觉等技术就是典型的代表。由于这些技术的发展,推动了机器人概念的延伸。在研究和开发未知及在不确定环境下作业的机器人的过程中,人们逐步认识到机器人技术的本质是感知、决策、行动和交互技术的结合。80年代以来,人们将具有感觉、思考、决策和动作能力的系统称为智能机器人。智能机器人一般由三大部分组成:运动部分、智能部分和感觉部分。运动部分,包括行走机构、机械手、手爪;智能部分,包括有认知能力、学习能力、思维能力和决策能力的装置;感觉部分,包括有视觉、听觉、触觉、接近觉的装置。机器人主流产品主要有两大类,即以日本和瑞典为代表的一系列特定应用的机器人,如弧焊、点焊、喷漆装备、刷胶和建筑等,并形成了庞大的机器人产业。另一类是以美国、英国为代表的智能机器人开发,由于人工智能和其它智能技术的发展远落后于人们对它的期望,目前绝大部分研究成果未能走出实验室。机器人系统集成技术也是由几个主要发达国家所垄断。近年来,机器人技术并未出现突破性进展,各国的机器人技术研究机构和制造厂商都继续在技术深化、引进新技术和扩大应用领域等方面进行探索。
三.机器人技术发展趋势
? 1 传感型智能机器人发展较快 作为传感型机器人基础的机器人传感技术有了新的发展,各种新型传感器不断出现。例如,超声波触觉传感器、静电电容式距离传感器、基于光纤陀螺惯性测量的三维运动传感器,以及具有工件检测、识别和定位功能的视觉系统等。我国研究成功了1种机器人插入装配主动柔顺策略——模式识别法。在机器人插孔搜索时,该法采用力-位置控制的主动柔顺装配方法,实现了可编程的机器人轴孔装配作业。多传感器集成与融合技术在智能机器人上获得应用。由于单一传感信号难以保证输入信息的准确性和
可靠性,不能满足智能机器人系统获取环境信息及系统决策能力。采用多传感器集成和融合技术,利用各种传感信息,获得对环境的正确理解,使机器人系统具有容错性,保证系统信息处理的快速性和正确性。在多传感集成和融合技术研究方面,人工神经网络的应用特别引人注目,成为研究热点。这方面的研究成果也层出不穷。
2 开发新型智能技术
智能机器人有许多诱人的研究新课题,对新型智能技术的概念和应用研究正酝酿着新的突破。15年前显远或遥远(telepresence或telexistance),现在被称为临场感。这种技术能够测量和估计人对预测目标的拟人运动和生物学状主要研究方向为智能控制、人工智能、智能机器人和工业自动化。态,显示现场信息,用于设计和控制拟人机构的运动
虚拟现实(virtual reality, VR)技术是新近研究的智能技术,它是1种对事件的现实性从时间和空间上进行分解后重新组合的技术。这一技术包括三维计算机图形学技术、多功能传感器的交互接口技术以及高清晰度的显示技术。虚拟现实技术可应用于遥控机器人和临场感通讯等[5,6]。例如,可从地球上对火星探测机器人进行遥控操作,以采集火星表面上的土壤。形状记忆合金(SMA)被誉为“智能材料”。SMA的电阻随温度的变化而改变,导致合金变形,
可用来执行驱动动作,完成传感和驱动功能。可逆形状记忆合金(RSMA)也在微型机器上得到应用。多智能机器人系统(MARS)是近年来开始探索的又一项智能技术,它是在单体智能机器发展到需要协调作业的条件下产生的。多个机器人主体具有共同的目标,完成相互关联的动作或作业。MARS的作业目标一致,信息资源共享,各个局部(分散)运动的主体在全局
前提下感知、行动、受控和协调,是群控机器人系统的发展。在诸多新型智能技术中,基于模糊逻辑和人工神经网络的识别、检测、控制和规划方法的开发和应用占有重要的地位。基于专家系统的机器人规划获得新的发展,除了用于任务规划、装配规划、搬运规划和路径规划外,又被用于自动抓取规划。把进化编程和遗传算法用于移动机器人自主导航与控制,是智能机器人技术的最新进展之一。
3 采用模块化设计技术
智能机器人和高级工业机器人的结构要力求简单紧凑,其高性能部件甚至全部机构的设计已向模块化方向发展;其驱动采用交流伺服电机,向小型和高输出方向发展;其控制装置向小型化和智能化发展,采用高速CPU和32位芯片、多处理器和多功能操作系统,提高机器人的实时和快速响应能力。机器人软件的模块化则简化了编程,发展了离线编程技术,提高了机器人控制系统的适应性。例如,日本日产公司的智能型车身焊接和装配系统,由于其软件采用模块化设计技术,因而功能很强。该系统能显著地减少更换工具的时间,提高焊接精度和装配生产率。
4微型机器人的研究有所突破
有人称微型机器和微型机器人为21世纪的尖端技术之一。已经开发出手指大小的微型移动机器人,可用于进入小型管道进行检查作业。预计将生产出毫米级大小的微型移动机器人和直径为几百微米甚至更小(纳米级)的医疗机器人,可让它们直接进入人体器官,进行各种疾病的诊断和治疗,而不伤害人的健康。微型驱动器是开发微型机器人的基础和关键技术之
一。它将对精密机械加工、现代光学仪器、超大规模集成电路、现代生物工程、遗传工程和医学工程产生重要影响。微型机器人在上述工程中
将大有用武之地。在微型驱动器的研究方面,我国的研究成果处于国际先进水平。微型机器人足球比赛系统是这方面的成功应用范例之一。在大中型机器人微型机器人系列之间,还有小型机器人。小型化也是机器人发展的一个趋势。小型机器人移动灵活方便,速度快,精度高,适于进入大中型工件进行直接作业。比微型机器人还要小的超微型机器人,应用纳米技术,将用于医疗和军事侦察目的。
5应用领域向非制造业和服务业扩展
为了开拓机器人新市场,除了提高机器人的性能和功能,以及研制智能机器人外,向非制造业扩展也是一个重要方向。开发适应于非结构环境下工作的机器人将是机器人发展的一个长远方向。这些非制造业包括航天、海洋、军事、建筑、医疗护理、服务、农林、采矿、电力、煤气、供水、下水道工程、建筑物维护、社会福利、家庭自动化、办公自动化和灾害救护等。
6行走机器人研究引起重视
行走机器人是移动机器人的一种,包括步行机,自主式移动机器人是研究最多的一种。自主机器人能够按照预先给出的任务指令,根据已知的地图信息作
出全局路径规划,并在行进过程中,不断感知周围局部环境信息,自主地作出决策,引导自身绕开障碍物,安全行驶到达指定目标,并执行要求的动作与操作。移动机器人在工业和国防上具有广泛的应用前景,如清洗机器人、服务机器人、巡逻机器人、防化侦察机器人、水下自主作业机器人、飞行机器人等。
7军用机器人装备部队
令人遗憾的是,机器人技术还被用于军事目的。这里暂不谈空间机器人和海洋(水下)机器人将十分容易地转为军用,仅讨论陆军机器人的发展趋势。由于微小型机器人体积小,因而生存能力特别强,具有广泛的应用前景。研究发现,陆军的机器人是相当先进的。未来无人地面车辆的大小可分为以下几类:微型(由昆虫到老鼠那么大),超小型(象猫一样大),小到中型(大狗到自行车到轻便马车那样大),以及大型(吉普车及卡车那么大)。到20xx年,高度灵活的轮履合一的机器人车辆将会成为现实。但步行机器人系统的广泛应用仍然是很困难的。未来,半自主机器人的联网是一个重要的应用。将游动的传感器组合起来可提供战场空间的总体图像。例如,可利用数十个小型廉价的系统来搜集地面上的子母弹的子弹,并将它们堆积起来。对网络机器人的研究,已成为一个令人感兴趣的热点。还可以利用廉价的一次性使用的机器人作为假目标迷惑敌人。已经提出一种称为“机器人附属部队”的概念,这种部队的核心是有人系统,它的周围是一些装有武器及传感器的各种无人系统。无人车辆是有威慑力的,当敌人对一支强大的一次性使用的部队进行攻击时,它们必然要三思而行。也许将来需要一种新的组织形式——“机器人兵团”。机器人大部队需要有知识水平更高的陆军人员,将来甚至可能出现独特的军事科学院,专门培养按按钮的新的陆军部队。一些人认为,一般机器人学的最大的难题是需要把机器人的机动性和人工智能提高一个数量级。战场机器人需要对传感器数据进行处理及自动进行规划,机器人的机动性有时应当达到与人员驾驶时相同的水平。
第二篇:机器人技术报告——程序篇
1、程序结构
由于采用的是avr系列芯片,所以我们主要使用avr studio编程。我们采用了模块化的编程,即将机器人的动作分为多个子问题来实现。主程序实现PWM波的产生,并且提供接口,让子文件在只提供数据参数的情况下实现对舵机的控制。而在主文件中只需包含各个动作的文件就可以实现整体程序的整合。
#include"head.h"
#include"cheng.c"
#include"bow_rise.c"
#include"left_transform.c"
#include"left_walk.c"
#include"right_transform.c"
#include"right_walk.c"
#include"upward_rise.c"
#include"walk.c"
#include"left_hit.c"
#include"right_hit.c"
#include"right_left.c"
#include"right_right.c"
#include"left_forward.c"
#include"left_backward.c"
#include"anti_walk.c"
#include"turn_left.c"
#include"turn_right.c"
2、算法简介
①PWM的实现以及对多路舵机的控制
我们采用的是含有一个内置的16位计时器的ATmega32单片机和11.0592MHz的外部晶振,所以在采用8分频的情况下设置定时器寄存器的初值,精确的控制每隔20ms一次中断。并且实时监测计时器寄存器TCNT1的值,在需要的时候拉低需要拉低的端口电平实现PWM的输出。
对于多路舵机,我们采用两个数组(其实可以用结构体),一个记录需要执行操作舵机位序(char port[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};),一个记录需要拉低电平的时间(uint
wide[16]={a90_0,a85_0,a108_0,a68_0,a75_0,a87_0,a69_0,a118_0,a7_0,a173_0,a5_0,a171_0,a90_0,a10_0,a89_0,a165_0};)。通过queue()函数实现对需要拉低电平时间的排序,在对TCNT1的检测中,做到在一个20ms中对多路舵机电平的控制。
②动作接口的实现
由于舵机角度控制只需要20ms的前2.5ms,在2.5ms到下一个20ms之前,我们只要修改各个舵机的参数以及重新排好序,就能使各个舵机动起来。所以通过type的取值,决定要实现的动作函数,在动作函数中在对port和wide值的修改就可以实现接口。
③对舵机速度的控制
对于舵机的控制有这么几种方式:固定时间转动角度控制,或者固定角度对时间的控制。我们采用前者,每20ms会对舵机的参数做一次赋值,此时,
我们只需要让舵机在20ms中转过一个很小的角度,就能实现速度的控制。由于我们改变的是各个舵机拉低电平时间时所对应的计时器寄存器的值,所以可以实现每20ms转动1/15到180度的速度调配,方便调试动作时的各个舵机的转动速度搭配。
3、具体实现
主函数:
int main()
{//单片机初始化以及中断使能
initial();
TCCR1B=0x02;
TCNT1=0x9402;
TIMSK|=(1 << 2);
sei();
while(1)
{
creat_pwm();
}
}
void initial()
{
DDRA|=0xf0;
DDRC=0xff;
DDRD|=0xf0;
PORTC=0x00;
PORTD&=0x0f;
PORTA&=0x0f;
}
SIGNAL(SIG_OVERFLOW1)
{//20ms的溢出中断函数
TCNT1=0x9402;
PORTA|=0x0f;
PORTC=0xff;
PORTD|=0xf0;
a=0;
time_20ms++;
}
void creat_pwm()
{//产生PWM的主函数,通过对TCNT1值得检测实现对端口电平的控制 if(a<16)
{
if(TCNT1>=wide[a])
{
if(port[a]<8)
{
PORTC&=~(1 << port[a]);
}
if((port[a]>=8)&&(port[a]<12))
{
PORTD&=~(1 << (port[a]-4));
}
if(port[a]>=12)
{
PORTA&=~(1 << (port[a]-12));
}
a++;
}
}
if(a==16)
{ //这里是实现接口,每20ms对舵机的角度进行改变 a++;
for(i=0;i<16;i++)
{
port[i]=i;
wide[i]=prewide[i];
}
queue();
switch(action_index)//action_index可以通过无线模块修改值
{
//state是控制现在状态的变量
case 10:
if(state==1)
turn_left();
else if(state==3)
left_hit();
else if(state==2)
right_to_left();
else
complete=1;
break;
case 20:
upward_rise();
break;
case 30: if(state==1) cheng(); else complete=1; break; case 40: if(state==3) left_backward(); else complete=1; break; case 50: if(state==3) left_forward(); break; case 60: if(state==3) left_walk(); else complete=1; break; case 70: complete=1; break; case 80: if(state==1) left_transform(); else if(state==3) left_slight_hit(); else complete=1; break; case 90: complete=1; break; case 100: bow_rise(); break; case 110: if(state==1) walk(); else complete=1;
break; case 120: if(state==1) right_transform(); else if(state==2) right_slight_hit(); else complete=1;; break; case 130: if(state==2) right_right(); else complete=1; break; case 140: if(state==1) turn_right(); else if(state==2) right_hit(); else if(state==3) left_to_right(); else complete=1; break; case 150: if(state==2) right_walk(); else complete=1; break; case 160: if(state==2) right_left(); else complete=1; break; case 255: volid(); break; default: volid(); break; }
}
}
void queue()
{//选择排序各个舵机的角度大小
uchar i,j,k,temp_port;
uint temp_wide;
for(i=0;i<16;i++)
{
k=i;
for(j=k+1;j<16;j++)
{
if(wide[k]>wide[j])
k=j;
}
if(k!=i)
{
temp_port=port[i];
port[i]=port[k];
port[k]=temp_port;
temp_wide=wide[i];
wide[i]=wide[k];
wide[k]=temp_wide;
}
}
}
void add(uchar x,uint y,uchar z)
{//实现对舵机小角度的控制,传递的参数分别是几号舵机,某状态角度和转动速度
if(prewide[x-1]<y)
{
if(prewide[x-1]>=y-z)
prewide[x-1]=y;
else
prewide[x-1]+=z;
}
}
void minus(uchar x,uint y,uchar z)
{ //同上
if(prewide[x-1]>y)
{
if(prewide[x-1]<=y+z)
prewide[x-1]=y; else
prewide[x-1]-=z; }
}
void next_step(uint s)
{//控制每个动作各个步骤持续的时间 if(time_20ms>s)
{
step++;
time_20ms=0;
}
}
具体参数文件示例:turn_left.c void turn_left()
{
switch(step)
{
case 0:
next_step(150); break;
case 1:
turn_left_1(); break;
case 2:
turn_left_2(); break;
case 3:
turn_left_3(); break;
case 4:
step=3;
complete=1; break;
}
}
void turn_left_1()
{
add(1,a90_0,8);
minus(3,a45_0,3);
add(5,a76_0,8);
next_step(32);
}
void turn_left_2()
{
add(2,a131_0,5); add(3,a60_0,8); add(4,a70_0,20); minus(6,a52_0,10); next_step(32); }
void turn_left_3() {
add(6,a57_0,10); minus(1,a82_0,4); minus(2,a122_0,5); minus(3,a48_0,6); minus(4,a41_0,15); minus(5,a62_0,7); next_step(32); }