999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Leap Motion體感傳感器的手部位置信息獲取方法研究

2021-04-15 05:52:04陳國麗
南方農機 2021年7期
關鍵詞:用戶設備檢測

彭 淼 , 陳國麗 , 姜 瑜

(重慶工業賦能創新中心有限公司,重慶 401123)

0 前言

近年來,隨著虛擬現實技術的迅速發展,人們愈加感受到體感交互設備所帶來的便利,如偵測手臂肌電信號Myo智能臂環、Google 眼鏡等可穿戴式交互設備[1]。Leap Motion公司推出了Leap Motion Controller小型運動控制系統,能以200幀/秒的速度追蹤雙手,追蹤精度可達0.01mm,可用于捕捉視場范圍達150。 ,空間范圍可達8平方英尺的交互式空間中的多個物體,并且其對手勢及手部細節的識別亦是一種新的突破[2]。

Leap Motion Controller目前的主要應用分為兩個方面:一方面是在三維虛擬游戲方面的應用,作為虛擬交互設備提升玩家游戲體驗;另一方面主要用于三維演示項目的虛擬設備。在演示項目的使用中有一種使用方法是用手勢代替數字來進行控制項選擇[3]。在中國,手勢早已成為人們生活中簡單方便的交流手段。而Leap Motion的手勢識別能力可達到很高的精度,因而可以將手勢作為一種設備控制的輸入方式,幫助人們完成項目選擇,如物體抓取、移動,控制小車,操作機械臂等[4]。

本文以研究Leap Motion設備獲取手部位置信息的具體實現方法為目標,首先深入了解分析Leap Motion的工作原理和應用方法,開發基于VS2017的Leap Motion手部位置獲取算法;然后編寫基于MFC的應用程序界面,設定輸出所需位置信息的窗口,用于顯示手部位置和姿態數據;最后通過實驗分析采集算法的精度以及程序的穩定性[5-9]。針對試驗的具體結果,分析該輸出方法的優點,并且提出一定的改進方案,為后續研究提供依據。

1 基于Leap Motion位置信息采集

Leap Motion作為手部信息捕獲設備,使用光學傳感器和紅外線掃描獲取處于設備上方大約150°視野范圍內的對象。Leap Motion的有效可視范圍大約在設備上方25mm~600mm,形狀呈尖端位于設備中心的倒漏斗形[10]。圖1展示了Leap Motion如何監視用戶的手。

圖1 Leap Motion設備監視用戶雙手

1.1 獲取手部位置特征

在了解Leap Motion控制器所使用的坐標系統之后,將要用到手掌的中心坐標,即如圖2所示圓點的坐標位置,然后給出中心坐標的某一具體坐標值編寫輸出方法。需要注意的是,在輸出手掌中心位置坐標時,需要判別手掌類型,即對左右手進行判斷。因此,首先輸出手掌類型。

圖2 手掌坐標位置及方向

在源代碼中給出了各種類以及類的相互之間的調用關系,這里僅對HandList下的C++代碼進行更改,在代碼中,程序設定了一個Controller對象,用于連接到Leap Motion后臺,從而可以通過命令Controller.frame()獲取數據。另外,程序添加了一個Listener類,來設定一些回調函數。代碼中的onFrame回調函數用于定義當獲取到一幀數據時需要處理的事件,比如通過對frame的再調用來獲取一些手部的位置數據信息,再調用的方法主要是通過語句HandList hands= frame.hands()來將幀中關于手部的數據信息傳遞給手列表中的手對象。在代碼中設定了四個float型變量,以及一個初始化為“未檢測到手”的字符變量,由于將其設定為全局變量,因此,可以在對工作狀態進行判別后,通過對變量進行賦值,來輸出手部的位置數據。

1.2 獲取尖端坐標

