ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:53.51KB ,
资源ID:12587517      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12587517.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(陈正敏步行机器人实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

陈正敏步行机器人实验报告.docx

1、陈正敏步行机器人实验报告机电综合实验步行机器人机械与运载工程学院机自1103班实验者:陈正敏学 号:20110401310二零一四年12月16日一、认识龙人步行者尽管它看起来很简单,但确实这种使用两个伺服电机实现两足移动的步行机器人比两轮机器人复杂的得多。它通过机械机构和 C 语言指令控制来实现行走。实际上,步行机器人可使用许多传感器作为反馈元件,其中包括能检测到一定距离内是否有物体的红外线发射器及红外线检测器,缓冲传感器(闪光脚趾)和用以测量倾斜参数的加速度计。(注意,闪光脚趾和加速度计不是步行机器人的标准配件,用户需另外采购。)如果你耐心调节步行机器人的硬件和软件,步行机器人可以完成轮式机

2、器人所能完成的所有动作。步行机器人不仅比轮式机器人有趣很多,而且通过学习步行机器人行走控制,也能更加熟练的掌握控制程序的编写。步行机器人的编程将会引导你学会如何设计C语言程序,包括如何使用常量和变量、数组、程序的指针,函数以及存储数据的EEPROM(电可擦除只读存储器)。程序设计是否良好的其中一个标准是,在对一些机械装置调整后,不需重新编写整个程序,只需对程序作简单修改就能实现所要求的功能,即我们通常所说的可维护性。步行机器人的运动由两个伺服电机控制(这有点类似于操纵飞机的螺旋桨)。两个伺服电机有各自的作用, 顶部的伺服电机控制机器人的重心位置在1.5CM的范围内摆动,而底部的伺服电机控制机器

3、人的前后行走。步行机器人的腿和脚踝之间采用了一个简单的平行连接件,确保双脚能够平行的站在地面上。两条腿都连接在同一个电机上,所以一只脚向前移动时,另一只脚就会向后移动。单独控制一个电动机,步行机器人能够完成前进、后退、左转、右转等动作。综合控制步行机器人两个伺服电机的运动,能实现更加协调、更加平稳的行走。步行机器人的伺服电机和传感器由一个 AVR 单片机来控制。 AVR 单片机是工程中运用很广泛的一种芯片,它提供了较大的程序空间、存储空间供机器人使用,并且处理速度快比 51 单片机快 1 倍以上。二、实验要求1、了解和掌握自动化系统集成的一般过程和方法,同学们在课程中逐步掌握使用、调试、维护自

4、动化系统方面的能力。2、了解AT89S52芯片的主要性能,学会分析和使用常用电子芯片、电子元件和仪器设备的能力。3、掌握机器人机械工作方式,红外避障工作原理,掌握机器人尾随行走所需的闭环控制算法,学会将机械运动和自动化(利用软、硬件)紧密结合。4、学会查阅科技参考资料,根据自己的设计任务和设计方法编制程序、调试程序软、硬件联机调试,达到设计要求收集实验数据,并对结论进行分析,写好实验报告。三、实验原理1)时间测量和电压在这本学习指南中,我们将多次提到几个重要的时间单位秒(s),毫秒(ms),微秒(us)。通常,我们将秒用小写字母“s ”表示,所以,可以将1秒写成1s。毫秒则用“ms”表示,1毫

5、秒等于1/1000秒;微秒用“us”表示,1微秒等于1/1000000秒,从毫秒、微秒与秒的关系你是否已经推出:1毫秒=1000微秒。在2)运动原理从AVR CPU中发送出来的一组控制伺服电机的控制信号被称为“脉冲序列”,如图2-1所示。AVR CPU能够通过编程产生这样的信号波形,而且还能用它任意的一个I/O口进行信号的输出。在下面的例子中,AVR CPU向 PC2(跨步伺服电机)和PC3(倾斜伺服电机)各发送一个1500微秒的脉冲信号。在1500微秒的高电平送出后,AVR CPU继续发送一个25毫秒的低电平给该引脚,产生一组脉冲序列如图所示,这个脉冲序列由1500微秒的高电平和25毫秒的低

