机器人课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
沈阳化工大学
机器人课程设计
专业:测控技术与仪器
班级:测控0901
姓名:***
学号:********
目录
第一章绪言 (2)
1.1、目的和意义 (2)
1.2、设计内容 (2)
1.2.1、机器人硬件 (2)
1.2.2、设计任务 (3)
1.3、运行框图 (3)
第二章机器人触觉导航 (4)
2.1、安装并测试机器人胡须 (4)
2.2、测试触须传感器 (7)
2.3、C语言程序如下 (7)
第三章机器人红外导航 (11)
3.1、使用红外线发射和接收器件探测道路 (11)
3.2、搭建并测试IR发射和探测器 (12)
3.3、测试红外发射探测器 (12)
3.4、探测和避开障碍物 (13)
第四章心得体会 (16)
第一章绪言
1.1、目的和意义
机器人涉及机械、电子、传感、控制等多个领域和学科。本课程设计是在《机器人学》课程的基础上,利用多传感技术、控制技术实现机器人控制系统的综合与应用,达到锻炼学生综合设计能力的目的。
1.2、设计内容
1.2.1、机器人硬件
本课程设计使用实验室已有的移动机器人。机器人有两个驱动轮、一个从动轮,驱动轮由舵机直接驱动。机器人控制器为89S52单片机。
图1 机器人结构简图
1.2.2、设计任务
利用多传感器技术,实现对机器人的轨迹规划及控制。具体为:控制机器人在规定的场地内避开障碍物走遍整个场地。
场地长1.8m,宽1.5m,场地四周为高0.3m的挡板。场地如图2所示。
1.3、运行框图
第二章机器人触觉导航
本章你将通过给你的机器人增加触觉传感器学习如何使用这些端口来获取外界信息。实际上,对于任何一个自动化系统(不仅仅是机器人),无非都是通过传感器获取外界信息,通过接口进入计算机(或者单片机),由计算机或单片机根据反馈信息进行计算和决策,生成控制命令,然后通过输出接口去控制系统相应的执行机构,完成系统所要完成的任务。因此,学习如何使用单片机的输入接口同学习使用输出接口同等重要。
许多自动化机械都依赖于各种触觉型开关,例如当机器人碰到障碍物时,接触开关就会察觉,通过编程让机器人躲开障碍物;旅客登机桥在靠近飞机时为了保护昂贵的飞机,在登机桥接口安装触须,当登机桥离飞机很近后触须就会碰到飞机,立即通知控制器提醒离飞机已经很近了,需要降低靠近速度;工厂利用触觉开关来计量生产线上的工件数量;在工业加工过程中,也被用来排列物体。在所有这些实例中,触觉开关提供的输入通过计算机或者单片机处理后生成其它形式的程序化的输出。
本章中,你将在机器人前端安装并测试一个称为胡须的触觉开关。你将对机器人大脑编程来监视触觉开关的状态,以及决定当它遇到障碍物时如何动作。最终的结果就是通过触觉给机器人自动导航。
2.1、安装并测试机器人胡须
编程让机器人通过触觉胡须导航之前,首先必须安装并测试胡须。图3所示是安装机器人触觉胡须所需的硬件元件清单,包括:
1.金属丝2根
2.平头M3×22盘头螺钉2个
3.13mm圆形立柱2个
4.M3尼龙垫圈2个
5.3-pin公-公接头2个
6.220Ω电阻2个
7.10kΩ电阻2个
图3 胡须硬件
安装胡须
1.拆掉连接主板到前支架的两颗螺钉
2.参考图4,进行下面操作
3.螺钉依次穿过M3尼龙垫圈、13mm圆形立柱
4.螺钉穿过主板上的圆孔之后,拧进主板下面的支架中,但不要拧紧
5.把须状金属丝的其中一个钩在尼龙垫圈之上,另一个钩在尼龙垫圈之下,调整它们的位置使它们横向交叉但又不接触
6. 拧紧螺钉到支架上
7.参考接线图5,搭建胡须电路。
注意:右边胡须状态信息输入是通过P1口的第4脚完成,而左边胡须状态信息输入是通过P2口的第3脚完成
8.确定两条胡须比较靠近,但又不接触面包板上的3-pin头。推荐保持3 mm 的距离。
9.图6所示是实际的参考接线图。
10.安装好触觉胡须的机器人如图7所示。
图 4 安装机器人胡须
图5 胡须电路示意图
图6教学底板上胡须接线图图7 安装好触须的机器人
2.2、测试触须传感器
先执行一段简单的程序,下面的程序是让小车前行的,修改参数调舵机,使舵机保持前行,然后在通过设置程序让左须子触碰障碍物时左转,右须子触碰障碍物是右转,这样进行调试,来检测传感器。
死区程序很关键,以中断的方式写入,避免其一直困在墙角里出不来。
2.3、C语言程序如下
#include
#include
int P1_4state(void)//获取P1_4的状态,右胡须
{return (P1&0x10)?1:0;}
int P2_3state(void)//获取P2_3的状态,左胡须
{return (P2&0x08)?1:0;}
void Forward(void)
{ P1_1=1;
delay_nus(1700);
P1_1=0;
P1_0=1;
delay_nus(1300);
P1_0=0;
delay_nms(20);}
void siqu(void) interrupt 0
{ if(condition1)
{ commands for condition1
If(condition2)
{ commands for both condition2 and condition1} else
{ commands for conditio1 but not condition2}} Else
{ commands for not condition1}
void Left_Turn(void)
{ int i;
for(i=1;i<=26;i++)
{ P1_1=1;
delay_nus(1300);
P1_1=0;
P1_0=1;
delay_nus(1300);
P1_0=0;
delay_nms(20);}}
void Right_Turn(void)
{ int i;
for(i=1;i<=26;i++)
{ P1_1=1;
delay_nus(1700);
P1_1=0;
P1_0=1;
delay_nus(1700);
P1_0=0;
delay_nms(20);}}
void Backward(void)
{ int i;
for(i=1;i<=65;i++)
{ P1_1=1;
delay_nus(1300);
P1_1=0;
P1_0=1;
delay_nus(1700);
P1_0=0;
delay_nms(20);
}}
int main(void)
{ int i=1;
int z=0;
uart_Init();
printf("Program Running!\n");