主页 > 案例大全 > 论文方法介绍-基于手势识别机械手臂运动控制设计

论文方法介绍-基于手势识别机械手臂运动控制设计

2021-04-07 13:20:11

  生活的日新月异也伴随着科技的发展,近几年各种样式多元化的机械人慢慢的映入了群众的视野,这都得益于自动化技术的蓬勃发展,机器与人类一样也到了需要互相沟通互相了解的阶段。那么问题是机械人怎样才能像人与人之间沟通交流不会受到更多的阻碍。这个问题是本文研究的重点,即人机是通过什么样的方式进行交互的。近年来,人们都在想方设法的研究机械怎么才能人性化和简单化,大家都在朝着这个方向努力。传递信息的方式有很多种,我们经常发出的声音、蜜蜂采蜜的过程、当然也有我们所谓的肢体语言。而手势是含有庞大信息量的一种人体语言,天生就给人一种亲切、自然、友好的感觉,这些与生俱来的优势在机器与人之间充当着越来越重要的角色。

  在目前人机的交流方式比较机械化不够灵便。即使是借助外部工具数据手套,交互也达不到便捷自然的层次,而且数据手套比较昂贵。计算机视觉系统特别容易受到光线条件和背景环境的影响,所以我们使用传感器对手部信息进行深度处理来避免误差的出现。为实现机器与人的便捷交互,基于手势识别机械手臂的研究就显得意义重大。

  本文使用Leap Motion传感器作为手势采集设备,并且整个系统的核心就是手势对机械臂的控制。在系统中主要是对手部姿势提取,在此状态下,无需借助任何外部工具,对环境也没什么太多的要求。本文最后是对客户端程序和服务器程序的编写,然后通过试验,验证手势识别机械手臂在实际工作中的可行性和可用性。

  1.1课题的背景及研究意义

  随着时间的流逝、时代的发展,工业在现代的细分领域已经获得了快速蓬勃的发展,而人工智能的出现,大大解放了人们的双手,使得人们不会像以前一样任何的作业都要亲历亲为,而在工业发展中机械手臂的作用是尤为显著的。在工业现场常常会有一些危险,那么机械手臂在其中就发挥着巨大的作用,人们也会越来越依赖它。机械手臂相较于人手来讲,它的行动速度更快,精度更高,效率更高,性能更稳定,完全可以代替人工从事一些单一重复性作业,例如喷漆、点焊、装配和搬运等。不止这些,还有更高级的手势识别机械手臂,也就是通过识别人手的动作特征进一步来操作机器,这些在大大小小的行业愈来愈扮演着更加重要且必不可少的角色,例如微电子行业、汽车行业以及核工业领域都有它们的一席之地,而且都发挥着非常大,不可替代的作用。

  到现在人类对深海和外太空领域都充满着好奇与期待,所以也在不断的探索之中,以及在工业领域,尤其是在核工业和生化工业这两方面的迅猛发展,为此人工远程控制机械手臂让其完成所需的操作,因此手势识别机械手臂逐渐成为了热门课题在人工领域方面。

  近年来自动化技术的发展,机器人技术获得了大家的广泛关注,并且也应用到了生活的方方面面、工业生产等多个领域,且人与机器之间的交互越来越普遍,传统的机器操作单调、流程繁琐,人与机器的交流效率低下,这就对人机交流提出了新的挑战。哑巴会通过手语完成人与人的交流,在道路交通中有交警手势指挥交通,他们都是摆出规定的手势,大家通过学习了解交警手部动作是想要表达什么意思,进而是利用识别手手部的动作而完成工作。手部动作的展示是一种方便、快捷且自然直观的沟通方式,动作相较于语言更具有视觉效果的冲击,给人更深的印象,使人能够快速记忆,手势识别更能得到人们的关注。以人类为识别对象的视觉视觉可以分为人脸识别和指纹识别,对于机器而言,手势控制相对于表情控制更加准确、简单、也更实用。

  手势识别机械手势之所以发展的如此快速,是因为远程操作机械手臂可以代替人类做一些重复且单一的作业,或者是对人类身体会造成伤害更甚至是人类无法达到的环境下进行作业,特别是在有辐射危害、爆炸危险这些研究方面,具体如在生化研究、远程医疗、战地作业等方面、而在太空、深海等一些缺氧且随时会有生命危险等领域进行探测,手势识别控制机械手臂的研究刚好能够克服这些

  问题。通过人工操作干预机械手臂自己长时间自己单一重复的工作,具有更高的准确性和多功能性,做到了多元化功能更丰富,也极大地提高了其纯粹机械手臂智能操作和其作业效率,人工手部与机械手臂的结合最重要的是对人身安全提供了可靠的保障以及对现代化生产方面有着及其重要的意义。

  如今,非自动化机械臂是机器人技术领域中实践中使用最广泛的机械臂,并且几乎存在于所有行业中,包括工业制造,娱乐服务,医疗、军事等领域,慢慢我相信在我们生活中也会接触到这些来服务我们的日常。而现在我们需要做到的就是让机械手臂更能清晰、快速、准确的接受指令,而手势识别控制机械手臂将会更加方便人类。

  1.2国内外发展现状

  1.2.1国外发展现状

  在上个世纪40年代就开始了机械臂方面的研究,最开始是美国的Argonne&Oak Ridge国家实验室发明的一种简易操作的遥控机械操作手,这是机械手臂历史处的开端,在当时是专门用来理具有放射性的化学物质。

  在国外,Hill和Park在1979年提出了给予视觉反馈的机械手臂眼协调操

  控,是利用机器视觉功能为机械手臂末端控制器的运动提供手部状态和空间位置,用这样的方法构成对机械臂完整的闭环控制,然后根据目标物体具体特征,以此来观察目标并且进行运动跟踪,获得了特征值信息之后就可以求出目标物体的深度信息进行抓取。

  德国探索研究机械臂实在20世纪七十年代后,刚开始主要应用于工业制造的研发,具体是在焊接、装料和起重等方面的工作,用来提高工业生产力水平。而机器人产业发展最快速、成本投入最高以及应用范围最广的国家是日本,机械臂能够发展的如此快速的原因,日本发挥着不可或缺的巨大作用。日本人口罕至,但是在工业生产水平当中却领先于世界,这些都离不开极高水准机器人的研发和人们所在各个领域对机器人应用的诉求,拥有全球最多机械臂的地方也是日本,在汽车制造行业和电子消费制造行业当中所属的技术要求是最为成熟且应用最广的。

  可移动机械臂的快速发展是在21世纪之后,在运输、航天和反恐排爆等方面也有广泛应用。

  1.2.2国内发展现状

  (1)在国内,对机械臂的研究起步都相对较晚。但是最近几年,这些研究都受到了重视,大家也都加入了研究机械臂的大家庭中。夏群峰等人针对工厂流水线上机械臂僵硬和操作误差大等问题,故引入了机器视觉系统,工业机械臂完成工件的搬运通过视觉引导来完成作业。机器人技术迅速发展是在近40多年,广泛应用在汽车行业、电子工业、冶金技术、造船等各个领域。机器人的普及不光帮人类提高了工作效率,更重要的是将人们从繁重的工作和危险的工作环境中解放出来。机器人最重要的一部分就是机械手臂。机器人所做的每一个动作大多数都是通过机械手臂来完成。尤其在工业生产中,一个机械手臂就可代替一个人来完成工作。因此,如何对机械手臂的动作进行控制是研究的重点。

  我国最开始的的研究地是哈尔滨工业大学,是计算机系的高材生高文和王双林的杰作,要研究手势识别目标则需要选定它的特征点,我们选取的就是目标边缘的特征值与它与众不同的干扰性差等特点,首先要对链接码进行区分,对不同的多个通道和多阈值滤波进行深度的清理,从中获得能够清楚表达目标物体不变的特征值,最后完成对十几种不同手势的记录和识别。在后来丁国富等人利用手套传输数据,并清楚表达手部姿态的几何关系,然后使用很多不同的角度来描述手部的轮廓,当然还需要通过计算机建立空间模型,在当时就提出了一种新型的手势识别方法,那就是通过BP神经网络来完成。吴江琴等人也提出了一种崭新的手势识别方法,那就是利用隐马尔可夫模型,而他同样是是哈尔滨工业大学的计算机科学与工程系的优秀人才。在这之后又提出了高斯混合模型,相当于对哑巴沟通交流更好的方法就是手语,也就是中国手语识别系统,这套系统的传输途径是通过手套识别输入,精度非常高、训练速度也是屈指可数,在进行试验时它的准确度达到了九十八以上。与此同时清华大学的学者任海兵等人做出了模型参数,是将手部的运动状态信息与人体的肤色信息分析综合之后手势分割,具体的参数是颜色、形状和运动姿态。运用了各种的模型以及高科技技术,主要有动态手势的空间表观、动态时空的规整。

  而在手势识别控制机器人方面的领域,肖南峰在研发中取得了显著的成果,作为华南理工大学的教授提出了仿生技术和特征值获取之后数据的映射,并针对这方面设计实现了仿生机械手的控制系统

  1.3手势识别机械手臂的应用

  手势识别机械手臂在很多行业都有应用,其主要在人类不能或者不能够到达的狭小、危险的环境下进行作业,特别是在生化研究、远程医疗、战地作业等具有空间限制的条件下,太空探索、深海探测等人类随时会发生危险的环境中,对机械手臂进行人工操作的干预,能够极大地提高了作业的准确度以及展示出极高的智能水平。下面介绍几类应用领域:

  1.3.1机器人示教

  机器人示数技术当中就应用到了手势识别技术,机器人能够运动是操作者通过手势控制,将运行过程中的指定位置作为示教点并把示教点信息转换成机器人运动控制指令,完成机器人实教。

  1.3.2医疗行业

  将手势识别技术应用到医疗行业。通过手势控制医疗康复机器人,并和患者一起进行康复训练,并且能够对训练效果进行记录和评估;此外,还可以通过手势远程控制手术机器人实施远程手术等。

  1.3.3工业、航空领域应用

  工业装配。在一些特殊的装配场合,操作者通过手势控制装配机器人进行装配工作。

  航空领域的应用。空间站航内宇航员通过手势控制舱外机器人,能够代替或协助宇航航进行舱外作业,有效降低;额宇航员在空间站任务的危险性和困难性。

  1.4研究内容和章节安排

  1.4.1主要研究内容

  (1)以单片机为核心,设计手势识别机械手臂的应用程序。Arduino开发板是本项目的核心硬件,完成本系统需要对Arduino进行二次开发,Arduino是一款开源电子平台,它具有便捷灵活、方便上手的优点。它的优越性在二次开发过程中是不可替代的。

  (2)设计硬件电路。学习单片机编程语言。通过传感器与APDS-9960模块配合实现对手势的识别以及机械臂运动路径的规划。在进行手势识别过程中,利用手势传感器对机械臂下达指令,使机械臂只对手势指令进行操作。最后实现机械臂对于所有不同手势的识别。

  1.4.2章节安排

  本文通过对单片机传感器、驱动模块等相关知识进行手势识别机械手臂运动控制的设计,设计分为6章进行。

  第1章为绪论,阐述了课题的研究背景意义,概述了手势识别的应用方向,对该主题的研究现状及国内外相关技术,最后对本文的主要研究内容和结构进行了研究。

  第2章为总体规划手势识别机械手臂的原理介绍和设计方案。

  第3章为系统的硬件设计,其中主要包括单片机电路如何连接,光电传感器原理的介绍和电机驱动电路图的展示等主要内容。

  第4章为系统的软件设计,主要介绍的是机械臂控制系统组成。

  第5章为系统的调试,确保机械手臂能识别手势完成作业。

  第6章是对本论文所有知识点的总述,并提出对未来的期许与展望。

  2系统结构设计与硬件选型

  本章节主要是对系统的结构进行设计、硬件选择以及运动学分析。系统设计分为:系统功能需求分析、手势识别机械手臂的设计。硬件选型主要是主控制板、机械手臂的模块、手势识别模块的硬件选择与搭配。

  2.1系统整体结构设计

  2.1.1功能需求

  在比较危险人类难以触碰的环境中或者比较单一重复的工作,例如在高温高压的房子,反恐排爆的情况下,人类在此种环境中长期进行作业往往会受到伤害,这就需要机器进入,但却很难精准、自主的进行工作,只能由人来远程操控。

  本论文中设计的基于手势识别机械手臂运控控制系统,主要用于重复工作或危险环境下的远程操作,在环境允许的情况下,进行远距离较为精确的抓取作业。因此,本设计的具体功能要求有:

  机械臂具有一定数量的自由度,关节部位要足够灵活,才能实现多个角度的灵活转动;机械手臂应该具有一定的抓取力度,手爪部位需要具有足够的摩擦力,才能完成钻取任务。

  手势识别部分要有足够的精准度,在完成小部件的抓取任务中,较高的精准度是必须的;还要有实时的反应能力,不能有延迟,这样才能够将操作者的手部动作快速的映射到机械臂上。

  系统应当具备视频发送和接受模块,车体上要有摄像头,及时发送手势的指令更准确完成作业。

  2.1.2系统整体设计

  本系统主要采用手势传感模块,利用相机和红外传感器捕捉操控者的手部运动轨迹。PC上的Processing调用Leap Motion软件进行手部动作的分析处理,并转化为舵机控制指令,利用WiFi传递到Arduino主控板,从而实现机械臂的运动。控制流程图如图2.1所示。

  →↓

  ↓

  ↓

  ↓

  →

  →↓

  图2.1手势识别机械臂的控制流程图

  根据功能需求,最终确定出系统这题的设计方案如图2.2所示。

  ↓

  ↓

  ←→

  ↓

  图2.2系统整体设计方案框图

  确定好系统的整体设计方案后,就需要标定系统的具体参数指标,如表2.1所示。

  机械臂模块重量1.3Kg

  材料硬铝合金

  臂长大臂20cm、小臂15cm

  自由度六个自由度

  抓举力度1Kg

  关节转动范围0°-180°

  手爪张开范围0°-180°

  电池续航时长3h

  表2.1系统具体参数指标

  2.2机械臂结构设计与硬件选型

  2.2.1机械臂结构设计

  本设计是通过手势识别而控制机械臂运动,从而实现机械臂的人机交互。机械臂还需要一定的自由度,才能够完成机械臂整体的转动、大小臂的升降、手腕的转动和机械爪的张合,进而模仿人手臂的动作。

  关节式机械臂自由度多、而且运动灵活、能够完成各种转动、张合、抬降等动作。所以关节式机械臂更适合在本系统中应用。

  机械臂的底盘处放置了一个舵机,类似人的肩关节,用于实现整个机械臂水平方向的180度转动。上面分别放置了4个舵机,模仿人的胳膊轴、手腕和手爪动作。手势识别机械臂整体如图2.3所示,机械臂产品结构如图2.4所示。

  图2.3机械臂整体图

  图2.4机械臂产品结构

  图2.3机械臂整体图

  图2.4机械臂产品结构

  2.2.2机械臂的硬件选型

  机械臂的上舵机间的连接部分是采用的1.5mm厚、20mm宽的硬铝片,硬铝片有着较强的硬度和较轻的质量,比较方便实惠且价格也较实惠此。

  舵机采用的是金属齿数码舵机(型号为TBS2701),该数码舵机的功能非常多,主要包含反应快、扭力大、角度精确、不抖舵、还有堵转保护,还能够让舵机不在抖舵、防止舵机出现堵转烧坏现象。舵机实物如图2.5所示。

  图2.5舵机实物图

  该舵机具体的性能特点

  (1)进口齿轮:金属,无杂质,更坚硬,精度更高;

  (2)双滚珠轴承;防堵,低噪音;

  (3)金属输出轴:25T输出齿轮外径6MM内径3MM;

  (4)数字舵机:角度精确,反应只需零点几秒,大扭力,双轴承,内阻小,不堵舵、堵转保护功能。

  2.2.3机械臂运动学分析

  本设计中采用了固定结构类型多自由度机械臂,需要用正运动学方法进行分

  析。只要使用者提供出手指的位移值,还需运用运动学方程,求出手指光线在摄影机前位移的方向和光影面积的大小,系统就可控制机械手臂运动的方向与姿势。每一个位置,都与机械手臂中的六关节特定位置的姿态相对应。

  根据本设计中六自由度机械手臂,采用坐标参数法,对结构图中的各个关节部位分别建立坐标系,从而运算该模型的矩阵变换,最后进行运动学的分析和相关运算。

  当给手势识别机械手臂孔子系统上电后,机械臂立即进入开始运动阶段(底座、大臂、小臂、手腕、手爪在同一条直线上且垂直于地面),在此状态下机械手臂各个关节的角度位置分别为水平90°。在此时机械臂开始接收Leap Motion上的手势控制的数据。经过多次的试验可以知道,当操作者的手掌与Leap Motion上表面平行且进入到其正上方20cm左右时,此时机械手臂的位置与开始运动状态的位置重合时,当手开始有动作时,机械臂也开始跟着做出相对应的动作。

  通过上述的简述的基础上,采用标准的参数法建模:

  (1)在底座水平面上构建一个基底的坐标系,要求与地面相对静止,由其原点指向机械臂作为坐标轴水平的方向,水平向外的方向,竖直向上的方向。机械手臂相互关联、相互牵制、相互作用,底座、大臂、与手爪方向一致。

  (2)根据标准参数法进行建模后,可以知道它们的六支连杆活动的角度范围都是0°~180°。

  (3)根据所得参数,再结合齐次变换矩阵得公式,从而能够运算出任意相邻连杆间坐标系的变换阵,就可以得出本机械臂所在空间的坐标系其次变换。

  (4)本设计中机械手臂的机械爪的位置姿态矩阵和基底坐标之间的相互转换。

  将给出的具体参数代入公式中就可得到机械爪的位置姿态矩阵相对于基底坐标系的变换阵。从初始状态到任意一个结束状态,六个舵机的角度分别进行了位移差,从而计算出机械手臂的机械爪位移的具体结果,其结果中,最后一列数据前三的值,分别是机械爪的所属坐标系的原点处于结束位置时,相对于底层在三维坐标系的三个方向上的位移量。需要指出机械爪在基底坐标系中的位置由腕关节、小臂、和大臂多决定的,靠近末端的两个转动关节是用来改变机械爪的姿态,而不改变他的位置。

  2.3控制模块与通信模块硬件选型

  2.3.1控制模块

  基于单片机系统开发的Arduino多功能控制板,功能多样、价格低廉、开发性强,因此广泛应用于多数控制系统当中。本设计中采用的控制模块就是Arduino控制板,其主控芯片为Atmel Mega328,实物如图所示。

  图2.6控制板与芯片实物图

  表2.1中为该Arduino多功能控制板的相关参数,在本设计中Arduino控制板负责控制机械臂。

  控制板Arduino控制板

  主控芯片Atmel Mega328

  开源代码完全开源

  PWM舵机6路接口

  总线舵机2路

  控制方式手柄/手机APP/电脑

  调试方式PC图形化

  代码编程

  脱机运行代码编程

  稳压模块板载稳压

  动作存储无

  拓展接口有

  低压报警支持

  表2.1 Arduinoban6相关参数

  Arduino主要特点为:

  (1)具有串口的切换功能;

  (2)扩展性强;

  (3)有短路保护;

  (4)可接多种类型传感器

  2.3.2通信模块

  手势识别机械手控制使用APDS-9960模块,APDS-9960光学模块,集成的红外LED和用于检测器的接近传感器,以及提供与I2C接口和所有程序兼容的环境亮度传感器。为环境提供用于色彩测量的照明设备,接近无接触手势的检测和识别。借助RGB和手势传感器,您可以控制计算机,整体,机器人,可应用环境光及RGB色彩感应、接近检测、手势检测中。并支持识别手势向上,向下,向左,向右,靠近和远离它们的运动;您还可以显示对象的坐标,对象的大小和对象的亮度,确定约20厘米的距离,快速响应,快速识别,高度了解以及为电池供电的低功耗;串行配置模块的参数(例如,确定距离,灵敏度等)。模块的尺寸最小(宽14.5*16*2.8毫米),可以方便地焊接到焊接线,焊接针或直接连接到PCB上插入高价值的产品中;带部门的模块对于用户来说尤其困难,通过IO识别结果,将输出和串行端口映射,以便输出形式的顺序识别结果,用户不需要太多复杂的传感器感应计算,就可以接受conf寄存器urats,校准,我的音调,XiaoYan,PCB我的音调使其工作繁琐,减少开发时间,显着中断产品开发周期,负担得起的51微控制器,arduino,STM等待开发,串行通信端口兼容的销售最多的微控制器。控制继电器,LED,可控硅等

  手势控制机器人手臂控制电路使用W5500网络模块。该模块是集成到TCP/IP协议栈中的以太网模块,不需要编写用于实现TCP/IP协议的基本以太网代码,它可以为单片系统提供更方便的连接,支持10/100mbps的传输速率,还支持休眠的网络激动。本设计中,Leap Motion捕捉到手势动作的数据,经过PC的上机位处理,通过转换芯片W5500和WiFi发射器,释放到Arduino控制板上,进而完成手势动作对机械臂的控制。

  2.4本章小结

  本主要介绍了手势识别机械手臂控制系统的结构设计、硬件选型以及运动学分析。并在符合设计要求的基础上,选择性能更加良好的舵机、电机、控制板和无线通信芯片等。

  3系统的硬件设计

  本章节主要介绍了系统硬件的重要组成部分,当机械手臂的外形结构设计完成和控制模块选择完毕后,就进入了核心部分。主控系统芯片、单片机电路的设计以及处理系统,是手势识别机械手臂的成功作业最重要的一部分。

  3.1系统的硬件组成

  系统选择主控芯片为Atmel Mega328,LeapMotion通过无线蓝牙与控制器相互连接进行通讯,传输手势信息;具有六个自由度的机械臂由六个自由度和六个转向机的运动控制,并且在控制器输出处的六个PWM信号分别控制六个转向机的旋转。

  具有六个自由度的机械臂模仿人的手的结构,包括肩膀,肘部,腕部的运动和旋转,因此能够模拟出人类手臂的各种姿势,起重夹取装置模拟的是人的手部抓取动作。

  机械臂由六个伺服转向机构和一个铝合金支架组成。转向机可以基于等于零的PWM信号的大小相对于相应的角度旋转,然后精确停止。控制系统将从LeapMotion传感器提取的手的坐标转换为零,从而控制机械手的各个关节的运动和位置。由于控制机械臂的伺服转向机的运动,该编程可以轻松地在机械臂的位置和转向齿轮的角度上投射信息,从而可以执行机械臂随机械臂的运动而具有的功能并具有更高的精度,同时显着简化控制系统设计提高了控制系统的稳定性。

  3.2单片机电路设计

  3.2.1单片机功能描述

  微控制器是集成电路芯片,这是一种超大集成电路技术人员,能够处理中央处理器,随机存取存储器,仅I/O,侵权存储器和中断系统,计时器/计数器功能(所有其他功能都可以显示电路驱动器),有广泛的电路模块化,模拟器多路复用器,电路的A/D转换器)集成件,根据Dan census分布的跟踪图像进行编译:微计算机系统得到了些微改进,该行业在行业中得到了广泛的应用。从1980年代开始,从当时的4位和8位单位计算机开始,目前它们已切换到高速单充电器300M。

  单片微控制器,也称为简单微控制器,不是具有逻辑功能的芯片,而是将计算机系统集成到芯片上的芯片。相当于一台微型计算机,与一台计算机相比,它只有一个输入/输出设备。简而言之:芯片变成了计算机。它体积小,重量轻且价格便宜,为培训,应用和开发提供了便利的条件。

  3.2.2单片机处理系统

  本设计选用的是Arduino二次开发板。Arduino是一个单片机系统,核心是

  ATMEGA系列的单独编译器可以安装某些设备,然后安装在印刷电路板上,可以独立执行特定设计的某些功能。单板arduino可能与寄存器的硬件结构和设计没有任何关系,只是知道其端口如何工作。下图3.1是单片机Atmel Mega328的处理系统:

  单片机处理系统

  图3.1单片机处理系统

  3.3光电传感器模块

  3.3.1光敏传感器模块

  光阻模块对周围的照明设备最敏感,通常用于检测环境中的光亮度,从而导致诸如单个或中继模块之类的模块。本设计模块成功识别是判断明暗空间的比例,利用手部在光敏传感器上面在被扫描的世界范围内扫描的阴影决定了手向哪个方向移动,而当环境的亮度未达到阈值时,模块在DO输出处输出高电平,而当环境的亮度超过阈值时模块在DO输出处输出低电平;DO的输出侧也可以直接与整体块相关,整体块使用整体块确定高低水平,从而确定环境照明的变化;DO导出端可以直接控制存储中继模块,从而可以创建光控开关。可以使用AD转换将小板连接到AD模块,并且可以获得更适合环境的数值。

  3.3.2红外传感器模块

  当有模块障碍物检测信号时,绿色电路会在绿色照明水平下发出信号,同时在端口外部继续输出弱信号,模块的检测距离为2-30 cm,检测角度为35°,可调电位器的检测距离为常规电位器顺时针方向,检测距离;逆时针检查缩小的距离。传感器会主动检测红外辐射,因此物体的速度和形状是检测距离的关键。在最短距离处检测到的黑人最多,而白人则最多。小物体位于很短的距离,大物体位于大物体上。传出传感器模块的输出端口可以直接连接到IO单元,也可以直接在5V继电器上进行控制。连接方式:VCC

  3.4本章小结

  本小结主要设计了机械手臂的硬件系统,其中包括传感器模块、核心控制模块、机械臂运动原理和逻辑。为机械臂软件系统部分作下铺垫,提供编程的理论依据。

  4系统的软件设计

  本章节主要介绍了关于手势识别程序软件的程序设计。当具有了手势识别传感器和六自由度的机械臂、无线WiFi信息传递的模块以及核心主控Arduino单片机这些全部硬件,之后就是利用对应的软件对机械手臂的控制进行程序代码的设计,从而完成动态手势动作对机械手臂的无线控制。

  4.1软件设计的流程

  目前,STC89C52单片机应用最为广泛,主要能够进行汇编语言和C语言这两种语言的编写,本设计采用的编程语言为C语言[15]。该方案的模块化结构可进行设计,使系统容易摆脱的软件和优化,也使别人理解和阅读系统编程。因此,为使流程更加直观,更容易理解软件设计,就要用模块化结构来包装软件结构。机械手臂的主程序流程图如图4.1所示。

  ↓

  ↓

  ↓

  ↓否

  ↓

  ↓

  图4.1主程序设计流程图

  4.2手势识别程序设计

  4.2.1 Processing手势程序

  上机位采用的是Processing程序软件,因为它有着非常强大的人机交互的方式与编辑图形的能力和简易、便捷实用的程序编辑的界面。该设计中Processing

  程序软件选择的是Java语言环境,在程序中通过导入Leap MotionSDK开发包中与手部动态操作有关的库函数devoidplus leapmotion和其它以太网函数包processing net,都是用于手势数据的获取和手部动态姿势控制数据的无线传输。相关程序如图4.2所示。

  1 import Processing。net*;//以太网库函数

  2 import de.voidplus.leapmotion.*;//Leap Motion库函数

  3 int port=10002;//端口号

  4 Server server;//新建服务器对象

  5 LeapMotion Leap;//新建手势控制对象

  图4.2两个重要的库函数

  每一台电脑都拥有65536个端口,而从1-1023号端口都含有其特别的意义和固定专一的用途所以只能使用1023以后的端口,本设计中所用到的是10002号的端口。是利用W5500芯片和WiFi信号发射器完成Processing和Arduino之间的以太网信号通讯,信息通过套接字(Socket)编写程序的方式来实现,而Socket是用来描述IP地址和端口的程序。

  当以上的连接建好之后,那么就需要建立一个在PC端的动态手势识别的控制界面,并要分别对服务器所支持的对象serve和动态手势控制对象leap状态进行初始化,服务器对其进行初始化后,其所使用的地址就是本机所在IPV4地址,具体的程序如图4.3所示。

  //创建PC端的动态手势控制界面

  void setup()

  {

  size(800,500,P3D);//形成一个800*500mm的手势操作界面

  Background(255);

  noStroke();

  Fill(50);

  textFont(createFont(“SanSerif”,16));

  Server=new Server(this,port);//初始化状态,本机的IP地址就是服务端的地址

  Leap=new LeapMotion(this);//初始化手势控制对象

  }

  图4.3创建控制界面并初始化对象

  当动态手势控制所支撑的对象初始化完成之后,那么摄像头就需要提取所需要动态手势相对应的特征值。就需要对手部重要的关键点进行定位跟踪,通过对不同手势状态下机械手臂的不同运动状态下的各种的运动数据进行提取和分析,把获取到的数值进行深度分析进而可以用来控制机械手臂的关节与爪的运动。在该设计中,则需要获取左手或者右手的手掌掌心的骨骼点、大拇指指尖的骨骼点、食指指尖的骨骼点,一部分的程序如图4.4所示。

  Hand.draw();

  PVector hand_position=hand.getPosition();//掌心位置特征值

  PVector Thumb=null,Inder=null;//大拇指和食指特征值

  Thumb=hand.getThumb().getPosition();//大拇指指尖位置

  Index=hand.getIndexFinger().getPosition();//食指指尖位置

  Float dir=hand.getRoll();//掌心方向特征值

  Float dist=dist(Thumb.x,Thumb.y,Thumb.z,Index.x,Index.y,Index.z);

  图4.4相应特征值的获取

  本设计中所需的机械手臂上一共拥有六个舵机,即有六个自由度,因此Processing程序中需要读取动态手势信息当中的六个信息数据,之后就可以实现对六个舵机的分别控制。所需要获得读取的六个手势的数据分别为:手掌掌心的骨骼点在X轴方向上所对应的数值、手掌掌心的骨骼点在Y轴上所对应的数值、手掌掌心的骨骼点在Z轴上所对应的数值、手掌掌心的骨骼点顺时针所转动的角度值和逆时针转动的数值、食指指尖和大拇指指尖这两个点在空间当中距离的数值。获取到这些数据之后,然后通过map()函数将距离值、坐标值以及转动的角度值,将这些信息全部转化为0-180范围的数值。以手掌掌心骨骼点所对应的坐标值为例,相关的数值转化的程序如图4.5所示。

  if(hand_position.x<-300)//x坐标值小于-30cm

  {

  hand_x=0;

  }

  Else if(hand_position.x>=300)//x坐标值大于30cm

  {

  hand_x=180;

  }

  else//x坐标值在-30cm与30cm之间

  {

  hand_x=map(hand_position.x,-300,300,0,180);

  //坐标值到舵机1所对角之间的映射

  }

  图4.5手掌掌心骨骼点的X坐标的处理

  在使用者的手部动态动作实时反射到摄像头之后映射到机械手臂的控制的过程当中,map()函数在其中扮演了特别重要的角色,在六个动作中都有用到。本设计之中map()函数所支持的功能就是:将X、Y、Z轴正负的六个方向上的运动范围、手腕关节的顺势和逆时针所运动的角度范围、以及大拇指和食指间的张合距离范围,依次线性的映射为所对应的舵机的转动角度的范围值(0-180)。

  4.2.2 Arduino舵机控制程序

  当上机位Processing软件端口的程序准备完成后,就需要对客户端ArduinoIDE进行所需要对应程序的编写。首先需要的是将计算机作为一个服务器,之后建立对应Processing所需的端口号,然后新建一个所需以太网的客户端的对象,并且对于W5500的片选、复选端口、六个舵机信号线具体分配的IO口,电路就是根据这个进行连接的。

  定义好电路所需的各个模块端口号,之后建立客户端对象,就需要对客户端的对象进行初始化,当服务器准备就绪后,就会向其发送已经准备好的状态信息。之后还需要将新的舵机对象与实际的舵机建立连接。

  在上机位的软件Processing中,已将手部所需要的六个骨骼点运动的范围映射在0-180的数据之内。只需要将这些数值信息转化为同等数值的角度。

  另外,为消除Processing中数值因为一些其他原因带来影响,因此将手部信息的六个数据,对应传递到下机位的Arduino当中,并且将六个控制舵机角度的数值变为绝对值。以手掌的骨骼点在X轴上所对应的坐标为例,数值处理程序如图4.6所示。

  char buffer[5];

  client.readbytes(buffer,5);

  Int hand_x=buffer[0];

  If(hand_x<0)

  {

  hand_x=abs(buffer[0]);

  }

  else

  {

  hand_x=bruffer[0];

  }

  图4.6单个手势数据传递

  4.4本章小结

  本章在完成硬件选型的基础上,对整个控制系统的部分程序进行了编写与实现。首先介绍了系统的软件设计流程,然年后想详细描述了手势识别机械手臂上机位Processing中的手势数据处理程序和下机位的Arduino中的舵机控制程序。最后对本章进行了总结。

  5系统组装与测试

  完成动态手势识别机械手臂移动控制系统结构的设计、硬件选型与软件程序的编写后,就需要对手势识别机械手臂这个系统进行完整的组装,并进行测试,这是整个系统实现与检验的最终环节。

  5.1系统组装

  组装也就是将选配好的硬件按照所设计的要求进行合成搭建,既要保障组装后系统的外观合理且可靠,也要保障功能的完整与精确。系统功能效果的好坏与硬件的选型和组装技术都有很大的关系。

  本机械臂中一共有六个自由度,所涉及到的组装部件有:机械爪、腕关节、小臂、大臂、机械臂旋转底盘,把机械手臂的组装分为三个步骤:

  (1)旋转底盘的安装。机械手臂旋转底盘的主要作用是机械臂的固定与水平旋转,所以底盘的组装很重要。该设计中的底盘从上到下一共有三层需要进行固定:第一层是旋转钢盘,通过螺柱螺母与铝合金转盘的外盘部位进行固定,三个螺柱孔都是正三角形;第二层是铝合金转盘,整个是轴承结构,外圈与内圈都有许多的钢珠,因此内圈和外圈可以灵活转动,内圈上有固定1号舵机;第三层是旋转钢盘,用于防止舵机坠落,被第二层的螺柱固定,有四个螺柱孔,都是正四边形,实现对整个机械臂的支撑。

  (2)大小臂的安装。大臂长20cm,小臂长15cm,大臂安装在下,小臂安装在上。大臂和小臂中间部分通过2号舵机连接,实现小臂的抬降,小臂的顶端是3号舵机。在固定舵机与大小臂时,需要加上垫片,使得关节转动时更加牢固。

  (3)机械手腕与手爪的安装。手腕就是4号舵机,安装的时候,应保证转动方向与3号舵机的方向垂直。舵机是比较脆弱的所以要在周围固定铝合金板,防止撞击。机械爪内部是5号舵机,转动方向应与手爪张合方向一致。

  5.2系统实现

  基于Leap Motion手势识别机械手臂的移动控制系统的完整实现。首先是通过Leap Motion的体感设备,利用双目景深相机和红外传感器来捕捉使用者的手部动作姿态和轨迹。PC上的上机位Processing软件调用Leap Motion的库函数进行手部特征值得提取和运动帧的分析处理,然后转化位舵机角度的控制指令,再

  通过WiFi无线信号传递到Arduino主要控制作用板,最终实现机械手臂上所分别对应六个舵机的转动控制。

  5.3系统测试

  当完成系统整体硬件组装完成后,需要对整个系统惊醒详细的测试,检查系统的功能是否完善,效果是否能达到预期。

  5.3.1测试前准备工作

  在进行测试之前,还需要做好一些准备事项:

  (1)组装好后的动态手势识别机械手臂移动控制的系统;

  (2)充满电后的电池,为系统提供充足的电量;

  (3)不同质量的物体,对于机械手臂抓取能力的测试;

  (4)准备尺子于秒表,用于测量无线控制状态下机械手臂完成作业的效率;

  (5)创建Leap Motion软件程序,用于识别机械手臂;

  (6)配置好所需的Processing软件程序。

  准备测试工作完成后,将手势识别机械手臂模块的电路按要求连线,并把编辑好的Processing手势控制程序且确认无误、Arduino方向控制软件程序录到系统当中,进行测试。

  5.3.2系统各部分的测试

  首先是对于动态手势识别机械手臂的功能进行试验,在Leap Motion手势感应器上,手部做出动作并记录下手势相关的坐标值,并观察机械手臂是否做出了提前设定好的动作。若动态手势能够识别控制机械手臂的功能,则说明实验成功。其次就是性能测试,也就是机械手臂的抓取能力。在手势控制机械手臂的具体测试中,还需要注意到下面几点,才能够保证系统运动的合理性、安全性:

  (1)首先要将机械手臂六个自由度所对应的舵机初始位置设置无误。1~5号舵机的开始位置设置在垂直地面的90°,这样更方便机械手臂的顺逆时针的旋转,而6号舵机初始状态为水平状态,也就是手爪在闭合状态下。

  (2)手部的动作幅度要尽可能的小、速度较慢。如果手部动作幅度夸张、速度较快的情况下,容易损伤机械手臂上的舵机,所以我们要尽可能的保证手部动作保持一个平稳且缓慢的状态。

  (3)手部运动的范围要在合理的范围内。在动态手势移动的过程当中,要保证全部都在提前所设计好的范围之内,只有这样才能让机械手臂与舵机进行相互匹配的运动,若动作都超出了识别范围,舵机将不会运动。

  (4)当机械手臂的功能试验完成后,就需要对机械手臂的控制距离和性能进行进一步的测试。性能最主要的东西就是机械手臂的抓取能力,经过多次的测试,本设计当中机械手臂的能够抓取物体的最大质量是1Kg,下表是机械手臂抓取性能测试的结果。