2023年机器人课程设计.docx
2023年机器人课程设计 沈阳化工大学 机器人课程设计 专业:测控技术与仪器 班级:测控0901 姓名:许伟博 学号:09130109 目录 第一章 绪言.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、目的和意义 机器人涉及机械、电子、传感、控制等多个领域和学科。本课程设计是在机器人学课程的基础上,利用多传感技术、控制技术实现机器人控制系统的综合与应用,达到锻炼学生综合设计能力的目的。 1.2、设计内容 1.2. 1、机器人硬件 本课程设计使用实验室已有的移动机器人。机器人有两个驱动轮、一个从动轮,驱动轮由舵机直接驱动。机器人控制器为89S52单片机。 图1 机器人结构简图 2 1.2.2、设计任务 利用多传感器技术,实现对机器人的轨迹规划及控制。具体为:控制机器人在规定的场地内避开障碍物走遍整个场地。 场地长1.8m,宽1.5m,场地四周为高0.3m的挡板。场地如图2所示。 1.3、运行框图 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 胡须硬件 4 安装胡须 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 图5 胡须电路示意图 6 图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 7 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 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 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 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"); 8 while(1) if(P1_4state()=0)&&(P2_3state()=0) if(z=0) Backward(); /向后 Left_Turn();/向左 for(i;i P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); Left_Turn();/向左 z=1; else Backward(); /向后 Right_Turn();/向右 for(i;i P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); Right_Turn();/向右 z=0; else if(P1_4state()=0) if(z=0) Backward(); /向后 Left_Turn();/向左 for(i;i P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); Left_Turn();/向左 z=1; else 9 Backward(); /向后 Right_Turn();/向右 for(i;i P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); Right_Turn();/向右 z=0; else if(P2_3state()=0) if(z=0) Backward(); /向后 Left_Turn();/向左 for(i;i P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); Left_Turn();/向左 z=1; else Backward(); /向后 Right_Turn();/向右 for(i;i P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); Right_Turn();/向右 z=0; else Forward();/向前 将上述程序下载到小车中进行调试。 10 第三章 机器人红外导航 现在许多遥控装置和PDA都使用频率低于可见光的红外线进行通信,而机器人则可以使用红外线进行导航。可以使用一些价格非常便宜且应用广泛的部件,让机器人的C51微控制器可以收发红外光信号,从而实现机器人的红外线导航。 3.1、使用红外线发射和接收器件探测道路 许多机器人使用雷达(RADAR)或者声纳(SONAR)来探测物体而不需同物体接触。我们使用红外光来照射机器人前进的路线,然后确定何时有光线从被探测目标反射回来,通过检测反射回来的红外光就可以确定前方是否有物体。由于红外遥控 技术的发展,现在红外线发射器和接收器已经很普及并且价格很便宜。这对于机器人爱好者而言是一个好消息。 红外前灯 你将要在机器人上建立的红外光探测物体系统在许多方面就象汽车的前灯系统。当汽车 前灯射出的光从障碍物体反射回来时,人的眼睛就发现了障碍物体,然后大脑处理这些信息, 并据此控制身体动作驾驶汽车。机器人使用红外线二极管LED作为前灯,如图8所示。 图8 用红外光探测障碍物 图9 本章需要用到的新部件 红外线二极管发射红外光,如果机器人前面有障碍物,红外线从物体反射回来,相当于机器人眼睛的红外检测(接收)器,检测到反射回的红外光线,并发出信号来表明检测到从物体反射回红外线。机器人的大脑单片机AT89S52基于这个传感器的输入控制伺服电机。 红外线(IR)接收/检测器有内置的光滤波器,除了需要检测的980 nm波长的红外线外, 它几乎不允许其它光通过。红外检测器还有一个电子滤波器,它只允许大约38.5 kHz 的电信号通过。换句话说,检测器只寻找每秒闪烁38,500次的红外光。这就防止了普通光源象太阳光和室内光对IR的干涉。太阳光是直流干涉 (0Hz)源,而室内光依赖于所在区域的主电源,闪烁频率接近100或 11 120 Hz。由于120 Hz在电子滤波器的38.5 kHz通带频率之外,它完全被IR探测器忽略。 3.2、搭建并测试IR发射和探测器 本任务中,我们将搭建并测试红外线发射和检测器。 元件清单: (1) 两个红外检测器 (2) 两个IR LED (3) 四个470电阻 (4) 两个9013三极管 搭建红外线前灯 电路板的每个角安装一个IR组(IR LED和检测器) 电路图如图10 图10 左侧和右侧IR组原理图 3.3、测试红外发射探测器 用P1_3发送持续1毫秒的38.5kHz的红外光,如果红外光被小车路径上的物体反射回来,红外检测器将给微控制器发送一个信号,让它知道已经检测到反射回的红外光。 让每个IR LED 探测器组工作的关键是发送1毫秒频率为38.5 kHz的红外信号,然后立刻将IR探测器的输出存储到一个变量中。下面是一个例子,它发送38.5 kHz信号给连接到P1_3 的IR发射器,然后用整型变量irDetectLeft存储 12 连接到P1_2的IR探测器的输出。 for(counter=0;counter P1_3=1; delay_nus(13); P1_3=0; delay_nus(13); irDetectLeft=P1_2state(); 上述代码给P1_3输出的信号高电平13微秒,低电平为13微秒,总周期为26微秒,即频率 约为38.5kHz。总共输出38个周期的信号,即持续时间约为1毫秒(38*26约等于1000微秒)。 当没有红外信号返回时,探测器的输出状态为高。当它探测到被物体反射的38500Hz红外信号时,它的输出为低。因红外信号发送的持续时间为1毫秒,因此IR探测器的输出如果处于低,其持续状态也不会超过1毫秒,因此发送完信号后必须立即将IR探测器的输出存储到变量中。这些存储的值会显示在调试终端或被机器人用来导航。 输入保存运行程序 进行调试 当你将物体移开时 是否显示 irdetectleft=1? 3.4、探测和避开障碍物 改变触须程序使其适应IR检测和躲避 3.4.1调用函数 Void IRLaunch(unsigned char IR) int counter 13 If(IR=L) For (counter=0.counter _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LeftLaunch=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); if(IR 'R') for(counter=0;counter RightLaunch=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); RightLaunch=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 修改ifelse语句存储IR检测信息的变量。 if(irDetectLeft 0)&&(irDetectRight 0)/两边同时接收到红外线 Left_Turn(); Left_Turn(); else if(irDetectLeft 0)/只有左边接收到红外线 Right_Turn(); else if(irDetectRight 0)/只有右边接收到红外线 Left_Turn(); else Forward(); 3.4.2 验证机器人的行为和和运行程序RoamingWithIr.c时除不需要接触是否非常像 例程:RoamingWithIr.c for(counter=0;counter LeftLaunch=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LeftLaunch=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); if(IR 'R') /右边发射 14 for(counter=0;counter RightLaunch=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); RightLaunch=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 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 Left_Turn(void) /左转子程序 int i; for( i=1;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 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 15 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 irDetectLeft,irDetectRight; uart_Init(); printf("Program Running!n"); while(1) IRLaunch('R'); /右边发射 irDetectRight = RightIR;/右边接收 IRLaunch('L'); /左边发射 irDetectLeft = LeftIR;/左边接收 if(irDetectLeft 0)&&(irDetectRight 0)/两边同时接收到红外线 Backward(); Left_Turn(); Left_Turn(); else if(irDetectLeft 0)/只有左边接收到红外线 Backward(); Right_Turn(); else if(irDetectRight 0)/只有右边接收到红外线 Backward(); Left_Turn(); else Forward(); 第四章 心得体会 通过这次课程设计,我从中学到了很多东西,不仅是知识方面,还有动手方面等。随着科技的发展,机器人的应用也越来越普遍了。所以这次课程设计不仅是一次机器人知识的普及,也是一次与机器人亲密接触的机会。 在没有做课程设计之前,我对机器人并不很了解,慢慢的接触之后,我明白了机器人是自动执行工作的机器装置。它既可以接受人类指挥,又可以运行预先编好的程序。在这次课 16 程设计中我们通过软件调试又巩固了单片机和C语言的相关知识。我们通过硬件调试锻炼了自己的动手能力。在课程设计中,我们也遇到很多的困难,在老师和同学的帮助下,最后都一一解决了。 通过这次课程设计,使我的理论知识又上升到了一个新的层次,同时在设计中也加深了我对理论知识的更深理解,另外,这次课程设计不仅使我的知识有了很大提高,而且使我学到许多其他方面的知识,总之,通过这次课程设计我不仅学到了新知识,而且提高了我考虑问题、分析问题的全面性,是我的综合能力有了很大提升。 总之,通过课程设计我既学到了知识,有锻炼了能力。非常感谢学校和老师为我们提供了这么宝贵的机会去学习机器人并完成设计,谢谢。 机器人课程设计 机器人课程设计方案 机器人创新课程设计探析论文 机器人创新设计课程总结 LEGO机器人编程课程 乐高机器人课程 机器人概述课程论文 机器人教学设计 机器人教学设计 机器人 教学设计