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
更多相關信息