6、电平组成。伺服电机的控制主要由1500微秒的高电平来控制,我们通常称这一段时间为脉宽。脉冲信号由低电平到高电平这一变化过程我们称为上升沿。同理,由高电平到低电平的变化我们称为下降沿。步行机器人的行走的分4个步骤:a. 向一边倾斜b. 移动被提起的那只腿c. 向另一边倾斜d. 移动被提起的那只腿3)滑动式转弯步行机器人有点不大灵活。它只能向前或向后移动它的步子,不能相对它的身体旋转步子。但这并没有阻碍他的转弯能力,当走直线时,步行机器人和人走直线是相似的,而转弯就明显不同。步行机器人转弯和人最接近的是就象人穿着平底鞋站在冰面上转弯的情形。人站在冰上右转弯的过程是相当简单的,把你的左脚向前迈一步放

7、在地面上,然后把左脚向后滑行回收,这样你就可以以右脚为轴向右转了。如果冰是湿滑的话可能要多次转动才能转过 90 度。同样要左转就滑行右脚。标准的步行机器人在冰上转弯的效果并不理想,但利用这种原理,在其它表面上可以转得很好。步行机器人的平滑金属脚提供了一个光滑的表面。当它站在能提供摩擦力的表面上来做转弯,效果会更加好。如果走的平面太光滑,那么对步行机器人的脚掌进行一些处理以便提供更大的摩擦力。最典型的做法四、相关资料及问题(一)、PWM 直流电机调速原理:通过AVR 单片机ATmega8直接产生PWM 波形经过电机驱动芯片L298 分别驱动两个直流电机,PWM 将占空比不同的脉冲变成不同的电压驱

8、动直流电机转动从而得到不同的转速,且实现电机启动、停止、正反转等功能。(二)、直流电机控制模块1、控制板的使用说明#define POSITIVE_DIR 1 /正向旋转#define NEGATIVE_DIR 0 /反向旋转#define LEFT_MOTOR 0 /左电机#define RIGHT_MOTOR 1 /右电机#define NOT_STOP 0 /不停止#define STOP 1 /停止#define BY_10MS 0 /时间控制系数 10毫秒倍率#define BY_100MS 1 /100毫秒倍率#define BY_1000MS 2 /1000毫秒倍率#define

9、 NOT_CONTROL_TIME 3 /不控制时间2、通过TTL串口驱动PWM直流电机驱动模块void write_pwm(unsigned char bDirection, unsigned char bSide, unsigned char bStop, unsigned char TimeFactor, unsigned char Speed, unsigned char Time) unsigned char Command; bSide = bSide 1; bStop = bStop 2; TimeFactor = TimeFactor 3; Command = bDirecti

10、on | bSide | bStop | TimeFactor; /组合命令字节 soft_send_enable (); /允许软串口发送 EA=1; rs_send_byte(0xaa); /发送控制命令的头部,恒为0xaa rs_send_byte(Command); /发送命令字节,想要了解命令格式 rs_send_byte(Speed); /发送速度描述字节,0255 rs_send_byte(Time); /发送时间倍率,0255 rs_send_byte(0xbb); /发送控制命令的尾部,恒为0xbb while(rs_f_TI=0); /等待所有的命令发出完毕 EA=0;3、

