仿生四足步行机器人(转载) 点击:2454 | 回复:1



若此笔名未被注册

    
  • 精华:10帖
  • 求助:1帖
  • 帖子:294帖 | 3225回
  • 年度积分:0
  • 历史总积分:6058
  • 注册:2003年3月30日
发表于:2006-03-28 23:07:00
楼主
北京航空航天大学 胡敏 摘要:本文根据节肢昆虫的步行原理,建立起步行运动的模型,将昆虫的运动进行简化,抽象出四足运动的基本原理,并制作出了一个理论验证模型,可以实现前进、后退、左转、右转、避障等动作,对于研究四足或多足步行机器有很大的帮助。 关键字:四足步行、分布式控制、单片机 一、引言: 自从人类发明机器人以来,各种各样的机器人日渐走入我们的生活。仿照生物的各种功能而发明的各种机器人越来越多。作为移动机器平台,步行机器人与轮式机器人相比较最大的优点就是步行机器人对行走路面的要求很低,它可以跨越障碍物,走过沙地、沼泽等特殊路面,用于工程探险勘测或军事侦察等人类无法完成的或危险的工作;也可开发成娱乐机器人玩具或家用服务机器人。四足机器人在整个步行机器中占有很大大比重,因此对仿生四足步行机器人的研究具有很重要的意义。 二、步行原理: 1.单足行为 每一条腿有两种状态:向前走和向后走;对于每一个动作状态来讲,分为两步:迈腿和收腿。这两步连续不断的循环,设其周期为T,迈腿的时间为收腿时间的1/3,为整个周期的1/4,这个动作对于每条腿都是一样的:每相邻的两个抬腿动作之间的相位差为1/4周期,由此可得出机器人在行走式的四条腿之间的时序关系,如图1所示:
2.四足协调 机器人要实现稳定的行走,必须保证每时刻都有三条腿着地,而另外一条腿用来行走。全部行走的奥秘在于当一条腿抬起来时,其它三条腿是同时着地并且向后退的,这样,机器人把抬起的腿向前迈一步再放下,就走完了一步,之后轮流迈其它的腿,机器人就可以连续向前走了。各种动作顺序如下(四条腿分别记为右后、右前、左后、左前,每条腿向前迈记为“↑”,向后迈腿记为“↓”): 前进:右后↑ → 右前↑ → 左后↑ → 左前↑; 后退:右后↓ → 右前↓ → 左后↓ → 左前↓; 左转:右后↑ → 右前↑ → 左前↓ → 左后↓; 右转:右前↓ → 右后↓ → 左后↑ → 左前↑。 各条腿动作的时序关系如图1所示。 选择不同的动作顺序则可以实现不同的行走方式。 三、控制系统: 控制系统采用分布式控制,即每条腿上有一个单片机来控制本条腿的动作,还有一个中央控制中心负责给各条腿发送控制信号,协调各条腿之间的动作。同时中心还接收来自两个红外传感器传来的信号,辨别是否有障碍物在前方,以采取不同的行走方式,达到避障的目的。控制系统的结构框图见图2:
机器人各部分所采用的方案如下: 电 池:Ni-MH 4.8V 1300mAh 处 理 器:ATMEL 89C2051@12MHz×5 传 感 器:红外传感器 伺服电机:Futaba S3003×8 四、结论: 本文从原理、实现方法、应用等几方面介绍了仿生四足步行机器人。作为一种步行移动平台,该机器人可以实现前进、后退、左转、右转,并能实现避障功能。其具有很强的扩展性,可以附加机械臂等装置实现各种需要的功能。但此机器人还处在初级阶段的开发中,理论还不够完善,稳定性还差一点,还需要继续研究。
附录:源程序 1.总控中心源程序: # include # define uchar unsigned char sbit p10=P1^0; sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3; sbit p30=P3^0; sbit p31=P3^1; sbit p32=P3^2; sbit p33=P3^3; unsighed int w0,w1,i,j,c,d; delay(int i) {int j; for(;j { } } void main() {for(;;) {p10=0; delay(3000); p10=1; delay(500); p11=0; delay(3000); p11=1; delay(1000); p12=0; delay(3000); p12=1; delay(500); p13=0; delay(3000); p13=1; delay(1000); } } 2.每条腿上的单片机源程序: # include # define uchar unsigned char sbit p10=P1^0; sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3; sbit p14=P1^4; sbit p15=P1^5; sbit p16=P1^6; sbit p32=P3^2; sbit p33=P3^3; unsighed int w0,w1,i,j,c,d; delay(int i)



若此笔名未被注册

  • 精华:10帖
  • 求助:1帖
  • 帖子:294帖 | 3225回
  • 年度积分:0
  • 历史总积分:6058
  • 注册:2003年3月30日
发表于:2006-03-28 23:08:00
1楼
{int j; for(;j { } } void timer0(void) interrupt 1 using 1 {p13=!p13; c=20000-c; TH0=-(c/256); TL0=-(c%256); if(c>500&&c else c=20000-w1; } void timer1(void) interrupt 3 usering 3 {p14=!p14; d=20000-d; TH1=-(d/256);TL1=-(d%256); if(d>=500&&d wlse d=20000-w0; } void main() {w0=1000; w1=1500; p15=0; p16=0; PX=0;PX1=0;PT1=1;PT0=1; TMOD=0x11; TH0=-1000/256; TL0=-1000/256; TH1=-1000/256; TL1=-1000/256; EA=1; EX0=1; EX1=1; IT0=1; IT1=1; ET0=1; ET1=1; TR0=1; TR1=1; for(;;) {if(p10==0) (向前迈腿) {w0=1750; delay(1000); for(;w1 {w1=w1+1; delay(10); } delay(1000); wo=1500 } if(p11==0) (向后收腿) {for(;w1>=1000;i++) {w1=w1-1; delay(30); } } if(p12==0) (向后迈腿) {w0=1750; delay(1000); for(;w1>=1000;i++) {w1=w1-1; delay(10); } delay(1000); wo=1500 } if(p11==0) (向前收腿) {for(;w1 {w1=w1+1; delay(30); } } }

热门招聘
相关主题

官方公众号

智造工程师