尖端對象是指在視野范圍中出現的對象中可以指出方向的東西,可以被表示為手指或者工具,可以通過手對象中特定的手,來獲取其相關的信息。即在獲取hand.palmPosition的同時,獲取尖端坐標,在視野中部出現工具的情況下,便可以通過兩者之間的物理模型關系,確定視野中手部的位置以及方向。在檢測時,程序會自動檢測手指尖端距離手掌中心最遠點的坐標并且進行輸出。與輸出手掌中心位置坐標的方式類似,程序通過onFrame回調函數獲取每一幀的數據,通過命令const Pointable pointable = frame.pointables().frontmost()來獲取幀數據中所保存的尖端數據信息,并將獲取的坐標信息賦給程序開始所定義的float型變量tipx,tipy,tipz,進行輸出。

在Leap Motion模型中,手指利用Finger類對象進行描述,是一種可指向性對象,物理特性包括Width(寬度)、Length(長度)、Direction(方向)、tipPosition(尖端坐標)以及tipVelocity(尖端速率)等。如圖3所示,圓點處的位置表示為尖端坐標,箭頭的方向表示尖端方向。

圖3 尖端坐標及方向向量

這里選擇尖端坐標來描述手指屬性,并基于Pointable類獲取指尖位置。與描述手掌中心坐標的方法相似,利用double型全局變量對獲取的結果進行輸出。

1.3 手指數據信息輸出

Leap Motion控制器可以獲取用戶十指的數據。在LeapSDK中提供了所檢測到的用戶手指物理特征數據的C++代碼,通過運行可以對相關數據進行輸出。所有的手指都包含有四根骨頭,每根骨頭可以獲取指根和指尖的坐標位置,即如圖4中小球處的坐標位置。定義的骨頭名稱如上述代碼中boneNames[]字符串所包含的四個成員。拇指模型為了便于編程的統一多定義了一個掌骨,長度設定為零。

圖4 Leap Motion手指指骨模型

1.4 識別并輸出基本手勢類型

在Leap Motion SDK中把一些特定的運動模式定義為手勢,通過這個運動模式來對用戶的意圖進行猜測。對于每一個設備觀察到的手勢,都可以在frame.gestures列表中找到相關的數據信息。Leap Motion系統會將獲取到的手勢對象不斷更新在獲取的幀中。通過對手勢的判別,更多的是可以獲取到用戶手部在坐標系中的一個動作姿態特征,在檢測到用戶的一個手勢時,可以通過手部模型關聯得到用戶手部的一個大致位置。在手勢識別啟用后,便可以從幀中獲取一些數據信息。檢測手勢的代碼首先將幀中的關于手勢的數據信息傳遞給手勢類,采用了switch開關語句對手勢的基本類型進行判別,如果符合case命令下的手勢類型,則執行該case命令并且最終結束switch循環。識別手勢基本類型的算法封裝在gesture項目中。在程序運行過程中,程序通過調用相關的函數,將一些基本的信息填入進去,通過計算進行轉換,在某些數據發生了重復時,便開始判斷其是否為手勢,以及為何種類型手勢。

2 MFC用戶程序界面搭建

基于可視化的用戶程序界面生成系統是當前編程發展的方向。如瀏覽器支持界面實時刷新顯示,一些軟件運行時可以實時的更新顯示類似于時間、坐標等數值。由于在Windows中不可能完全由用戶設計這些可能需要用到的控件,因此,微軟公司推出的MFC提供了類庫,用戶可以基于此基礎,通過重載它的各種消息處理函數來對所需要的程序界面進行編輯修改[11]。

本文所用的VS2017是微軟公司推出的最新版集成開發工具,提供了MFC類庫[12]。MFC的框架包含有一個應用程序所需的所有可能控件,用戶只需要對其進行使用[13]。

2.1 設計界面生成思路

應用程序界面的生成包括兩個過程,首先是進行界面設計,即在編輯窗口中加入控件,并為控件添加成員變量。之后便是功能設計,用戶需要基于各成員變量,編寫功能函數來得到所需要的結果。下圖5簡單介紹了如何創建一個基于對話框類型的應用程序。