11、几个基本函数驱动电机后退函数原理:左电机正转,右电机反转,以同样的速度旋转,完成后退动作参数:Speed:速度系数(0255);TimeFactor:时间系数(X10ms,X100ms,X1000ms);Seconds:时间倍率(0255);时间倍率*时间系数=实际时间void Backward(unsigned char Speed, unsigned char TimeFactor, unsigned char Seconds) write_pwm(POSITIVE_DIR,LEFT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds); write_pwm(N

12、EGATIVE_DIR,RIGHT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);驱动电机右转函数原理:左右电机正转,以不一样的速度旋转,完成右转动作参数:Speed:速度系数(0255);TimeFactor:时间系数(X10ms,X100ms,X1000ms);Seconds:时间倍率(0255);时间倍率*时间系数=实际时间void Right(unsigned char Speed, unsigned char TimeFactor, unsigned char Seconds) write_pwm(POSITIVE_DIR,LEFT_MOTOR,N

13、OT_STOP,TimeFactor,Speed,Seconds); write_pwm(POSITIVE_DIR,RIGHT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);驱动电机左转函数原理:左右电机反转,以不一样的速度旋转,完成左转动作参数:Speed:速度系数(0255);TimeFactor:时间系数(X10ms,X100ms,X1000ms);Seconds:时间倍率(0255);时间倍率*时间系数=实际时间void Left(unsigned char Speed, unsigned char TimeFactor, unsigned char

14、 Seconds) write_pwm(NEGATIVE_DIR,LEFT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds); write_pwm(NEGATIVE_DIR,RIGHT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);驱动电机前进函数原理:左电机反转,右电机正转,以同样的速度旋转,完成后退动作参数:Speed:速度系数(0255);TimeFactor:时间系数(X10ms,X100ms,X1000ms);Seconds:时间倍率(0255);时间倍率*时间系数=实际时间void Forward(unsigned

15、 char Speed, unsigned char TimeFactor, unsigned char Seconds) write_pwm(NEGATIVE_DIR,LEFT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds); write_pwm(POSITIVE_DIR,RIGHT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);(三)、头文件及PWM_Init()函数说明uart.h:硬串口的相关程序。包含该文件后,在程序中调用uart_Init()函数,即可完硬串口的初始化。soft_rs232.h:TTL-RS232

16、的实现程序。在该文件中,可修改TTL-RS232的通信波特率以及输出端口。如果在设置的TTL-RS232数据输出端口外接一个RS232电平转换芯片并搭载DB9串口接口,这样相当于构建了C51平台上的第二个串口。该程序构建的串口为单工串口。Movement.h:该文件提供了龙人贝塔的运动控制函数的范例。在包含该文件之前,请包含BetaRobot.h文件。否则,在编译程序的时候会出现错误。 PWM_Init()函数的作用是为初始化第一层与第二层之间的TTL串口连接。其中TTL串口的数据输出口定义为P1.0口,在程序设计的过程中,请回避该端口,避免引起机器人运动控制的错误。在KEIL工程中,如果要使

17、用到机器人的运动控制部分,那么在主程序的开头部分,就必须首先执行该函数,进行TTL串口初始化。五、步行机器人走“日”字#include#include#define uint16_t unsigned int#define StrideServo P1_0 /stride servo#define TiltServo P1_1 /Tilt servo#define MoveDelay 15 /in ms time#define TiltStep 25 /step size#define StrideStep 25 /step size#define RightTilt 1200 /tilt l

18、imits#define CenterTilt 1500#define LeftTilt 1800#define RightStride 1800 /stride limits#define CenterStride 1500 #define LeftStride 1200 /movement state numbers:#define TL 0 /representation of tiltleft #define TC 1 /representation of tiltcenter#define TR 2 /representation of tiltright#define SL 3 /

19、representation of strideleft#define SC 4 /representation of stridecenter#define SR 5 /representation of strideright#define xx 255 /end representation int code WalkForward5=TR,SL,TL,SR,xx; /state tableint code WalkBackward5=TR,SR,TL,SL,xx;int code TurnLeft5=TL,SR,TC,SL,xx;int code WideTurnLeft9=TL,SR

20、,TC,SL,TR,SL,TL,SR,xx;int code TurnRight5=TR,SL,TC,SR,xx;int code PivotRight9=TR,SL,TC,SR,TL,SL,TC,SR,xx;/-variables-int MoveLoop; /loop times of repeat movement uint16_t Pulses; /pulses variableuint16_t CurrentTilt; /uint16_t CurrentStride;uint16_t NewValue;int *Mx; /state table index/-movement rou

