LeapMotion体感控制器的智能移动机械臂控制系统
2017-3-17 来源:北京理工大学珠海学院 作者:罗回彬,刘春丽,董思奇,陈锡柯,杨哲宇
摘要:设计一种新型的移动机械臂控制系统,可以利用 Leap Motion体感控制器替代传统的人机交互方式,进行手部数据采集,将其识别到的手势动作经过计算机分析处理后,通过 WiFi传输给开发板,进而控制机械臂模仿人手的动作,同时由于机械臂的载体是一个加载摄像头的移动小车,可以很好地结合机械臂执行各种远程遥控任务。实验结果表明,该移动机械臂便捷灵活、操作简单,能很好地应用在各种领域。
关键词:leap motion;手势识别;移动机械臂
0.引言
机器人是一种能够进行编程并在自动化控制下执行某些操作和移动作业任务的机械装置,在工业、医 学、农业、建筑业甚至军事等领域中均有重要用途[1-2]。目前机器人很少是通过体感操控的[3-4],人机交互通常都是依靠鼠标、键盘、触摸屏。因此,人与机器人交互方式不够直接和简单。基于这点提出了一种新的机器人控制方式———体感控制,即操作者可以通过手势对机器人进行控制,让人直接用自己的手来指挥机器人进行动作,完成需要人机协作才能完成的任务。本项目研究的智能移动机械臂可通过 Leap Motion控制,实现机械臂模仿人类所做的手势动作的功能,同时小车搭载摄像头模块更方便地实现机械臂的可操作性,实现机器人控制方式上的创新和更加自然的人机交互。
1.总体结构与原理
本项目主要利用 Leap Motion的小巧 而 且 识 别 度 精准的特性,通过其对手势的动作进行分析转化,并在机械臂及小车自带搭载的 WiFi环境下,进行对机械臂的控制,如图1所示。
图1 整体效果示意图
本系统主要由上位机系统和下位机系统组成,上位机系统由 PC机、Leap通过 WiFi把控制指令传送给 Arduino开发板;而 Arduino开发根据不同的指令控制机械臂各关节的旋转角度和小车的运动,从而完成预期的动作。同时,PC端和手机端也可以通过按键方式进行相应的命令操作,控制机械臂和小车完成预期的动作。
图2 系统结构框图
2.主要硬件模块选型与设计
2.1LeapMotion体感控制器
Leap Motion是当下流行的以手部运动捕获为主的体感设备,利用红外成像的原理获取手的运动图像,检测并跟踪手、手指和类似手指的工具,可以实时获取它们的位置、手势和动作,并将这些静态与动态信息提供给操作者。利用 LeapMotion根据每帧和前帧检测到的数据所生成的运动数据,捕获不同手势和手势的运动变化信息[5]。Leap Motion采用了笛卡尔坐标系(Cartesian coordinates),坐标的原点是设备的中心,坐标的 X轴平行于设备,Y轴指向上方,Z轴指向背离屏幕的方向,单位为真实世界的 mm[6-8],如图3所示。
图3 Leap Motion的笛卡尔坐标系
Leap Motion检测 到 手 掌 或 者 手 指 等 目 标 对 象 的 时候,其软件系统还会自动为这个对象分配一个独一无二的标识符,在设备的视野范围内如果持续检测到目标对象存在,这个标识符就保持不变。如果目标超出有效视野范围,整 个 追 踪 过 程 出 现 丢 失 或 者 失 而 复 得 的 情 况,LeapMotion便会重新为目标对象分配一个新的标识符,同时使旧的标识符失效。
2.2机械臂模块
如图4所示,机械臂主要由大臂、小臂、舵机和机械臂爪组成。当手势信息或按键命令传给 Arduino控制器后,它就先解析出动作指令再操控机械臂的舵机,让机械臂做出相应的动作,具体功能描述如表1所列。
图4 机械臂结构图
表1 机械臂功能描述
2.3Arduino开发板
Arduino开发板具 有 开 源,模 块 化 组 装,简 单 实 用 等特性[9-11],本项目就是利用它的这些特性控制机械臂的舵机和小车的马达,从而实现对小车和机械臂的控制,大大地缩短了开发的周期。
3.软件设计及实现
3.1整体软件设计及实现
本项目在软件设计与实现中,PC端采用 Windows系统、C# 语 言,手 机 端 采 用 Android 系 统、Java语 言。 如图5所示,主程序启动后,进行 Leap Motion操作和 按 键操作的选择界面,当操作者执行一个手势或者一个按键操作后,PC端或手机端会有相应的函数对操作进行解析,再通过 WiFi通信发送给 Arduino开发板,然 后 Arduino开发板就会控制机械臂的舵机或者小车的马达,从而让它们运动。
3.2手势识别
手势动作具有以下三个特点:
① 时间可变性:完成同一个手势所用的时间不一致。
② 空间可变性:完成同一个手势的空间差异性。
③ 完整可变性:缺少信息或出现重复信息。
这些特点决定了动态手势的识别难度,开发人员无法抽样或将其作为一个整体来识别。因此,本项目主要通过对一只手手指的运动来进行捕获,再转换为指定的字母,化繁为简,来控制机械臂和小车。
图5 总体流程图
在手势转换过程中,函数 OnFrame()为最 核 心 的 函数。在这个函数中,主要利用 Leap Motion SDK 开发包的函数 Extended()对获得数据进行处理,提取手部的运动特征。本系统可识别两类手势:一种是手指在空间运动,获得手指数量;另一种是手指在平面内画圈,包括顺时针画圈和逆时针画圈。随后,通过一个 Switch()语句对手指数量的判断来转换为相应的字母命令,每一个字母都有自己的指示动作,然后通 过 SendData()函 数 将 字 母 传 送 到Arduino开发板,具体流程如图6所示。
图6 手势转换过程流程图
3.3小车与机械臂控制
进行手势识别和转换后,PC端将数据通过 WiFi传 送至 Arduino,Arduino 开 发板会通过调用Serial.read()函数和 witch()语句进一步判断和指定机械臂或小车做出相应的动作,具体流程如图7所示。
图7 Arduino控制机械臂或小车操作的流程图
3.4WiFi通信
在 Internet 中,TCP/IP使用一个网络地址和一个服务端 口 号 来 唯 一 标 识 设 备。其中,网 络IP 地 址 用 于 标 识网络上的特定设备;端口号用于标识要连接到的该设备上的特定服务。根据上述原理,本项目的服务器可以理解为PC端和手机端,而客户端则是 Arduino开发板。利用 Ar-duino开发板自带的串口 WiFi模块构建 WiFi局域网,将电脑或手机连接到已经搭建的 WiFi环境中,实现 Socket连接及通信。
在本项目中,用指定的地址和端口号初始化 IPEnd-Point类的新实例,然后通过 Socket编程就可以实现连接并通 信。 其 中,设 置 的 IP 为 192.168.8.1,端 口 号 为2001,协议是 TCP/IP,IPEndPoint类 主 要 有 服 务 器 的IP地址和端口信息,实现客户端到服务器端的连接。Socket编程的基本过程如下:
① 创建一个 Socket实例对象。
② 运用 Connect()方法将 Socket实例对象连接到IPEndPoint。
③ 接收并发送信息。
④ 最后用 Close()方法来关闭 Socket。
4.实验结果
本项 目 在 Windows7 系 统 和 Android 智能手机进行实验,实验演示过程具体如下:
① Leap Motion体感控制器将 手 部 信 息发给 PC端,PC 端 经 过 数 据 处 理 识 别 出 手 势和手掌的 运 动 轨 迹,并 将 处 理 后 的 结 果 传 输给 Arduino,小车 接 收 命 令 和 数 据,然 后 做 出相应的动作,如图8所示。
② 手机端通过按键操作命令,将相应的命令数据传输给 Arduino,机械臂和小车根据接收 的 命 令 和 数 据 做 出 相 应 的 动 作,如 图 9所示。
图8 Leap Motion控制小车停止(左)和向前运动(右)
图9 按键控制(上)摄像头观测显示(下)
实验结果表明,在各功能部件连接通畅的情况下,通过 Leap Motion体感控制能很好地识别操作手势,实现对机械臂、小车的便捷控制。
5.结语
本项目设备成本低、体积小巧、操作简便、便携灵活,能适用于各种复杂环境和特殊任务,在军事侦察、可疑物品排爆、工业操作、医疗应用及日常生活等都有较好的应用前景和实用价值。
投稿箱:
如果您有机床行业、企业相关新闻稿件发表,或进行资讯合作,欢迎联系本网编辑部, 邮箱:skjcsc@vip.sina.com
如果您有机床行业、企业相关新闻稿件发表,或进行资讯合作,欢迎联系本网编辑部, 邮箱:skjcsc@vip.sina.com
更多相关信息