圖5 基于對話框的應用程序工作流程圖

2.2 Leap Motion手部位置人機交互業務流程

在本文中所編寫的應用程序界面需要完成的一個功能是:在Leap Motion檢測到用戶手部位置數據信息時,將存放在frame中的各結構的三維坐標分別實時動態顯示出來,在用戶改變所需要的位置信息時輸出也會隨之發生改變[14]。因此,本文本框必要的一些控件為:手掌類型、手指個數、手掌中心、尖端、手掌角度以及基本手勢。前面四個坐標值可以表示用戶手部的基本信息以及一個大致空間位置,第五個坐標值則主要用于描述手掌的一個方向,第四個為字符串輸出,用于展示用戶手部可能組成的基本手勢。

基于以上分析,在進行Leap Motion數據信息與MFC界面進行共享的過程中,涉及多個坐標信息,以及三個字符串類型輸出。在進行應用程序界面設計時,為使界面信息明了,采用Group Box控件,將位置坐標輸出分別設置在不同的組合框控件中。在進行數據顯示時,控件需要有自己的一個成員變量,該變量的定義類型可能是值,或者字符串。針對本文的應用程序,需要定義至少三個數值型成員變量以及三個字符串型成員變量[15]。

2.3 人機交互界面編寫

該對話框包含了手掌中心坐標、尖端坐標、手掌姿態角的數據輸出,手勢、手類型的判別,通過這些信息,可以具體地刻畫出手部在空間中的位置信息,并對其進行一定的美化,如添加圖片控件以及作者姓名信息等。完整的人機交互對話框如圖6所示。

圖6 人機交互對話框

在構建好MFC應用程序界面的對話框基本結構之后,比較關鍵的是將Leap Motion程序與搭建的MFC框架聯系起來,獲取到數據并且進行動態顯示[16]。

至此,添加的成員變量有:float型變量m_palmX,m_palmY,m_palmZ,用于描述手掌位置坐標;int型變量m_pitch,m_yaw,m_roll,用于描述手掌角度;CString型變量m_rightorleft,用于描述手掌類型;int型變量m_fingerscount,用于描述手指數;float型變量m_tipX,m_tipY,m_tipZ,用于描述尖端位置坐標;CString型變量m_gesturetype,描述特征手勢類型。

3 基于MFC人機交互界面的Leap Motion手部位置采集

3.1 信息動態實時顯示

在Leap Motion的SDK文檔中設定了一個Listener類用于監聽設備狀態以及獲取幀數據并且將幀中的數據調用給手部各姿態用于輸出。因此,為實現數據傳遞,在MFC項目中新建一個名為myListener的類,用于與Leap設備建立聯系并且獲取一些數據信息。關于MFC項目對各頭文件路徑的識別,可以按照Leap Motion SDK在C++環境下的配置,在MFC項目中重新配置一次即可[17-19]。

由于輸出信息僅需要調用onConnect函數以及onFrame函數,因此,在MyListener的聲明中,僅需添加這兩個函數即可。拷貝獲取位置信息的C++代碼到myListener.cpp中,將獲取的位置數據賦給所設定的各全局變量,以方便在交互界面進行輸出[20]。在程序運行myListener.cpp后,手部位置數據信息便保存在了定義的各全局變量中。對話框的主程序代碼需要實現的功能是將全局變量中的數據顯示在相應的編輯框中,并且實現數據的動態更新顯示。對于更新要求,采用的是添加一個onTimer函數,通過定時器定時執行某條語句,從而實現數據的更新顯示。

數據通過全局變量傳遞到了每個編輯框所對應的成員變量中,并且可以通過編寫的MFC人機交互界面進行動態顯示。實時顯示的輸出交互界面如圖7所示。

圖7 MFC交互界面輸出結果