21、tines-void MovementTilt(void) /tilt int step; Pulses= CurrentTilt; if(PulsesNewValue) step=-TiltStep; else step=TiltStep; while(Pulses!=NewValue) TiltServo=1; delay_nus(Pulses); TiltServo=0; StrideServo=1; delay_nus(CurrentStride); StrideServo=0; delay_nms(MoveDelay); Pulses=Pulses+step; CurrentTilt

22、=NewValue; void MovementStride(void) /stide int step; Pulses= CurrentStride; if(PulsesNewValue) step=-StrideStep; else step=StrideStep; while(Pulses!=NewValue) TiltServo=1; delay_nus(CurrentTilt); TiltServo=0; StrideServo=1; delay_nus(Pulses); StrideServo=0; delay_nms(MoveDelay); Pulses=Pulses+step;

23、 CurrentStride=NewValue; /-subroutines-void ResetCC(void) /move initial CurrentTilt=CenterTilt; CurrentStride=CenterStride; for( Pulses=0;Pulses=10;Pulses=Pulses+StrideStep) TiltServo=1; delay_nus(CenterTilt); TiltServo=0; StrideServo=1; delay_nus(CenterStride); StrideServo=0; delay_nms(MoveDelay);

24、void Movement(void) /move by data table referenced by Mx while(*Mx != xx) switch(*Mx) /比3小,执行MovementTilt() case 0: NewValue=LeftTilt; MovementTilt(); break; case 1: NewValue=CenterTilt; MovementTilt(); break; case 2: NewValue=RightTilt; MovementTilt(); break; case 3: NewValue=LeftStride; MovementSt

25、ride(); break; case 4:NewValue=CenterStride; MovementStride(); break; case 5: NewValue=RightStride; MovementStride(); break; Mx+; /INPUT;Mx=table index ; END:Mx=xx /-Main-int main(void) uart_Init(); printf(Program started!rn); ResetCC() ; for(MoveLoop=1;MoveLoop=10;MoveLoop+) / WalkForward Mx=WalkFo

26、rward; Movement(); for(MoveLoop=1;MoveLoop=7;MoveLoop+) /turn right Mx=TurnRight; Movement(); for(MoveLoop=1;MoveLoop=5;MoveLoop+) / WalkForward Mx=WalkForward; Movement(); for(MoveLoop=1;MoveLoop=7;MoveLoop+) /turn right Mx=TurnRight; Movement(); for(MoveLoop=1;MoveLoop=10;MoveLoop+) / WalkForward

27、Mx=WalkForward; Movement(); for(MoveLoop=1;MoveLoop=7;MoveLoop+) /turn right Mx=TurnRight; Movement(); for(MoveLoop=1;MoveLoop=5;MoveLoop+) / WalkForward Mx=WalkForward; Movement(); for(MoveLoop=1;MoveLoop=7;MoveLoop+) /turn right Mx=TurnRight; Movement(); for(MoveLoop=1;MoveLoop=5;MoveLoop+) / Walk

28、Forward Mx=WalkForward; Movement(); for(MoveLoop=1;MoveLoop=7;MoveLoop+) /turn right Mx=TurnRight; Movement(); for(MoveLoop=1;MoveLoop=5;MoveLoop+) / WalkForward Mx=WalkForward; Movement(); Mx=FinishForward; /end Movement();五、心得体会通过这次对于机电综合实验的学习,从中获益良多。首先让我对机电这门课程有了更加深入的了解,机械的自动化才是机械的最终走向,随着几点这门学科越来越发展,他的研究领域将会变得更加广泛,成果也将越来越多的应用于人们的生产生活实践中。同时通过这次实践我也更加体会到了团队协作的重要性,在未来的工作学习中我们也将会碰到越来越多需要团队协作才能更好完成的事情,所以团队的重要性是不言而喻的,我们要不断的从团队中学习,更加的要把自己融入团队之中,只有这样我们才能不断进步。参考文献步行机器人与高级 C 程序设计秦志强C51单片机应用与C语言程序设计秦志强,电子工业出版社;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1