温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2023
自由度
机器人
运动
控制
软硬件
设计
仿真
08052
哈尔滨理工理工大学综合课程设计
目录
第1章 序言 2
1.1 双足机器人现状 2
1.2 技能综合训练意义 2
1.3 技能训练的内容 2
第2章 元件选择、结构设计 3
2.1元件选择 3
2.2结构设计三维设计图 4
2.2.1零件三位模型以及装配 4
2.2.2装配三维模型 7
第3章 控制系统设计 9
第4章 系统软件编程与仿真 11
第5章 结论 17
参考文献 18
附录 19
第1章 序言
1.1 双足机器人现状
随着世界第一台工业机器人1962年在美国诞生,机器人已经有了三十多年的开展史。三十多年来,机器人由工业机器人到智能机器人,成为21世纪具有代表性的高新技术之一,其研究涉及的学科涵盖机械、电子、生物、传感器、驱动与控制等多个领域。
世界著名机器人学专家,日本早稻田大学的加藤一郎教授说过:“机器人应当具有的最大特征之一是步行功能。〞双足机器人属于类人机器人,典型特点是机器人的下肢以刚性构件通过转动副联接,模仿人类的腿及髋关节、膝关节和踝关节,并以执行装置代替肌肉,实现对身体的支撑及连续地协调运动,各关节之间可以有一定角度的相对转动。
双足机器人不仅具有广阔的工作空间,而且对步行环境要求很低,能适应各种地面且具有较高的逾越障碍的能力,其步行性能是其它步行结构无法比较的。研究双足行走机器人具有重要的意义
1.2 技能综合训练意义
技能训练是在学生修完除毕业设计外全部理论和时间课程以后的一次综合性时间教学环节,其目的和意义在于:
通过技能训练,了解机器人机构及控制系统设计的根底知识;
掌握机器人系统中元部件的正确选择方法和特性参数确实定;
培养学生对所学知识的综合应用,理论联系实际的能力;
培养学生的动手能力和实际操作能力;
1.3 技能训练的内容
1、主要内容:
1〕、机器人结构设计;
2〕、控制系统软硬件设计与仿真;
3〕、六自由度机器人运动控制。
2、训练形式
学生以小组为单位,集体讨论确定整体方案;指导教师给出实训方向,技术指标等,协助学生完成训练任务。
第2章 元件选择、结构设计
2.1元件选择
2.1.1电机的选择
常用的电机有直流电机、步进电机、舵机等。下面我们大概对直流电机、步进电机、舵机进行一下比照〔见表2-1〕
表2-1 电机比照
电机
优点
缺点
适用重量
应用场合
直流电机
功率大、接口简单、容易购得型号多
较难装配、较贵、控制复杂
任何重量的机器人
较大型机器人
步进电机
精确的速度控制型号多、接口简单、廉价
体积大,较难装配、功率小、控制复杂
轻型机器人
巡线跟踪机器人,迷宫机器人
舵机
易于安装、接口简单、功率中等
负载能力较低
速度调节范围较小
重至2.5kg的机器人
小型机器人,步行机器人
所以此处选取 MG995全金属齿轮13公斤大扭力舵机作为双足机器人的传动机构。
参数说明: MG995舵机
1.重量:60g
2.尺寸:约40mmX20mmX36.5mm
3.速度:0.17秒/60度(4.8V);0.13秒/60度(6.0V)
4.扭矩:13kg·cm
5.使用温度:0~~+55摄氏度
6.工作电压:4.8V-7.2V
2.1.2关节材料及尺寸的选择
由于舵机已经选定,那么根据参加垫片以后各宽度设计支架的宽度,并按着人体比例设计大腿、小腿处需要的支架的长度。〔如以下列图标注所示〕
根据资料查阅,绝大多数小型双足机器人关节材料均选用铝合金作为材料,整个结构采用1.5mm的铝合金(LY12)钣金材料,这种材料重量轻、硬度高、强度虽不如钢,但却大大高于普通铝合金。且这种材料具有弹性模量、密度比高的特点。又因为机器总重不超过2.5KG,舵机扭矩为13 kg·cm。强度远小于铝合金的抗弯强度。所以符合要求。如图2-1-2。
图2-1-2 关节初步设计简图
2.2结构设计三维设计图
2.2.1零件三位模型以及装配
1、舵机,双足机器人的核心部件,型号MG995,如图2-2-1
图2-2-1 舵机
2、舵盘,用于连接舵机与铝合金支架的部件,因为舵机左右结构不同,所以舵盘分两种:舵盘a用于连接舵机的齿轮端,舵盘b用于配合舵机的光滑轴端,如图2-2-2
a b
图2-2-2 舵盘
3、铝合金支架,用于机器人的腿部主体支撑关节,起着连接舵机与舵机、舵机与腰部的身体板的重要作用。如图2-2-3
图2-2-3 铝合金支架
4、连接块,在4个面上都有螺纹孔,用于舵机与铝合金关节的连接以及关节与关节之间的连接,如图2-2-4
图2-2-4 连接块
5、底部机器人脚板,中空设计便于在崎岖不平的道路上行走时提供足够的摩擦力,如图2-2-5
图2-2-5 脚底板
6、腰部身体板,主要用于连接腿部、放置单片机和固定蓄电池。
如图2-2-6
图2-2-6 身体板
2.2.2装配三维模型
图2-2-7 为SolidWorks制作的双足步行机器人三维装配模型。
图2-2-7 双足机器人模型
如图2-2-8为SolidWroks模拟的双足机器人行走状态截图
第3章 控制系统设计
舵机的控制信号实质是一个可调宽度的方波信号(PWM)。该方波信号可由单片机来产生。目前采用单片机做舵机控制器的方案比较多,可以利用单片机的定时器中断实现PWM。
电路设计方案有二种:
1、利用555定时器实现外部中断;
2、用单片机内部中断。考虑到制作本钱,不宜增加外设,故采用方案2。方案电路图设计如图3-1所示。
图3-1 电路图
舵机控制器以80C51单片机为核心,该控制器中单片机可以产生8个通道的PWM信号,分别由80C51的P1.0~Pl.7端口输出。输出的8路PWM信号通过光耦隔离传送到下一级电路中。方波信号经过光耦传输后,前沿和后沿会发生畸变,因此反相器采用40106反相器对光耦传输过来的信号进行整形,产生标准的PWM方波信号。
根据经验舵机在运行过程中要从电源吸纳较大的电流,假设舵机与单片机控制器共用一个电源,那么舵时机对单片机产生较大的干扰。因此,舵机与单片机控制器采用两个电源供电,两者不共地,通过光耦来隔离,并且给舵机供电的电源最好采用输出功率较大的开关电源。该舵机控制器占用单片机的个SCI串口。串口用于接收上位机传送过来的控制命令,以调节每一个通道输出信号的脉冲宽度。MAX232为电平转换器,将上位机的RS232电平转换成TTL电平。
第4章 系统软件编程与仿真
舵机的控制信号为周期20ms 的脉宽调制〔PWM〕信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180 度,呈线性变化。
也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。
舵机输出转角与输入信号脉冲宽度的关系如图4-1所示:
图4-1 舵机输出转角与输入信号脉冲宽度的关系
测试编程如下〔实现0°,15°30°的脉冲信号〕#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit P00=P0^0;
sbit P03=P0^3;
void delay(uchar t);
void jiaodu0();
void jiaodu0_120();
uchar a=0;
main()
{
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
weizhi0();
delay(1000);
weizhi0_120();
}
}
void jiaodu0()
{ uchar i0=4;
while(i1)
{if(a==0)P00=1;
if(a==5){P00=0;i=0;} }
}
void jiaodu0_120()
{
uchar i1=4,i2=4,i3=4,i4=4,i5=4,i6=4,i7=4,i8=4,i9=4,i10=4,i11=4,i12=4,i13=4,i14=4;
while(i1)
{if(a==0)P00=1;
if(a==6){P00=0;i=0;} }
delay(100);
while(i2)
{if(a==0)P00=1;
if(a==7){P00=0;j=0;} }
delay(100);
while(i3)
{if(a==0)P00=1;
if(a==8){P00=0;k=0;} }
delay(100);
while(i4)
{if(a==0)P00=1;
if(a==9){P00=0;m=0;} }
delay(100);
while(i5)
{if(a==0)P00=1;
if(a==10){P00=0;n=0;} }
delay(100);
while(i6)
{if(a==0)P00=1;
if(a==11){P00=0;i=0;} }
delay(100);
while(i7)
{if(a==0)P00=1;
if(a==12){P00=0;j=0;} }
delay(100);
while(i8)
{if(a==0)P00=1;
if(a==13){P00=0;k=0;} }
delay(100);
while(i9)
{if(a==0)P00=1;
if(a==14){P00=0;m=0;} }
delay(100);
while(i10)
{if(a==0)P00=1;
if(a==15){P00=0;} }
delay(100);
while(11)
{if(a==0)P00=1;
if(a==16){P00=0;i=0;} }
delay(100);
while(i12)
{if(a==0)P00=1;
if(a==17){P00=0;j=0;} }
delay(100);
while(i13)
{if(a==0)P00=1;
if(a==18){P00=0;k=0;} }
delay(100);
while(i14)
{if(a==0)P00=1;
if(a==19){P00=0;m=0;} }
delay(100);
}
void delay(uchar t)