對于一個信息采集設備,需要了解其所用坐標系統,以及其可檢測范圍,之后才可以對其采集精度進行檢測。因此,需要對Leap Motion設備的可視范圍進行測定,如可采集的三維最大長度,隨后標定坐標空間的大致形狀,基于此進行Leap Motion的采集精度實驗。

3.2 Leap motion檢測范圍試驗

在進行測定時,首先在Leap Motion設備旁邊固定一根1m長的直尺,然后由低至高依次抬高手掌,觀察屏幕輸出的手掌中心坐標,直到輸出為0,記錄此時的手掌高度,如圖8所示。

圖8 利用直尺測定Y方向上設備可視范圍

測定Y正方向上,當手掌移動到距離設備上表面約1 000mm的位置時,屏幕輸出為0;最下方距離設備上表面約20mm的位置時,屏幕輸出為0。可以看出,與官方給出的可視范圍基本吻合。

之后,借助另一根直尺測定相隔一段Y方向上的距離,相應的X與Z軸在正負方向上的極限可視范圍。測定方法與標準基本同上文相似。手掌隨直尺方向平移,觀察屏幕輸出。在輸出為0時則表示該方向到達可視范圍的邊界。如圖9所示。

圖9 測定X與Z方向上極限可視范圍

結果如表1所示。

表1 三維坐標測量結果匯總表

Leap Motion坐標系統的方向設定,分別作X-Y圖及Z-Y圖,如圖10所示。

將圖10與官方給定的坐標系統圖示進行比較,可知系統的實際坐標區域可分為兩片不同類型。首先是由坐標原點到Y軸正向約620mm之間區域,大概為一個倒金字塔形。由Y軸正向距原點620mm至檢測頂點之間的區域大概是一個倒球形。

3.3 手部姿態檢測試驗

在交互界面上可顯示手掌姿態角數據信息,具體包括俯仰角(繞X軸)、側傾角(繞Z軸)以及橫擺角(繞Y軸)。在設備檢測到用戶手部位置信息時,界面可以實時顯示數據信息。相關手部位置及輸出信息如圖11所示。

圖10 坐標系實際可視范圍圖

圖11 手掌姿態角數據信息獲取

3.4 Y軸正方向上檢測精度測定

在設備的可視范圍測定完成后,需要沿各軸測定手掌的實際坐標值,并與程序輸出坐標值進行對比,對設備的檢測精度進行評定。本文僅對Y軸正向的檢測數據進行精度檢測。測定方式:使用一根刻度為1m、精度為1cm的直尺。在進行檢測時,首先將數據的輸出頻率降低,以方便讀數。將使用直尺測定的數據與程序輸出的坐標值進行對比,如表2所示。

表2 沿Y軸正向測定坐標與輸出坐標數據表

基于上表所測數據,使用直尺測定值與程序輸出值數據信息,繪制兩者的數據對比線圖如圖12所示。

圖12 手掌位置數據信息對比圖

根據折線圖中,兩根曲線之間的擬合情況,結合數據采集過程中可能出現的誤差,可知在距離Leap Motion設備較近位置時,如500mm范圍內,設備的檢測精度很高,與實際測量基本無偏差;在距離設備較遠處出現數據的較大波動,原因可能是設備所用傳感器的靈敏度隨距離的增加逐漸降低。整體來說,其檢測精度相比較其他傳感器要更高,數據輸出更為穩定,數據偏差范圍較小。

另外,通過實際檢測可以得知,Leap Motion設備的實際檢測范圍可能會比官方給出的標準范圍要更大一些。在運行程序時屏幕輸出的數據精度可以達到0.000 1,精度相比以往更高。這就為用戶提供了更大的操作空間,同時其更高的檢測精度也為手部位置的獲取提供了更多的便利。

4 總結

