李堯,袁青波,郭振波
摘 要:本文設(shè)計(jì)的上肢三維重建模型使用三軸加速度傳感器作為數(shù)據(jù)的采集模塊,并通過ZIGBEE發(fā)送模塊將采集得到的加速度數(shù)據(jù)發(fā)送到計(jì)算機(jī)端。對(duì)采集得到的加速度數(shù)據(jù)進(jìn)行分析,得到人體前后臂與垂直方向的夾角。本文使用最近流行的Java3d技術(shù),進(jìn)行人體上肢模型的驅(qū)動(dòng)。并根據(jù)計(jì)算得到的夾角,進(jìn)行人體上肢模型的驅(qū)動(dòng)。其中人體模型的建立是使用3ds Max三維建模軟件設(shè)計(jì)的。通過比較人體上肢動(dòng)作和佩戴加速度采集設(shè)備后的三維重現(xiàn)畫面,我們可以發(fā)現(xiàn)此三維重建模型具有很高的三維重建準(zhǔn)確度。
關(guān)鍵字:上肢模型;加速度傳感器;三維重建;模型驅(qū)動(dòng)
1 加速度數(shù)據(jù)采集設(shè)備設(shè)計(jì)
在使用Java3d技術(shù)進(jìn)行三維動(dòng)作重建前,我們首先需要獲取加速度數(shù)據(jù)。這里我們?cè)O(shè)計(jì)了可穿戴的加速度數(shù)據(jù)采集設(shè)備。此設(shè)備使用兩個(gè)三軸加速度傳感器來進(jìn)行加速度數(shù)據(jù)的采集。此設(shè)備包含一個(gè)ZIGBEE無線發(fā)送模塊,此ZIGBEE發(fā)送模塊將采集得到的三軸加速度數(shù)據(jù)發(fā)送到PC端的ZIGBEE接收器上。上肢動(dòng)作三維重建模型通過串口操作讀取PC端的ZIGBEE接收器上的加速度數(shù)據(jù),進(jìn)而完成上肢動(dòng)作的三維重建。
1.1 硬件部分設(shè)計(jì)
圖 1?1可穿戴加速度采集模塊結(jié)構(gòu)圖
可穿戴上肢加速度采集設(shè)備的硬件設(shè)計(jì)圖如1-1所示。此模塊使用一個(gè)型號(hào)為Atmega48的處理器作為主控器件。此模塊使用一個(gè)ZIGBEE發(fā)送模塊作為加速度信號(hào)輸出的途徑。此模塊利用型號(hào)為KXTJ9的三軸加速度傳感器作為傳感器芯片,并使用此傳感器芯片來完成加速度信息的采集。由加速度傳感器采集得到的加速度信息將通過I2C被發(fā)送到Atmega48控制器中,Atmega48主控器將其打包并傳輸?shù)絑IGBEE發(fā)送模塊中。最終,被打包的加速度數(shù)據(jù)將被發(fā)送到個(gè)人電腦的串口接收器上。PC端ZIGBEE接收器主要負(fù)責(zé)接收可穿戴上肢加速度采集模塊發(fā)送的加速度數(shù)據(jù)。此ZIGBEE接收器與PC的通訊方式是串口通訊,這里我們使用串口通訊編程便可以方便地從ZIGBEE接收器上讀取到我們需要的三軸加速度數(shù)據(jù)。ZIGBEE接收器的硬件原型如圖1-2所示。
圖 1?2電腦端ZIGBEE接收器
上肢加速度數(shù)據(jù)采集模塊備原型如圖1-3所示。此硬件接收的兩端各安裝了一個(gè)三軸加速度傳感器。在進(jìn)行上肢動(dòng)作時(shí),需要將此硬件設(shè)備的兩端分別放置在上肢的前后臂上。此硬件設(shè)備采用USB接口對(duì)其自身攜帶的鋰電池進(jìn)行充電,省去了頻繁更換電池的操作和成本。
圖 1?3上肢加速度采集設(shè)備
1.2 軟件部分設(shè)計(jì)
本采集模塊的軟件設(shè)計(jì)部分中,Atmega48主控器采用中斷源技術(shù)來實(shí)現(xiàn)數(shù)據(jù)獲取,I2C總線傳輸和串行傳輸??纱┐魃现铀俣葦?shù)據(jù)采集模塊每200毫秒發(fā)送一個(gè)打包好的加速度數(shù)據(jù),這個(gè)發(fā)送過程是用定時(shí)器來進(jìn)行觸發(fā)的。此定時(shí)器觸發(fā)算法如圖1-4所示。
圖 1?4定時(shí)發(fā)送流程圖
2 基于Java3d的三維重建模型
本模塊使用Sun公司的Java語言的Swing組件進(jìn)行界面的編寫。其中串口通訊部分使用Java語言提供的COMM串口通訊組件進(jìn)行實(shí)現(xiàn)。而三維動(dòng)畫的驅(qū)動(dòng)使用的是Java語言提供的Java3d組件來完成的。而人體上肢的3D模型的建立則用到了3ds Max三維建模軟件。此模塊通過SUN公司提供的串口通信組件,進(jìn)行本模塊和PC端ZIGBEE接收器之間的串口通訊。進(jìn)而將電腦端的上的加速度數(shù)據(jù)讀取到模塊分析程序中。
本模塊所使用的3D模型是通過3ds Max三維建模軟件進(jìn)行建立的。在3ds Max三維建模軟件中建立好之后,再將建立好的人體上肢模型(包括軀干,前臂和后臂)保存為obj格式的文件[1]。然后利用Sun公司提供的Java3d技術(shù),將obj格式的模型進(jìn)行顯示和根據(jù)加速度傳感器的數(shù)據(jù)進(jìn)行驅(qū)動(dòng)[2]。三維重建模型使用Java3d技術(shù)進(jìn)行上肢動(dòng)作的三維重建。在進(jìn)行三維重建之前,我們首選需要分析利用串口技術(shù)獲得的加速度采集數(shù)據(jù)。通過對(duì)加速度采集數(shù)據(jù)進(jìn)行分析,我們可以得到人體上肢前臂和后臂與垂直方向的夾角進(jìn)而可以確定人體的空間姿勢(shì)。
2.1 基于加速度數(shù)據(jù)分析的角度測(cè)量原理
2.1.1前后臂與垂直方向的夾角計(jì)算原理
圖 2?1角度測(cè)量原型圖
在進(jìn)行上肢動(dòng)作三維重建之前,首先需要測(cè)量人體上肢前后臂和至此方向的夾角。其外部采集設(shè)備的佩戴方式如圖2-1所示。隨著前臂和后臂的空間位置的變化,后臂與軀干的夾角以及前后臂的夾角將能由獲取到的三軸加速度數(shù)據(jù)計(jì)算得到。
圖 2?2加速度原始數(shù)據(jù)
如圖2-2所示,上面這串?dāng)?shù)據(jù)就是上肢動(dòng)作三維重建模塊利用串口通訊技術(shù)接收得到的加速度原始數(shù)據(jù)。41—52是加速度傳感器的編號(hào),10f是開始字符,從10f開始往后的6組用空格分開的數(shù)字便是前后臂兩個(gè)加速度傳感器的xyz軸的數(shù)據(jù),20是結(jié)束字符表示這串加速度信號(hào)數(shù)據(jù)結(jié)束。利用串口通訊技術(shù)接收得到的是加速度數(shù)據(jù)的16進(jìn)制補(bǔ)碼,這里需要將補(bǔ)碼轉(zhuǎn)化成真值。補(bǔ)碼到真值的轉(zhuǎn)換規(guī)則如下:如果0開頭,將0換成+號(hào),其余位不變;如果1開頭,1換成-號(hào),求反加一。利用這個(gè)規(guī)則,本文利用代碼將加速度分量由補(bǔ)碼形式轉(zhuǎn)化成真值形式。
前臂和后臂在運(yùn)動(dòng)過程中始終與垂直方向存在一個(gè)夾角。通過分析加速度數(shù)據(jù)每個(gè)軸在重力影響下所產(chǎn)生的分量;我們可以確定前臂和后臂的空間位置
圖 2?3加速度傳感器三軸受力分析圖
如圖2-3所示,當(dāng)傳感器處于靜止?fàn)顟B(tài)時(shí),y軸和z軸數(shù)據(jù)是由重力作用生成的。夾角α可以由y軸和z軸的數(shù)據(jù)來最終確定。計(jì)算公式如下所示:
公式 2-(1)
公式 2-(l)當(dāng)通過計(jì)算得到角度信息之后,還需要把角度值轉(zhuǎn)化成弧度值,因?yàn)镴ava3D函數(shù)是需要輸入弧度值的。其中弧度的計(jì)算公式如下公式2-(2)所示。
公式 2-(2)
2.2.2前后臂夾角測(cè)量
圖 2?4前后臂夾角示意圖
如圖2-4所示,前后臂夾角=前臂與垂直方向的夾角+后臂與垂直方向的夾角。由于硬件條件的限制,采集得到的加速度傳感器數(shù)據(jù)即使在上肢處于絕對(duì)靜止?fàn)顟B(tài)下也存在數(shù)據(jù)不一致的情況。由于加速度數(shù)據(jù)的不一樣,所計(jì)算出來的角度數(shù)據(jù)也會(huì)存在變化,所以會(huì)造成前后臂抖動(dòng)的現(xiàn)象,針對(duì)這個(gè)問題本文采用設(shè)置變化閾值的辦法,當(dāng)由當(dāng)前的加速度數(shù)據(jù)計(jì)算得到的角度與前一個(gè)角度的變化范圍在閾值內(nèi),則不發(fā)生位置變動(dòng)。
2.3 模塊功能設(shè)計(jì)
2.3.1串口通訊功能
此功能的主要類需要繼承SUN公司提供的串口事件監(jiān)聽類接口[3]。此接口存在一個(gè)方法必須要實(shí)現(xiàn)的串口事件方法,此方法便是串口通信的核心方法。其中需要設(shè)置串口接收到波特率,數(shù)據(jù)為,停止位和奇偶校驗(yàn)位。這里波特率為9600,數(shù)據(jù)位為8,停止位為1,奇偶校驗(yàn)位為0。使用輸入流并用串口將其進(jìn)行實(shí)例化。如果在程序中發(fā)現(xiàn)串口輸入流有數(shù)據(jù),則說明接收到串口傳遞過來的加速度數(shù)據(jù)。
2.3.2三維重建功能
此功能的關(guān)鍵代碼部分,主要是使用Java3d技術(shù)進(jìn)行三維模型的坐標(biāo)系建立,和通過傳感器的加速度數(shù)據(jù)來實(shí)時(shí)設(shè)置旋轉(zhuǎn)內(nèi)插器。通過插值器來驅(qū)動(dòng)前臂和后臂的旋轉(zhuǎn)。此模塊的上肢模型驅(qū)動(dòng)主要是用Java3d技術(shù)進(jìn)行實(shí)現(xiàn)的。此模塊中使用的上肢模型是在3ds max建模軟件中創(chuàng)建的[4],并將創(chuàng)建好的3d模型保存為obj格式。Java3d首先進(jìn)行場(chǎng)景的渲染和三維空間的疊加建立。然后通過串口接收方法中對(duì)接收到的加速度數(shù)據(jù)的分析,來實(shí)時(shí)設(shè)置旋轉(zhuǎn)插值器的值。通過旋轉(zhuǎn)插值器[5]來驅(qū)動(dòng)前臂和后臂的實(shí)時(shí)運(yùn)動(dòng),從而將實(shí)驗(yàn)者的上肢動(dòng)作重現(xiàn)出來。上肢三維動(dòng)作重建面板界面如下圖2-5所示。
圖 2-5上肢三維動(dòng)作重建界面
用戶可以使自己正在進(jìn)行的上肢動(dòng)作,三維重建在客戶端界面中。雖然無線通訊存在一段時(shí)間的延遲,但是延遲在用戶的可接受范圍內(nèi),并且三維重建模塊對(duì)上肢作的展示效果良好。
3 結(jié)論
通過對(duì)圖3-1中上肢原始動(dòng)作和三維重建動(dòng)作的比較,我們可以發(fā)現(xiàn)通過分析加速度傳感器數(shù)據(jù)并利用Java3d建模技術(shù)得到的上肢三維重建動(dòng)作與真實(shí)的上肢原始動(dòng)作相似度很高。表明了使用加速度傳感器作為上肢狀態(tài)的采集裝置具有很高的應(yīng)用價(jià)值。
圖 3?1上肢原始動(dòng)作和三維重建動(dòng)作的比較
參考文獻(xiàn)
[1]陳靜勇,周來水.基于Java3D的虛擬現(xiàn)實(shí)建模方法[J].計(jì)算機(jī)應(yīng)用研究.2012,19(5): 34-36.
[2]涂建東,陳崇成,樊明輝,張群洪.基于Java3D的空間關(guān)聯(lián)規(guī)則可視化原理與實(shí)現(xiàn)[J].高科技通訊.2004,14(6): 98-102.
[3]周海濤,高興鎖,江曉峰.基于java數(shù)據(jù)采集串口通訊的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息.2006,22(4): 141-142.
[4]卞鋼,劉寅東.基于3dsmax的船舶三維運(yùn)動(dòng)仿真[J].計(jì)算機(jī)仿真.2005,22(5): 216-218.
[5]李翔,李成名,王繼周.基于Java3D的地形3維可視化技術(shù)[J].測(cè)繪通報(bào).2003,(10): 19-38.