0010-智能机器人传菜员行走机械结构的设计、控制及制作【全套21张CAD图+PROE模型+文献翻译+说明书】
  • 该文件为rar格式
  • 文件大小:20 M
  • 下载次数
  • 文件评级
  • 更新时间:2018-05-14
  • 发 布 人 :253186043
  • 文件下载:
  • 立即下载

  • 文件介绍:
  • 该文件为 rar 格式,下载需要 150 积分   (1元=5积分)

  • 1 导言

    1.1 主题来源
    随着现代工业化进程的加快,机械自动化成为了社会的一种趋势。在工业生产中已经大量运用机器人完成生产线的加工与制造。随着人们对生活中物质文化需求的增多,机器人也渐渐走入了人们的生活之中。尤其是在餐饮行业,一款良好的送餐机器人可以良好的减缓企业用工的压力。但现在的餐饮行业多是以人力进行工作及送餐,人流量大,工作强度高,对劳动人员的精神及体力无疑是一种严峻的考验;对企业来说,即使花很高的价钱也很难留住劳动人员。但此类服务的技术含量相对较低,大量的雇佣劳动人员又会造成人才的不合理利用,人力资源造成不必要的浪费,而且雇佣人力还会存在着卫生等隐患。
    1.2 智能机器人传菜员研究目的
    如能开发一款以机器人代替人力进行送餐的机械设备,无疑可以减少企业的用工难,工作压力大等问题,对于食品卫生安全方面也会有进一步的保证。企业也可以避免长期花费高价雇佣服务员等费用,对企业来说又是一笔额外的收益。而且以机器人代替人力还会使餐厅成为亮点,吸引顾客,对企业的发展有着良好的市场前景。因此,送餐机器人将会成为未来餐饮行业的必然趋势。
    1.3 智能机器人传菜员课题规划
    本课题在于不仅设计一款集机、液、电、传感技术、自动控制一体化餐厅服务机器人,并按照设计完成制造全过程;该产品不仅要具有灵巧的机械行走结构,稳定的液压四自由度端盘机械手、还要具有清晰的轨迹识别/盘子定位抓取/障碍物识别避让等多组传感器、其程序控制上能具有餐桌识别能力的智能控制系统。 完全代替人工实现寻找餐桌、识别该餐桌所需要的若干菜盘并将其端放到餐桌上的指定区域,菜品运送完毕后,能够原地掉头按照原来的轨迹路线返回到起点。
    1.4 智能机器人传菜员设计的意义及市场前景
    智能机器人传菜员可以完全代替人力在餐厅进行服务工作,对未来餐饮行业的运营形式有着深远的影响,这将是使机器人进入人们生活所迈出的一大步,全智能的服务可以为顾客提供一个方便、快捷、卫生的体验,也会成为餐厅的一大卖点,更为经营者省去了一大笔服务人员的雇佣费用。目前,拥有机器人服务的餐厅还比较少,这是一个蕴藏着商机的新兴市场,在未来将会迅速的发展起来,成为一种潮流,也将预示着以机器人为主导的时代即将来临。

    2 课题设计任务书

    2.1 课题名称
    智能机器人传菜员行走机械结构的设计、控制及制作
    2.2 设计任务
    本题目主要任务是:完成该机械行走传动方案的总体设计、液压端盘机械手的液压系统图的设计、多组识别传感器的总体设计、控制程序的框图的总体设计、并完成按照上述设计工程图纸完成元器件制作(采购)、系统总体装配、调试等全部过程。还要负责全部参赛全过程的组织协调。根据以上描述,可以知道该题目属于真正的全面设计、制作、调试联合完成的真题真做类型课题。是对毕业生一种难得的锻炼和挑战。
    2.3 设计要求
    对该机械结构进行总体方案的设计、并着重设计机器人行走机械结构以及端盘机械手的液压系统结构,对其控制结构的总体控制方式进行框架结构的设计。具体如下:
    1) 主要根据总体方案图,完成绘制系统装配图,并依装配图绘制全套零件图
    2) 辅助完成依据液压系统图,对液压系统进行制作的过程。
    3) 辅助完成三组传感器安排和设计。
    4) 主要完成该机器人控制程序设计框图。并辅助编制控制程序
    5) 辅助完成根据设计图纸监控该机器人制造全过程。并实施装配
    6) 辅助完成对机器人/传感器和控制程序的运动调试。

    3 工作原理与制作过程

    3.1 概述
    智能机器人传菜员的整体由三大部分组成,即机械系统、液压系统、控制系统。控制系统可以实现对轮子转向、前进、停止以及液压系统的控制,实现对盘子的抓取。控制系统还设有红外遥控程序,当机器人的电源接通时,利用遥控器输入相应的桌号,机器人便会启动到达相应的桌位实现送餐过程。机器人的行走部分是通过机械系统实现的,机械系统由一个驱动轮、直流电机、步进电机、灰度传感器组成,为了使该机器人结构简单,动作灵活,利用其机器人特有的独轮结构实现轮子的直线行走及转弯,结构简单灵活;在其外壳四周加装了四个辅助万向脚轮,保证它无论向何方运动都能稳定 。大轮子由为电机配重的大齿轮固定,步进电机被固定在小齿轮支架圈上,大齿轮底部装有排在一排的八个灰度传感器。机器人循迹的轨迹为黑色线条,利用传感器对黑线的检测来控制机器人的行走方向,当机器人偏离轨道时,外侧的传感器会检测到黑线,根据传感器位置的不同,传感器将信号发送到控制系统,由控制系统的单片机对机器人进行纠偏。这时,轮子会向反方向转偏离的角度,使大轮子会的轨迹的正中央,在八个传感器的前方另装有一个传感器,当机器人总到指定桌位时,九个传感器同时检测到黑线,机器人停止行走,执行抓盘子程序 。此时手爪张开,步进电机以大轮子中轴线为中心进行旋转,机械手执行找盘子动作,手爪中心装有红外线传感器,盘子放置的高度高于台面,当传感器正对于台面时,传感器的检测距离小于台面,不能检测到物体,继续旋转。一旦传感器转到盘子下面时,手抓回转到盘子中心位置,此时液压系统启动。液压钢的运动是通过控制系统的单片机控制继电器的吸合与断开控制的,再通过与继电器相连的电磁换向阀来控制液压缸的伸长与收缩。竖直液压缸由最高点下降至距离盘子一定高度后停止。此时手爪缸收缩,机械手抓取盘子。抓完盘子后液压缸转回到初始位置,水平液压缸伸长,竖直缸下降,当盘底与桌子相接触的时候,机械手张开,盘子放到桌子上。之后机械手收回,液压系统恢复初始状态。继续执行抓盘子过程,餐台共有四个盘子,当机械手依次抓完盘子以后,端菜过程结束。步进电机掉头旋转180度,直线电机启动,原路返回。机器人装有避障装置,当前方遇到障碍物时,机器人会自动停止行走,以免撞到障碍。障碍物撤离后,直流电机又会启动,继续前行,返回路径初始位置,实现了送餐的全智能化。
    3.2 工作原理
    智能机器人传菜员在工作前应当在所要操作空间的地面上粘贴或制作宽度为45mm的宽条线作为其循迹的导引线,其餐厅相应布置如图1。因黑色对于光的吸收最为明显,白色对光的吸收最弱,所以建议将轨迹铺成黑色,地面为白色效果最佳。该机器人的供电选用两块串联的12V、12Ah锂电池,步进电机接24V电,直流电机接12V电。导引线贴好后,将充满电的机器人放在导引线的起点位置,并调整好大齿轮下表面一排的八个灰度传感器的宽度位置,使左右两边最靠近轮子的传感器分别位于宽条导引线的内侧边缘处,打开电源进入待操作状态,将盛好菜肴的四个盘子放到餐台上,利用遥控器对送餐机器人输入需要送达的桌号,再按下确认键,步进电机和直流电机启动,驱动该智能机器人传菜员沿导引线运动,其间大齿轮下表面上的灰度传感器分别拾取导引线的两个边缘,当其他相邻的两个灰度传感器进入导引线时,说明机器人偏离了运行轨道,传感器会将信号传送给单片机,此时单片机会根据传感器的相对位置进行反方向的纠偏,由步进电机连接的小齿轮发生旋转,带动中间的大齿轮以及固定在大齿轮上的轮子发生旋转,使两边靠近轮子的传感器回到导引线内部,轮子能够沿着正确的轨迹前进。如此不断自动修正,保持沿导引线正确的运动(单片机程序中应含有“防抖动”程序,即用以减少或避免机器人在不断纠偏不断来回抖动中蛇形前进)。当其抵达某轨迹的岔口时,轮子一侧的四个传感器就会同时检测到信号,发出一个信号给单片机,单片机对此信号给以计数,并判断执行转90度弯或是继续前进。当达到了设定的目的地坐标数值后,单片机发出转弯角度指令使输送机器人按指令沿导引线转弯送达某目的地坐标地点。在坐标地点贴有相对较宽的黑的区域。当一排的八个灰度传感器同时检测到黑色时,直流电机停止运动,机器人停在坐标地点,驱动大轮的正前方另装有第九个灰度传感器,当这九个传感器同时检测到黑色时,控制系统会发出信号使总继电器吸合,液压系统进入待工作状态,控制液压泵的电机启动,液压泵开始工作。液压缸的每个行程分别由6个分继电器控制,每一个分继电器与电磁换向阀的一端相连,继电器控制液压缸在一个方向上的运动与停止,电磁阀用来控制液压缸的伸长与收缩。机械手先执行找盘子过程,手爪缸伸长,机械手张开,因为机器人的餐台在运动过程中受大齿轮的影响自身会发生旋转,所以此过程分为两种情况:(1)机器人停在目标位置时,要抓取的第一个盘子正好在机械手中心红外线传感器的监测范围内时,机械手顺时针旋转到盘子的边缘,当检测信号消失时,机械手逆时针旋转到盘子中心(从盘子边缘到盘子中心是通过延时来控制的),执行抓盘子动作。(2)机器人停在目标位置时,要抓取的第一个盘子不在机械手中心红外线传感器的监测范围内时,机械手顺时针旋转到盘子的边缘,当红外线传感器检测到盘子时,单片机启动延时程序,转到盘子中心,执行抓盘子动作。抓盘子时,控制竖直缸下降的继电器与换向阀启动,单片机通过延时是机械手下降到抓取盘子的高度,控制竖直缸下降的继电器与换向阀断开,控制手爪缸收缩的继电器与换向阀启动,对盘子进行抓取。抓住盘子后,控制手爪缸收缩的继电器与换向阀断开,控制竖直缸上升的继电器与换向阀启动,液压缸上升到最高点,控制竖直缸上升的继电器与换向阀断开,控制水平缸伸长的继电器与换向阀启动,水平缸伸到最长,控制水平缸伸长的继电器与换向阀断开,控制竖直缸下降的继电器与换向阀启动,当竖直缸下降到盘子底部与餐桌接触时,控制竖直缸下降的继电器与换向阀断开,控制手爪缸伸长的继电器与换向阀启动,机械手张开,盘子被放到餐桌上。控制竖直缸上升的继电器与换向阀启动,液压缸上升到最高点,控制竖直缸上升的继电器与换向阀断开,控制水平缸收缩的继电器与换向阀启动,水平缸收缩至最短,自此完成一次端菜过程。在抓取第二、三、四个盘子时,首先会执行找盘子程序中的情况(2),然后按端菜程序依次将盘子送至餐桌。当完成第四个端菜过程后,控制手爪缸收缩的继电器与换向阀启动,机械手闭合,表示端菜过程结束。控制液压泵的电机停止运转,液压系统完成工作。步进电机带动大齿轮中间的大轮子旋转180度。机器人原路返回至导引线起点位置,机器人送餐完毕。当餐台上初始的盘子数量小于四个时,机械手抓完最后一个盘子,会顺时针旋转0度,如在其过程中红外线传感器并未检测到盘子,控制系统结束端菜过程,控制手爪缸收缩的继电器与换向阀启动,机械手闭合,步进电机带动大齿轮中间的大轮子旋转180度。机器人原路返回至导引线起点位置,机器人送餐完毕。由于液压缸的缸杆为圆柱体,故在其轴向伸缩的同时会伴随着轴向的旋转,因此在水平缸与竖直缸的缸体与缸杆之间安装有导向架,以防止因轴向旋转而使运动轨迹偏离预定目标。在水平杆的导向架最前端装有红外线避障传感器,其检测距离为10cm,当机器人在运动过程中遇到前方有障碍物时,避障传感器将接收到信号发送给单片机,单片机发出指令,直流电机停止运动,机器人停在原地不动;当将障碍物移开后,单片机发出指令,直流电机继续工作,机器人开始运动。此设计可以有效的避免机器人在送餐过程中撞倒行人,为顾客和机器人提供了安全保障。

    图1
    3.3 行走部分机构的设计及控制
    行走部分主要采用自行设计的独轮机构,通过直流电机驱动前进,独轮通过爪型固定架,安装在从动转向轮中心 。在机箱底部均布有四个万向脚轮,是机器人在行走时能够保持平衡。转向部分通过与步进电机直接相连的转向齿轮控制,大齿轮与三个小齿轮相啮合,通过42两相四拍步进电机对其实现精确地转向控制 。


    图2 图3

    图4 图5
    3.4 液压控制系统的设计
    本液压系统设定压力为0.8MPa,大臂升降A缸选用内径40行程320mm ,安装方式后法兰安装。水平伸缩缸B采用内径32,行程220mm。控制手抓张合缸C内径25行程100mm 。泵选用型号:CB-B4,流量1.8L/min,齿轮泵,压力2.5MPA 转速1450 n/min,电机采用24V 直流电机其功率0.13KW ,电流5.2A,转速1500 n/min。油管管径采用6mm,邮箱油量5.4L电磁阀采用三位四通,通径4,通量6L/min如图7。其原理图如图6,液压缸之间的链接如图8。

    图6

    图7
    图8

    3.5 三组传感器的布局及功能
    3.5.1行走部分传感器
    行走控制系统通过固定于从动大齿轮底面的9个PH6002A光耦传感器实现循迹的纠偏、转弯、桌定位及掉头。其排布左右各四个,正前方一个,利用黑色吸光性强的原理,将光耦输出模拟信号通过LM339四相电压比较器转换为数字信号输出到单片机上。单片机通过脉冲信号实现对步进电机不同转角的控制。如图9

    图9
    在行走,转弯时主要依靠左右四个传感器不同的返回值,控制步进电机的转角,实现纠偏,转弯。其纠偏状态如表1所示:
    L4 L3 L2 L1 R1 R2 R3 R4 状态
    1 1 1 0 1 1 1 1 微左偏
    1 1 0 0 1 1 1 1 稍微左偏
    1 1 0 1 1 1 1 1 稍左偏
    1 0 0 1 1 1 1 1 稍左偏
    1 0 1 1 1 1 1 1 左偏
    0 0 1 1 1 1 1 1 为严重左偏
    0 1 1 1 1 1 1 1 严重左偏
    1 1 1 1 0 1 1 1 微右偏
    1 1 1 1 0 0 1 1 稍微右偏
    1 1 1 1 1 0 1 1 稍右偏
    1 1 1 1 1 0 0 1 稍右偏
    1 1 1 1 1 1 0 1 右偏
    1 1 1 1 1 1 0 0 微严重右偏
    1 1 1 1 1 1 1 0 严重右偏
    表1
    3.5.2避障传感器
    避障传感器将其安排在水平缸的前端如图10,位于小导向架的顶部,此位置也是机器人整体的最前端,其检测距离为20cm。当机器人运行时,如前方遇到障碍物,传感器跳转至低电平触发,信号反馈到单片机,单片机发出停止前进的指令。此功能可防止机器人运行时撞到顾客,发生意外事故。

    图10
    3.5.3 盘子定位传感器
    盘子定位传感器布置在机械手的轴套内部,其内部设置了凹槽,便于传感器的安放,盘子定位主要通过光电开关进行定位并确定盘子中心进行端菜过程 。如图11


    图11

    3.6 机器人整体程序的设计框图及编写
    初始化,首先通过单片机(MCU)对液晶屏及红外接收初始化清零,遥控器输入设定桌号,经红外接收头将信号输入到MCU中,并显示在液晶屏上 。同上述所述,用遥控器启动机器人 。单片机整体控制如图12。

    图12
    机器人启动以后,机器人开始沿着黑色胶带铺设好的轨迹行走。循迹主要依托于对称排布与机器人底部的八个循迹传感器,其排布左右各四个。不同位置不同数目的循迹传感器检测到黑线具有不同的返回值,其将电信号转换成数字信号输入到上述MCU中。上述MCU根据上述不同的返回值,利用步进电机驱动器控制步进电机相应的转角来保证机器人沿着黑线中心行走。如图13

    图13
    当上述循迹传感器有一侧四个循迹传感器同时检测到时,如果是输入行号或列号,机器人执行90度转外。否则上述MCU只进行计数 。
    为保证机器人到达桌位能够停下来,在机器人底盘加设第九个循迹传感器。当九个同时检测到黑线时,机器人到达指定桌位。如图14

    图14
    在机器人到达指定桌位以后,直流电机继电器断开,机器人停止行走。液压电机继电器打开,液压泵开始工作。
    液压机械手通过六个继电器模块控制电磁阀依次动作保证液压机械手的整个动作。
    为保证机械手能准确抓到盘子,在机械手上设有红外定位传感器。如果菜盘位于上述液压机械手下方,现寻找中心在抓取菜盘 。然后再依次抓取所有的盘子。如果盘子不在机械手下方,则先寻找盘子,在定位抓取。机械手寻找盘子旋转由步进电机控制 ,如图15。机械手动作顺序如表2。

    图15
    动作顺序 YA1 YA2 YA3 YA4 YA6 YA7 YA8 YA9 YA10 YA11 YA12 YA13
    电机启动 +
    手抓张开 + +
    手臂下降 + +
    手抓抓取盘子 + +
    手臂上升 + +
    手臂前伸 + +
    手臂下降 + +
    手抓张开 + +
    手臂上升 + +
    手抓收合 + +
    泵卸载

    表2

    当所有盘子都抓取结束时,机器人通过步进电机控制180度掉头。
    回函数主要控制其按原路返回。如果有一侧四个循迹传感器同时检测到黑线时机器人90度转弯。但第一测到机器人转弯但不计数。如图16。

    图16
    在整个全过程中如果避障传感器测到障碍物,上述继电器模块直流电机继电器立即断开,机器人停止行走,待障碍物移开时机器人可继续行走。如图17。
    图17
    机器人整体程序如下:
    /****************************************************************/
    /****************************************************************/
    /*主控芯片 :STC89C52 */
    /* 步进电机启停设有加减速。正常10kHZ , 减速5kHZ */
    /***************************************************************/
    /* 红外遥控器控制 :1、控制步进(绿)和直流(蓝)电机启动 */
    /*(液晶配合显示) 2、数字按键:确定餐桌序号 */
    /*此程序是针对uPD6121系列遥控器的取码程序,解码值在Im[2]中,当IrOK=1时解码有效*/
    /***************************************************************/
    /*机械手控制:电磁阀继电器:0--开(灯亮),1--闭合

    /*****************************/
    /*****************************/
    #include < reg52.h >
    #include < intrins.h >
    //#include"inf-test.h"
    /**********函数声明***********/
    #define uint unsigned int
    #define uchar unsigned char
    /******纠偏部分*******/
    void delayms(uint x);
    void jiupian();
    void motor_bj_left();
    void motor_bj_right();
    void time2_init();
    void maichong();
    void speed();
    void goahead();
    void comeback();
    /******避障部分*******/
    void bizhang();
    /******红外控制部分******/
    //sfr P2M0 = 0X96;
    //sfr P2M1 = 0X95;
    #define uchar unsigned char
    #define Imax 14000
    #define Imin 8000
    #define Inum1 1450
    #define Inum2 700
    #define Inum3 3000
    void init_inf();

    void control();
    void site();
    void inf_address();
    /******lcd显示部分******/
    void delay1(uint x);
    void write_com(uchar com);
    void write_data(uchar dat);
    void init();
    /******机械手部分*******/
    void fa_cz_up_zhua();
    void fa_cz_down_zhua();
    void fa_cz_up_fang();
    void fa_cz_down_fang();
    void fa_sp_shen();
    void fa_sp_suo();
    void fa_hand_jiance();
    void fa_hand_fang();
    void fa_hand_zhua();
    void fa_hand_init();
    void hand_start();
    void find();
    void find_1();
    void find_2();
    void qucai();
    void hand_stop();
    void goback();
    void jixieshou();
    /*********位定义************/
    /******纠偏部分*******/
    sbit PWM1=P2^0;
    sbit PWM2=P2^1;
    sbit graysensor_1=P2^3;
    /******避障部分*******/
    sbit zhangai=P3^0;
    /******机械手部分*******/
    sbit fa_cz1=P0^0;
    sbit fa_cz2=P0^2;
    sbit fa_sp1=P0^3;
    sbit fa_sp2=P0^4;
    sbit fa_hand1=P0^5;
    sbit fa_hand2=P0^6;
    sbit JXS_ZKG=P2^4;
    sbit handsingle=P3^3;
    /******红外控制部分******/
    sbit Relay = P2^5 ;
    sbit hongwai=P3^2;
    sbit Relay_bj=P2^2;
    /******定义变量和数组*******/
    /******纠偏部分*******/
    unsigned long int i=0;
    unsigned long int n;
    unsigned long int count1;
    unsigned long int count2;
    uint time;
    uchar graysensor;
    uchar k=0;
    //sfr T2MOD=0xc9;
    /******机械手部分*******/
    unsigned long int c;
    uchar d=0;
    uchar h=0;
    uchar l=0;
    uchar aa=0;
    uchar bb=0;
    /******红外控制部分******/
    uchar Im[4] = {0x00,0x00,0x00,0x00};
    uchar show[2]={0,0};
    uchar f;
    uchar IrOK;
    unsigned long Tc;
    unsigned long m;
    uchar t=0;
    uchar r;
    uchar s;
    static uchar u;
    static uchar v;
    /******lcd显示部分******/
    uchar code table_num1[]={11,12,21,22};
    uchar code table_num2[]={11,12,13,21,22,23,31,32,33};
    uchar code table1[]="0123456789";
    uchar code xuyan1[]="welcome to R&R";
    uchar code xuyan2[]="REBOT RESTAURANT";
    sbit rs=P3^5;
    sbit lcden=P3^4;
    sbit dula=P2^6;
    sbit wela=P2^7;
    /*此程序是针对uPD6121系列遥控器的取码程序,解码值在Im[2]中,当IrOK=1时解码有效*/
    /*****************************/
    /* 红外遥控器控制 */
    /*****************************/
    void init_inf()
    {
    m = 0;
    f = 0;
    EA = 1;
    IT0 = 1;
    EX0 = 1;
    TMOD = 0x11;
    TH0 = 0;
    TL0 = 0;
    TR0 = 1;
    }
    /*****外部中断解码程序******/
    void intersvr0(void) interrupt 0 using 1
    {
    Tc = TH0 * 256 + TL0;
    TH0 = 0;
    TL0 = 0;
    if((Tc > Imin) && (Tc < Imax))
    {
    m = 0;
    f = 1;
    return;
    }
    if(f == 1)
    {
    if(Tc > Inum1 && Tc < Inum3)
    {
    Im[m / 8] = Im[m / 8] >> 1 | 0x80;
    m++;
    }
    if(Tc > Inum2 && Tc < Inum1)
    {
    Im[m / 8] = Im[m / 8] >> 1;
    m++;
    }
    if(m == 32)
    {
    m = 0;
    f = 0;
    if(Im[2] ==~ Im[3])
    {
    IrOK =1 ;
    }
    else
    {
    IrOK = 0;
    }
    }
    }
    }
    /***红外接收处理函数与显示***/
    void delay1(uint x)
    {
    uint a,b;
    for(a=x;a>0;a--)
    for(b=10;b>0;b--);
    }
    void write_com(uchar com)
    {
    P0=com;
    rs=0;
    lcden=0;
    delay1(10);
    lcden=1;
    delay1(10);
    lcden=0;
    }
    void write_data(uchar dat)
    {
    P0=dat;
    rs=1;
    lcden=0;
    delay1(10);
    lcden=1;
    delay1(10);
    lcden=0;
    }

    void init()
    {
    dula=0;
    wela=0;
    write_com(0x38);
    delay1(20);
    write_com(0x0f);
    delay1(20);
    write_com(0x06);
    delay1(20);
    write_com(0x01);
    delay1(20);
    }
    void lcd()
    {
    uchar e;

    write_com(0x80+17);
    delay1(20);
    for(e=0;e<14;e++)
    {
    write_data(xuyan1[e]);
    delay1(20);
    }

    write_com(0xc0+17);
    delay1(50);
    for(e=0;e<16;e++)
    {
    write_data(xuyan2[e]);
    delay1(40);
    }
    }
    /*指定位置*/
    void site()
    {
    u=(s/10);
    v=(s%10);
    }
    void inf_address()
    {
    if(IrOK == 1)
    {
    switch(Im[2])
    {
    case 0x0c:
    s=table_num1[0];
    write_data(table1[1]);
    break;

    case 0x18:
    s=table_num1[1];
    write_data(table1[2]);
    break;

    case 0x5e:
    s=table_num1[2];
    write_data(table1[3]);
    break;

    case 0x08:
    s=table_num1[3];
    write_data(table1[4]);
    break;

    case 0x1c:
    s=table_num2[4];
    write_data(table1[5]);
    break;

    case 0x5a:
    s=table_num2[5];
    write_data(table1[6]);
    break;

    case 0x42:
    s=table_num2[6];
    write_data(table1[7]);
    break;

    case 0x52:
    s=table_num2[7];
    write_data(table1[8]);
    break;

    case 0x4a:
    s=table_num2[8];
    write_data(table1[9]);
    break;


    case 0x43:
    Relay =~ Relay;
    write_data(table1[0]);
    k=1;
    break;

    case 0x40:
    Relay_bj=~Relay_bj;
    write_data(table1[0]);
    break;
    }
    IrOK = 0;
    }
    site();
    }

    void control(void)
    {
    while(k==0)
    {
    inf_address();
    }
    while((k==1)&&(aa==0))
    {
    jiupian();
    }
    }
    void init_kg()
    {
    JXS_ZKG=1;
    Relay=1;
    Relay_bj=0;
    }
    /**************************/
    /*机械手程序 */
    /**************************/
    void fa_cz_up_zhua()
    {
    fa_cz1=0;
    delayms(8400); //6400
    fa_cz1=1;
    delayms(1);
    }
    void fa_cz_down_zhua()
    {
    fa_cz2=0;
    delayms(6200); //7200 8800 6200
    fa_cz2=1;
    delayms(1);
    }
    void fa_cz_up_fang()
    {
    fa_cz1=0;
    delayms(8400);
    fa_cz1=1;
    delayms(1);
    }
    void fa_cz_down_fang()
    {
    fa_cz2=0;
    delayms(6700); //4700
    fa_cz2=1;
    delayms(1);
    }
    void fa_sp_shen()
    {
    fa_sp1=0;
    delayms(6000); //4700
    fa_sp1=1;
    delayms(1);
    }
    void fa_sp_suo()
    {
    fa_sp2=0;
    delayms(7500);
    fa_sp2=1;
    delayms(1);
    }
    /*手部行程:从完全收缩到完全伸出-----机械手呈现:抓-张-抓(此处只用到上半行程*/
    void fa_hand_jiance()
    {
    fa_hand1=0;
    delayms(1600); //1700
    fa_hand1=1;
    delayms(1);
    }
    void fa_hand_init()
    {
    fa_hand2=0;
    delayms(2700);
    fa_hand2=1;
    delayms(1);
    }

    void fa_hand_fang()
    {
    fa_hand1=0;
    delayms(1100);
    fa_hand1=1;
    delayms(2000);

    }
    void fa_hand_zhua()
    {
    fa_hand2=0;
    delayms(1600); //1650
    fa_hand2=1;
    delayms(2000);
    }
    void qucai()
    {
    i=0;
    d++;
    fa_cz_down_zhua();
    fa_hand_zhua();
    fa_cz_up_zhua();
    delayms(500);
    if(bb==0)
    {
    n=c;
    motor_bj_left();
    i=0;
    }
    delayms(500);
    if(i==0)
    {
    fa_sp_shen();
    fa_cz_down_fang();
    fa_hand_fang();
    fa_cz_up_fang();
    fa_sp_suo();
    }
    EX1=1;
    h=d;
    bb=0;
    }

    void fand_1()
    {
    uint g=0;
    while(handsingle==0)
    {
    n=1;
    motor_bj_right();
    g++;
    }
    if(handsingle==1)
    {
    bb=1;
    if((g>155)||(g=155))
    c=g-155;
    else c=155-g;
    delayms(500);
    n=0;
    count2=20;
    n=170;
    motor_bj_left();
    qucai();
    }
    }
    void find_2()
    {
    n=2560;
    motor_bj_right();
    if(handsingle==0)
    {

    EX1=1;
    n=155;
    motor_bj_right();
    delayms(500);
    if(handsingle==0)
    {
    qucai();
    }
    else
    {
    EX1=1;
    n=(2560-c);
    motor_bj_right();
    }
    }

    }
    void intersvr1() interrupt 2
    {
    c=i+155;
    n=0;
    count2=20;
    EX1=0;
    delayms(20);
    }
    void find()
    {
    EX1=0;
    if((handsingle==0)&&(d==0))
    {
    EX1=0;
    fand_1();
    }
    else
    {
    bb=0;
    find_2();
    }
    }
    void hand_start()
    {
    Relay=1;
    aa=1;
    n=0;
    i=0;
    count2=20;

    EA=0;
    P0=0xff;
    delayms(1000);
    JXS_ZKG=0;
    delayms(1000);
    }
    void hand_stop()
    {
    fa_hand_init();
    JXS_ZKG=1;
    EX1=0;
    if(h==4)
    {
    n=1400;
    motor_bj_right();
    delayms(65);
    }
    else
    {
    n=1720;
    motor_bj_right();
    delayms(2000);
    }

    EA=1;
    n=0;
    i=0;
    count2=20;
    Relay=0;
    r=0;
    t=0;
    aa=0;
    }
    void jixieshou()
    {

    hand_start();
    delayms(1000);
    fa_hand_jiance();
    delayms(500);
    EA=1;
    EX1=1;
    IT1=0;
    while((d!=4)&&(i<2500))
    {
    find();
    }
    if((h==4)||(i>=2500))
    {
    hand_stop();
    }
    }
    /**************************/
    /*纠偏程序 */
    /*****************************/
    void delayms(uint x)
    {
    uint y;
    for(x;x>0;x--)
    for(y=110;y>0;y--);
    }
    void jiupian()
    {
    graysensor=P1;
    switch(graysensor)
    {
    case 0xfe:
    n=321 ;
    motor_bj_right();
    break;
    case 0x7f:
    n=311;
    motor_bj_left();
    break;

    case 0xfc:
    n=243;
    motor_bj_right();
    break;
    case 0x3f:
    n=233;
    motor_bj_left();
    break;

    case 0xf4:
    n=204;
    motor_bj_right();
    break;
    case 0x1f:
    n=194;
    motor_bj_left();
    break;

    case 0xfd:
    n=204;
    motor_bj_right();
    break;
    case 0xbf:
    n=194;
    motor_bj_left();
    break;

    case 0xf9:
    n=170;
    motor_bj_right();
    break;
    case 0x9f:
    n=155;
    motor_bj_left();
    break;

    case 0xfb:
    n=126;
    motor_bj_right();
    break;
    case 0xdf:
    n=116;
    motor_bj_left();
    break;


    case 0xf3:
    n=87;
    motor_bj_right();
    break;
    case 0xcf:

    n=77;
    motor_bj_left();
    break;


    case 0xf7:
    n=48;
    motor_bj_right();
    break;
    case 0xef:
    n=40;
    motor_bj_left();
    break;


    case 0xff:
    {
    delayms(15);
    if((graysensor==0xff)&&(graysensor==1))
    {
    ET2=0;
    TR2=0;
    i=0;
    count2=20;
    n=0;
    time=0;
    Relay=1;
    delayms(1);
    break;
    }
    }
    /** 转弯 **/
    case 0xf0:
    {
    delayms(2);
    if((graysensor==0x00)&&(graysensor_1==0))
    {
    Relay=1;
    _nop_();
    if((r==v)&&(l==0))
    {
    l=1;
    jixieshou();
    break;
    }
    else
    {
    }
    }
    else
    {
    comeback();
    break;
    }
    }
    case 0x0f:
    {
    delayms(2);
    if(graysensor==0x00)
    {
    delayms(2);
    if((graysensor==0x00)&&(graysensor_1==0))
    {
    Relay=1;
    _nop_();
    if((r==v)&&(l==0))
    {
    l=1;
    jixieshou();
    break;
    }
    else
    {
    }

    }
    else
    {
    comeback();
    break;
    }
    }
    else
    {
    goahead();
    break;
    }
    }


    case 0xe0:
    {
    delayms(2);
    _nop_(); //延时一个机器周期
    if((graysensor==0x00)&&(graysensor_1==0))
    {
    Relay=1;

    _nop_();
    if((r==v)&&(l==0))
    {
    l=1;
    jixieshou();
    break;
    }
    else
    {
    }

    }
    else
    {
    comeback();
    break;
    }
    }



    case 0x07:
    {
    delayms(2);
    if(graysensor==0x00)
    {
    delayms(2);
    if((graysensor==0x00)&&(graysensor_1==0))
    {
    Relay=1;
    _nop_();
    if((r==v)&&(l==0))
    {
    l=1;
    jixieshou();
    break;
    }
    else
    {
    }
    }
    else
    {
    comeback();
    break;
    }
    }
    else
    {
    goahead();
    break;
    }
    }

    case 0x00:
    {
    _nop_();
    if((graysensor==0x00)&&(graysensor_1==0))
    {
    Relay=1;
    _nop_();
    if((r==v)&&(l==0))
    {
    l=1;
    jixieshou();
    break;
    }
    else
    {
    break;
    }
    }
    else
    {
    comeback();
    break;
    }
    }
    break;
    }
    bizhang(); //障碍物检测----停止
    }

    void goahead()
    {
    if((graysensor==0x0f)||(graysensor==0x07))
    // if(graysensor==0x0f)
    {
    t++;
    write_data(table1[t]);
    if(t==u)
    {
    Relay=~Relay;
    n=700;
    motor_bj_left();
    delayms(2000);
    Relay=~Relay;
    write_data(table1[5]);
    }
    if(t>u)
    { r=(t-u);
    if(r==v)

    {
    Relay=~Relay;
    n=690;
    motor_bj_left();
    delayms(2000);
    Relay=~Relay;
    write_data(table1[6]);
    }
    }
    if((t!=u)||((t>u)&&(r!=v)))
    {
    delayms(800);
    }
    }
    }

    void comeback()
    {
    if((graysensor==0xf0)||(graysensor==0xe0)||(graysensor==0x00))
    {
    t++;
    write_data(table1[t]);
    if(t==1)
    {
    Relay=~Relay;
    n=690;
    motor_bj_right();
    delayms(50);
    Relay=~Relay;
    write_data(table1[7]);
    }
    if(t>1)
    {
    if(t==(v+1))

    {
    Relay=~Relay;
    n=690;
    motor_bj_right();
    delayms(50);
    Relay=~Relay;
    write_data(table1[8]);
    }
    }
    if((t!=1)||((t>1)&&(t!=(v+1))))
    {
    delayms(800);
    }
    }


    }


    /*步进电机左转*/
    void motor_bj_left()
    {
    PWM2=0;

    time2_init();

    TF2=0;

    if(i==n+1)
    {
    ET2=0;
    }
    }
    /*步进电机右转*/
    void motor_bj_right()
    {
    PWM2=1;
    time2_init();
    TF2=0;
    if(i==n+1)
    {
    ET2=0;
    }
    }
    /******定时器2初始化******/
    void time2_init()
    {
    RCAP2H=0xff;
    RCAP2H=0xf7;
    EA=1;
    ET2=1;
    TR2=1;
    }
    void time2()interrupt 5
    {
    time++;
    maichong();
    }
    void speed()
    {
    if((i<=5)||(i>=(n-5)))
    count1=20,count2=4;
    else
    count1=10,count2=2;
    }
    void maichong()
    {
    if(time>=count1)
    {
    time=0;
    i++;
    }
    if(time<=count2) PWM1=0;
    else PWM1=1;
    speed();
    if(i>n)
    {
    count2=20;
    i=0;
    TR2=0;
    ET2=0;
    }
    }
    /******************************/
    /*避障程序 */
    /****************************/
    void bizhang()
    {
    if(zhangai==0)
    {
    Relay=1;

    Relay_bj=0;
    delayms(5000);
    if(zhangai!=0)
    {
    Relay=0;
    Relay_bj=0;
    }
    }
    }
    /******************************/
    /*主函数 */
    /****************************/
    void main()
    {
    init_kg();
    init();
    lcd();
    delayms(2000);
    init();
    write_com(0x80);
    init_inf();
    control();
    while(1);
    }






    4 智能机器人传菜员的调试及外观优化设计

    4.1 机器人的整体装配
    智能机器人传菜员,水平放置的大齿轮中心部位开有矩形漏斗状孔,大齿轮上表面用螺栓组压装有两个轴承架,轴承架孔内中装有一对滚动轴承,用一对轴承端盖利用螺钉组压紧在轴承孔中,滚动轴承孔中安装有驱动轮支承小轴,驱动轮支承小轴中间装有驱动轮,驱动轮从矩形漏斗状孔中穿透大齿轮下表面与地面接触,用以驱动机器人前进,驱动轮支承小轴的一个端头通过联轴器与装于大齿轮上表面一侧、带制动机构的驱动减速直流电机的轴端相连接。驱动减速直流电机的相对方向上装有可充电锂电池组,以提供电力同时也作为电机的配重使大齿轮转动起来尽量保持平衡。 大齿轮的上表面外缘处利用一组螺栓压装一个爪型吊架,爪型吊架的中心为一枢轴孔,枢轴孔吊挂于高度调节芯轴的一个端部并用一轴端挡圈予以压紧,高度调节芯轴另外一端利用螺纹装于竖轴下端面螺纹孔内并用一锁紧螺母给以锁紧防松,竖轴利用一对圆锥滚子轴承装于轴承安装套内,并利用螺栓将端盖予以压紧,轴承安装套利用定位止口定位于外机壳上盖的下表面中心处,并用法兰螺栓固定于其上,竖轴端头利用方向指示杆上的横销与穿透机壳上表面和载物盘表面的方向指示杆相连接,外机壳的筒状内部配合套装有小齿轮支架圈,对应主动小齿轮中心位置处,在外机壳的上表面吊装有一个方向电机支架,方向电机支架上安装有一个方向控制步进电机,方向控制步进电机通过方向控制轴联轴器与主动小齿轮上装配的小齿轮安装轴相连接,小齿轮支架圈的筒状周边通过从动小齿轮支架另安装有若干个配重小齿轮,配重小齿轮与主动小齿轮均匀分布在机小齿轮支架圈筒状内圆周上,机壳的筒状内部安装有控制电器箱及相关电路,机壳上盖外部装有控制面板箱 。机壳筒状侧面开有调修门,机壳下圈上装有万向脚轮 。
    油箱放在机壳上盖上,油箱盖与油箱焊接好,油箱盖上面安装直流电机,直流电机通过联轴器与齿轮泵连接,油箱盖的另一侧安装压力表、透气塞、电磁阀、调速阀、单向阀、溢流阀,透气塞具备透气及注油功能。将法兰插入中心轴中,用键将法兰与中心轴固定。 带法兰的竖直缸与法兰通过螺栓连接固定。支柱与机壳上盖安装连接,再将餐台与支柱的另一端用螺母拧紧。竖直缸的顶部安装大夹紧板,将水平缸放入大夹紧板内,用螺栓紧固大夹紧板使水平缸固定,大导向架与竖直缸连接固定,放置水平缸自转,将水平缸与小夹紧板连接固定。机械手通过连杆将手爪和定位传感器套连接在一起,手爪的中间孔和连杆连接,定位传感器套和连杆的另一端孔连接,定位传感器套通过螺纹连接与手爪缸的缸杆内螺纹配合,手爪缸作为主体,手爪的顶端孔和支架连接,将支架的四个圆柱插入手爪缸的导向孔中,再用挡板盖住手抓缸的另一端,并将挡板的四个孔套在支架的四个圆柱上,用螺母将其拧紧,保证手抓固定在手爪缸上。将带有机械手爪的手爪缸固定在小夹紧板上并用螺栓连接夹紧。将小导向架安装在水平缸上,小导向架前端开有避障传感器孔,将避障传感器安装在小导向架前端孔中。将油管与手爪缸、溢流阀、竖直缸、水平缸、压力表、油箱、电磁阀、调速阀、单向阀相连,单片机与继电器直流电机、步进电机、避障传感器用导线相连。如图18。




    图18
    4.2 机器人的调试
    机器人的调试也是至关重要的一步,将装配好的机器人通电后,对每一个动作与命令进行测试,从中我们发现了一些问题。1.机器人在沿导引线进行循迹的过程中,有时会发生偏离轨道的情况,通过实际调查与研究,这是由于地面或铺设轨道的纸面不够平整,造成传感器检测发生错误。2.机器人在到达桌位时没有及时地停住,而是继续向前行走,造成此原因是因为着为顶点的轨迹不够宽,当机器人底部的八个传感器检测带黑线时,正前方的第九个传感器已经移出了黑线,至使信号反应不够及时。3.按照正常情况下,机械手在识别盘子时是有两种情况,但当盘子不在机械手正下方时,机器人执行另一种找盘子的程序,此原因是因为机器人在写程序时设定的延时太长引起。
    4.3 机器人的外观优化
    智能机器人传菜员整体功能设计好后,不仅要拥有良好的服务功能,还应该具有赏心悦目的外观 。这样才会给人亲切的感觉,吸引顾客。为此根据机器人的机构特点进行了整体外观的设计。机器人的餐台以下部分设计为一张桌子,通过桌布将行走部分、液压站、竖直缸、单片机、电池等部件遮盖住,液压缸部分设计了一个机器人外型的外壳,主要材料为瓦楞纸,在外壳背面开有后盖,安装时只需将机械手从外壳后盖穿过即可,通过外观设计,可以使机器人栩栩如生,增加机器的美观,使客人对服务及产生兴趣,使餐厅更吸引人。如图19。

    图19
    5 总结
    智能机器人传菜员为机电液相结合的一体化产品。本产品结构简单,系统运行平稳,制造成本低,可以为餐饮行业节省劳动力,解决人力资源短缺的问题。本产品由三大系统组成:机械系统、液压系统、控制系统 。机器人通过机械系统实现行走转弯等功能;通过液压系统实现找盘子、抓盘子,并将盘子送到客人餐桌的功能;通过控制系统实现机器人行走过程中对运动轨迹的分析与检测,以及端菜过程中对盘子的定位,具有反馈精度高,系统运行稳定等优点。本实用新型送餐的全过程无需人为操作,可以自动送餐及返回,实现了送餐过程的全智能化。本产品将会在未来餐饮行业中占据有利市场,具用良好的发展前景。















    参考文献
    [1]赵延年,张奇鹏. 机电一体化系统设计 [M] 北京:机械工业出版社,1996
    [2]张楠 , 何玉成 , 王南.[J].机械设计, 2013, (03), pp.17-20+61.
    [3]唐亚鸣 , 莫静玲 , 杨刚.[J].机械研究与应用, 2011, (03), pp.101-103.
    [4]郑文纬,吴克坚. 机械原理 [M](第七版).高等教育出版社,1996.11.
    [5]洪钟德. 简明机械设计手册 [K] 同济大学出版社,2002.5
    [6]刘世勋 , 刘少军 [J].液压与气动, 1996, (04), pp.3-4.
    [7]Jyh-Hwa,Tzou, Kuo L.Su .[J].Artificial Life and Robtics ,2009,Vol.14(2).pp.252-256Springer.
    [8] Yu Qing-xiao , Yuan Can , Fu Zhuang , Zhao Yan-zheng.[B].International Journal of Advanced Robotic Systems2010InTech.
    [9] Yun Xu Shi.[J].Advanced Materials Research, 2012, Vol.462, pp.743-747CrossRef.
    [10]何立民.单片机应用技术选编.北京:北京航空航天大学出版社.1997.10
    [11]王玉琳 , 王强.[J].电机与控制应用, 2006, (01), pp.53-56+64.
    [12]骆敏舟,杨秀清,梅涛.机器人手爪的研究现状与发展[J].机器人技术与应用,2008 (3) :24一35.
    [13]文怀兴.基于ADAD'IS的夹持机械手虚拟设计及其结构优化田.机械设计与制造,2010 (3) :75一78.
    [14]濮良贵等. 机械设计 [M](第八版). 高等教育出版社,2006.5
    [15]徐海枝.[J].装备制造技术, 2012, (07), pp.127-129.
    [16]吴宗泽. 机械零件设计手册.[K] 机械工业出版社,2004.1
    [17]朱家诚. 机械设计课程设计 [M] 合肥工业大学出版社,2005.7
    [18]陈秀宁. 机械优化设计 [M] 杭州:浙江大学出版社,1991
    [19]应鹏 , 宫晨 , 颜钢锋.[J].现代机械, 2008, (06), pp.14-17






    附录:开题报告
    1. 论文题目
    智能机器人传菜员行走机械结构的设计、控制及制作
    2. 论文结构
    2.1 总体结构的设想 论文的总体结构将做如下安排: 1.综述目前餐饮行业的现状,餐饮行业所反映出来的各方面问题以及现代机械化工业的应用与发展。 2.对机器人的结构特点以及工作原理进行研究及阐述。
    3.对机器人的结构和零部件进行设计、加工、装配。为机器人进行程序的编写及调试,使其按预定的状态运行。
    4.将机械化产品和餐饮行业的服务职能相结合,巧妙的进行优势互补,开发一种能够进行送餐的服务机器人,总结市场上现有送餐机器人的结构特征和特点,对其进行设计与优化。
    2.2 选题研究的目的、意义 随着现代工业化进程的加快,机械自动化成为了社会的一种趋势。在工业生产中已经大量运用机器人完成生产线的加工与制造。随着人们对生活中物质文化需求的增多,机器人也渐渐走入了人们的生活之中。尤其是在餐饮行业,一款良好的送餐机器人可以良好的减缓企业用工的压力。但现在的餐饮行业多是以人力进行工作及送餐,人流量大,工作强度高,对劳动人员的精神及体力无疑是一种严峻的考验;对企业来说,即使花很高的价钱也很难留住劳动人员。但此类服务的技术含量相对较低,大量的雇佣劳动人员又会造成人才的不合理利用,人力资源造成不必要的浪费,而且雇佣人力还会存在着卫生等隐患。如能开发一款以机器人代替人力进行送餐的机械设备,无疑可以减少企业的用工难,工作压力大等问题,对于食品卫生安全方面也会有进一步的保证。企业也可以避免长期花费高价雇佣服务员等费用,对企业来说又是一笔额外的收益。而且以机器人代替人力还会使餐厅成为亮点,吸引顾客,对企业的发展有着良好的市场前景。因此,送餐机器人将会成为未来餐饮行业的必然趋势。
    2.3 主要解决的问题 1.市场上机器人体积比较庞大,工作占用空间也相应增大,不适用于中小型餐厅。
    2.市场上现有送餐机器人不能完成一桌多菜或多桌送餐的过程,技术不成熟。且送餐多为到达指定位置,对于将餐盘端到餐桌功能并未实现。
    3. 市场上现有机器人多为多主动轮结构,因此在转弯时会增大转弯半径,灵活度不够。
    4.市场上现有机器人多为铅酸电池供电,是的机器人质量较大,储电能力不够强,收效甚微。
    2.4 主要工作
    对该机械结构进行总体方案的设计、并着重设计机器人行走机械结构以及端盘机械手的液压系统结构,对其控制结构的总体控制方式进行框架结构的设计。具体如下:
    1. 根据总体方案图,完成绘制系统装配图,并依装配图绘制全套零件图。
    2. 辅助完成依据液压系统图,对液压系统进行制作的过程。
    3. 辅助完成三组传感器安排和设计。
    4. 主要完成该机器人控制程序设计框图。并辅助编制控制程序。
    5. 辅助完成根据设计图纸监控该机器人制造全过程,并实施装配。
    6. 辅助完成对机器人/传感器和控制程序的运动调试。
    2.5 主要创新点
    1.该机器人借鉴独轮机构设计,运动灵活,可以实现原地转弯或调头。
    2.该机器人中心驱动轮的高度位置可调。
    3.该机器人采用了可充电的锂电池供电方便灵活,减轻了机器人的自身重量,而且令电池充电一次可供机器人持续工作一天,可靠性高。
    4.该送餐机器人的端菜过程采用液压系统完成动作,液压系统运动平稳,易于控制,承载能力强。
    5.机械手的旋转通过底部固定大轮子的大齿轮上的支撑架中心轴和与法兰相连的竖直液压缸连接固定。实现了步进电机控制整个机器人的所有旋转,其结构更加简单,控制更加方便,减少了机器人的生产成本。
    6.本机器人可实现对餐盘的自动寻找和自动定位、抓取,并将餐盘自动送至指定餐桌。从开始送餐到送餐结束,全程自主控制,自动化程度较高,超越了现阶段的其他送餐机器人。
    7.本机器人机械手部分采用国际先进的3D打印技术,加工简单方便、材质轻、成本低。
    8.本机器人外形美观,可以吸引顾客,成为餐厅的一大亮点。
    3. 文献综述
    3.1 现有送餐机器人传菜员的定位原理
    目前,服务机器人已非常受欢迎。这项工作的目的是开发一个餐厅服务机器人。此服务可以使移动机器人为餐厅传菜。它也可以显示顾客的桌号。这个机器人可以使这家餐厅的服务效率急剧增加。该移动服务机器人配备了一个“激光定位系统。“激光定位系统可以使移动机器人快速和精确的定位和指导 。此功能可防止机器人偏离正常运行的轨道,当前方有障碍物时,还可以有效地避开障碍物。一个餐厅的服务机器人,它可以适用于提供基本服务,如排序,取送食品,结算等,为客户在机器人餐厅提供便利。在这项研究中,三维坐标定位和基于路标定位算法,使机器人在餐厅有良好的定位精度。光学字符识别(OCR)技术是用来区分不同的地标,独特的表号。高定位精度必须被授予在厨房的桌子,提出了移动机器人定位的基于RFID技术的定位算法。实验结果表明,该算法可以估计机器人的姿势不出错,能够准确无误的执行任务。最后,提出了服务机器人可以在餐厅实现实时自定位 。
    超声波传感器运行可靠、实时性好多个传感器进行组合或与其他传感器配合,通过信息融合可以准确实现测距避障、获取环境信息的功能,因此在移动机器人系统中得到了广泛的应用本系统采用高性能低功耗单片机mega128进行模块化设计。实现了多路超声波测距避障的功能,达到了系统所要求的范围和精度系统上通信接口丰富。可移植性强。有很大的升级空间和组合柔性。可以和上位机进行多层次通信,实现更为复杂的控制功能 。
    3.2 餐厅机器人相关控制部分的设计
    餐厅服务的自主移动机器人控制系统的模块化设计已经完成,并且系统采用分布式控制,主机的控制系统(如计算机模块)通过对各模块的协调和统一的总线协议。控制系统分布在三个模块的功率驱动模块(包括电源管理单元,运动控制单元,驱动单元),传感器模块(各种传感器,等),和计算机控制模块。然后,使用VC++ 6开发的控制系统软件,将软件划分为用户级,决策控制层,传感/相关决策的执行层,和运动。层与层之间的通信标准的物理层和协议层,每层具有高度的可扩展性,用户可以自由地增加用户自己的设备和控制只是按照程序与标准的物理层和协议规范 。
    3.3 智能机器人运行基本原理
    自助餐厅服务机器人通过安装于前端的摄像头获取道路前段景象,识别出循迹线和停止线的位置,通过控制舵机的旋转使循迹线位于摄像头所拍摄图像的中间位置,即机器人的左右轴线正对着循迹线,以确保机器人能够沿着循迹线行驶。为了确保在转弯处机器人能够实现稳定的循迹效果,舵机的旋转角度采用闭环控制。单片机根据识别出的循迹线的位置与图像中间位置的偏差,计算出舵机的角度误差,采用PID控制算法计算控制率,通过驱动芯片控制舵机旋转。
    在就餐人员的就餐区铺置与循迹线相垂直的停止线,当在摄像头所获取的图像中识别出停止线时,机器人则停止行驶10秒钟,并在LCD显示器上进行倒计时显示,以等待就餐人员从机器人的平板托盘中拿下食物,或者将用过的餐具放在机器人的平板托盘上。停止10秒钟后,机器人继续沿着循迹线匀速行驶。
    机器人的行驶功能由后轮的驱动电机控制。为确保机器人匀速、稳定的行驶在循迹线上,驱动电机采用速度闭环控制。采用光电码盘测量驱动电机的旋转速度,与给定速度相比较,得到误差信号,采用PID控制算法计算控制率,通过驱动芯片控制驱动电机的旋转速度,使得机器人无论在空载、满载、爬坡、下坡等状态行进时都能够平稳匀速地行驶。
    由于餐厅的具体布局结构不同,机器人可能运行在斜坡上,为了确保机器人在斜坡上运行时,机器人平板托盘中的食物不会因倾斜而滑落或洒失,与平板托盘相连接的直流电机通过倾角传感器实现位置闭环控制。倾角传感器采用SCA610倾角传感器,倾角传感器贴装在平板托盘上,以检测平板托盘与水平方向的夹角误差,通过PID控制算法计算控制率,通过驱动元件控制与平板托盘相连接的直流电机旋转,以减小平板托盘与水平方向的夹角误差,以确保机器人能够平稳地为就餐人员送取食物和餐具 。
    3.4 轮式机器人国内的发展现状
    国内对于轮式移动机器人的研究起步较晚,大多数研究尚处于某个单项研究阶段,主要以自动引导车辆为主,对于高越障性能机器人系统研究得较少。主要的研究工作有:
    清华大学智能移动机器人于1994年通过鉴定。涉及到五个方面的关键技术:基于地图的全局路径规划技术研究;基于传感器信息的局部路径规划技术研究;路径规划的仿真技术研究;传感技术、信息融合技术研究;智能移动机器人的设计和实现。该机器人是以汽车底招‘为基础,具有避障能力,但缺乏越障能力。
    另外,还有香港城市大学智能设计、自动化及制造研究中心研制的自动导航车和服务机器人。中国科学院沈阳自动化研究所的AGV和防爆机器人。中国科学院自动化所自行设计、制造的全方位移动式机器人视觉导航系统等其中由中国科学院沈阳自动化研究所研制并通过“863”验收的是基十复合结构的非结构环境移动机器人。
    尽管目前我国轮式移动机器人的研究和生产技术发展水平与西方发达国家存在着很大的差距,但从总体看来,我国的机器人技术正从低水平、低质量、满足功能型向高水平、高质量、经济实用型过渡;从仿制仿造向自主开发过渡。各厂家和研究所甚至部分高校都在不断地进行技术投入,采用不同的技术路线,从关键部件和系统上技术创新,基本形成了激烈良性的技术竞技环境 。
    3.5 液压控制技术的相关应用与发展
    随着机械工作精度、响应速度和自动化程度的提高。对液压控制技术提出了更高的要求目前。液控技术不仅用于传统的机械操纵、助力装置。也用于工程机械的模拟加载、转速控制、发动机燃料进给控制。以及车辆主动悬挂装置和制动系统。同时扩展到航空航天和海底作业方面面对如此广泛的应用场合。仅采用液控技术已不能完全满足要求。于是发展机电一体化技术已成为一种必然的趋势进入80年代以来。逐步完善和普及的计算机控制技术和集成传感技术为电子技术和液压技术的结合创造了条件计算机控制在液压控制系统中的应用大大提高了控制精度和工作的可靠。使得以往难以解决的控制难题有了突破的希望近年来电技术的进步(如无槽电机等的产生)出现了一些很紧凑的高响应电控系统。在某些场合(如数控机床及一些机器人)已取代传统的电液伺服阀然而。在功率重量比方面。液压执行器比电磁执行器要高几乎一个数量级;在负载刚性方面。液压马达的开环速度刚性大约为电动机的5倍这些使目前液控系统仍具有一些电控系统本身无法比拟和取代的优势此外。液控系统本身近年来亦有长足的进步。70年代以来各种比例控制系统的发展、高速开关电磁阀和步进电机驱动的数字阀及脉宽调制控制技术、数字增量控制(IDC)型电液伺服系统等。便是液控技术向前发展的标志 。
    电液伺服系统是以电气信号为输入,以液压信号为输出,在系统的输入和输出之间有反馈连接的闭环控制系统。图1为电液伺服系统的结构框图,输入信号通过比较元件与反馈信号进行比较后,得出偏差电信号,由电控器转换为力信号,电一机械转换元件,再把力信号变为位移信号,经液压放大元件放大后,输出具有一定压力和流量的液体,控制液压执行元件运动。检测反馈元件检测被控量或中间量,并反馈回输入端。系统输入信号的功率很小,但系统的输出可以达到很大 。


    3.6 传感器的相关应用与发展
    在保证自动导向车导引精度的前提下,如何构筑一种性能优异、成本低廉的传感器测控系统是自动导向车技术的研究热点和难点。现以普通红外线传感器作为自动导向车信号采集的核心器件,并采用优化阵列式分布,构成了一种功能突出、性能稳定、结构简单、导引准确、价格低廉的光电眼。进而通过系统微处理器的分析和处理,排除了环境干扰,强化了测控功能。使自动导向车获得良好的导引效果.可确保基于此技术的自动导向车具有优越的性价比和实用性 。
    3.7 步进电机的调速方法
    步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为/步距角0),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的,同时可以通过控制脉冲频率来控制机转动的速度和加速度,从而达到调速的目的。步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应川于各种开环控制。现在比较常川的步进电机包括反应式步进电机(VR)、水磁式步进电机(PM) ,混合式步进电机(HB)和单相式步进电机等 。
    对步进电机控制的一个中心问题就是速度调节。即产生一系列频率可调的步进脉冲序列,送到驱动电源,控制电机绕组的轮流通电,实现电机的转动。脉冲序列的产生用微处理器实现,有软件延时和硬件定时两种方法。
    (1)软件延时:通过调用标准的延时子程序来实现。
    (2)硬件定时:假定控制器仍为AT 895 52单片机,晶振频率为12 MH、将AT89552的TO作为定时器使用,设定TO工作在模式1(16位定时/计数器) 。
    3.8 机械手爪的相关研究
    机器人手爪是可以实现类似人手功能的机器人部件,是用来握持工件或工具的重要执行机构之一,既是一个主动感知工作环境信息的感知器和最后执行器,又是一个高度集成的具有感知功能和智能化的机电系统,涉及机构学、仿生学、自动控制、传感器技术、计算机技术、微电子技术、材料学等多个研究领 。
    国内方面,陕西利一技大学文怀兴等人为某设备设计了夹持机械手,驱动电机经过联轴器带动丝杠转动,驱动螺母上下移动,带动手爪张合,实现夹持物体。其手爪运动轨迹为曲线 。
    中国农业大学赵延军 在苹果果袋摘除机械手爪的研究中采用了丝杠的传动方式,带动分离机构的二指张合来摘除果袋。丝杠和滑块为主要运动部件,为了使分离机构在完成相对运动的同时也具有一定的紧凑结构,故将丝杠设计为左右两侧分别为左旋和右旋的一个轴。对文中所介绍的机械手爪具有借鉴意义 。
    手爪的设计要求 是:1.应有足够的夹紧力:除物体的重力外,传送和操作的过程中还会产生惯性力和振动,只有保证足够的夹紧力,被抓物体才不会产生松动或掉落;2.要保证工件的准确定位;3.手指间需保证一定的开闭角,使手爪有足够的开闭范围;4.能适应被抓对象的不同形状、不同被抓部位和被抓数量;5.足够的刚度和强度 。

















    3. 参考文献
    [1]Jyh-Hwa, Tzou , Kuo L.Su .[J].Artificial Life and Robtics ,2009,Vol.14(2).pp.252-256Springer.
    [2] Yu Qing-xiao , Yuan Can , Fu Zhuang , Zhao Yan-zheng.[B].International Journal of Advanced Robotic Systems2010InTech.
    [3]应鹏 , 宫晨 , 颜钢锋.[J].现代机械, 2008, (06), pp.14-17
    [4] Yun Xu Shi.[J].Advanced Materials Research, 2012, Vol.462, pp.743-747CrossRef.
    [5]修春波.[P].CN201110394263.1 2012-05-09.
    [6]李阳.[D].吉林大学 2008.
    [7] 刘世勋 , 刘少军 [J].液压与气动, 1996, (04), pp.3-4.
    [8]徐海枝.[J].装备制造技术, 2012, (07), pp.127-129.
    [9] 罗庆生 , 罗洪坚 , 王耀炼[J].计算机测量与控制, 2003, (10), pp.818-820.
    [10]王志强.[J].天津职业院校联合学报, 2006, (05), pp.14-17.
    [11]王玉琳 , 王强.[J].电机与控制应用, 2006, (01), pp.53-56+64.
    [12]骆敏舟,杨秀清,梅涛.机器人手爪的研究现状与发展[J].机器人技术与应用,2008 (3) :24一35.
    [13]文怀兴.基于ADAD'IS的夹持机械手虚拟设计及其结构优化田.机械设计与制造,2010 (3) :75一78.
    [14]赵延军.基于计算机视觉的苹果果袋图像识别及摘除机械手爪的研究[D].北京:中国农业大学,2006:1一60.
    [15]张楠 , 何玉成 , 王南.[J].机械设计, 2013, (03), pp.17-20+61.
    [16]远国勤.IRB2400/10型机器人末端夹持器的设计及参数优化[C].长春:吉林大学.2007.
    [17]唐亚鸣 , 莫静玲 , 杨刚.[J].机械研究与应用, 2011, (03), pp.101-103.
    ...
文档留言