關于空間物體的坐標位置獲取一直都是一個不斷發展、不斷進步的前沿研究方向,相比較以往推出的三維加速度傳感器、超聲波傳感器、溫度傳感器、雷達等檢測設備,Leap Motion具有更高的精度,可以適應更多的使用環境。本文基于Leap公司供用戶參考學習的SDK文檔,開發設計出一種相對來說更為實用、比較簡便的手部位置信息獲取方法,并且利用VS設計出了一個簡單的MFC程序界面對數據進行輸出顯示。本文主要完成了以下工作:

1)根據Leap公司提供的用戶參考SDK文檔,對Leap Motion獲取手部位置信息的C++程序進行了解讀并且編寫了更為直接以及簡單的輸出代碼。

2)使用VS2017建立了一個MFC應用程序,并且對該應用程序的控件進行了設計,使其可以顯示所需的一些位置坐標信息。

3)通過對其他MFC程序的參考,經過調試將編寫的Leap Motion程序與新建的MFC程序之間建立了鏈接,使MFC控件的成員變量可以獲得不斷更新的位置數據信息并且進行動態顯示,完成了手部位置信息獲取方法的探究。

4)本文雖然對手部位置信息獲取方法進行了探究,但是對其可能應用的方向并沒有進行一個很好的描述,希望可以在后續工作中對該方面進行探究,并且提出一些可能應用的場景,為其更好地與現實結合提供參考。

猜你喜歡
用戶設備檢測
諧響應分析在設備減振中的應用
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
小波變換在PCB缺陷檢測中的應用
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
主站蜘蛛池模板: 国产国语一级毛片| 国产成人禁片在线观看| 色久综合在线| 国产簧片免费在线播放| 人妻少妇乱子伦精品无码专区毛片| 日本黄网在线观看| 免费一级无码在线网站| 制服丝袜在线视频香蕉| 狠狠色综合网| 国产91蝌蚪窝| 四虎影视8848永久精品| 无码内射在线| 东京热av无码电影一区二区| 广东一级毛片| 无遮挡国产高潮视频免费观看| 成人福利在线观看| 二级毛片免费观看全程| 99re热精品视频国产免费| a毛片免费在线观看| 伊人久久婷婷| 亚洲视频免费播放| 伊伊人成亚洲综合人网7777 | 美美女高清毛片视频免费观看| 激情无码视频在线看| 国产青榴视频在线观看网站| 亚洲Av激情网五月天| 亚洲欧美h| 中文字幕2区| 欧美啪啪一区| 国产凹凸一区在线观看视频| 国产成人精品免费视频大全五级| 18禁高潮出水呻吟娇喘蜜芽| 超级碰免费视频91| 国产成人亚洲精品蜜芽影院| 亚洲色图欧美在线| 色偷偷一区| 亚洲精品视频免费看| 欧美视频在线第一页| 日韩精品资源| 日本不卡在线视频| 在线播放国产99re| 91精品国产91久无码网站| 精品無碼一區在線觀看 | 99精品伊人久久久大香线蕉| 精品视频91| 国产福利大秀91| 国产在线观看第二页| 国产精品免费电影| 日韩a级毛片| 四虎精品免费久久| 亚洲国产AV无码综合原创| 无码精品一区二区久久久| 亚洲综合中文字幕国产精品欧美| 国产一区在线视频观看| 色一情一乱一伦一区二区三区小说| 国产91丝袜在线观看| 亚洲成A人V欧美综合天堂| 全裸无码专区| 在线观看亚洲天堂| 99ri国产在线| 99视频免费观看| 国产91精品最新在线播放| 亚洲成人动漫在线| 欧美啪啪网| 国产在线一区视频| 欧美成人怡春院在线激情| 国产成人欧美| 午夜精品久久久久久久2023| 国产精品熟女亚洲AV麻豆| 国产69囗曝护士吞精在线视频| a免费毛片在线播放| 国产91色| 国产在线精品人成导航| 青草视频免费在线观看| 福利片91| 99久视频| 日本尹人综合香蕉在线观看| 538国产视频| 国产一级毛片网站| 亚洲天堂视频网站| 伊人久久福利中文字幕| 亚洲国产精品无码久久一线|