趙旭強(qiáng),高天星,馬忠梅
(北京理工大學(xué) 計(jì)算機(jī)學(xué)院,北京 100081)
?
CC3200與Android的跌倒檢測系統(tǒng)上位機(jī)設(shè)計(jì)※
趙旭強(qiáng),高天星,馬忠梅
(北京理工大學(xué) 計(jì)算機(jī)學(xué)院,北京 100081)
摘要:Android系統(tǒng)使用 OpenGL 的標(biāo)準(zhǔn)接口來支持3D圖形功能。通過處理CC3200下位機(jī)發(fā)送的數(shù)據(jù),計(jì)算出加速度芯片模型四邊形的4個(gè)頂點(diǎn)坐標(biāo)。系統(tǒng)使用OpenGL ES在窗口中顯示模型四邊形,能夠?qū)⑿酒藨B(tài)的3D形式準(zhǔn)確顯示到窗口中。通過分析數(shù)據(jù),可有效判斷出人體是否處于跌倒?fàn)顟B(tài)。
關(guān)鍵詞:CC3200;Android;OpenGL;跌倒檢測
引言
近年來,老人摔倒的問題越來越嚴(yán)重。為了在老人跌倒后能夠得到及時(shí)的處理,本文設(shè)計(jì)了一種基于Android智能手機(jī)和CC3200微控制器,并結(jié)合MMA7260加速度傳感器的老人跌倒檢測系統(tǒng)。
SimpleLink Wi-Fi CC3200是由TI公司研制的低功耗MCU平臺(tái),集成了高性能的ARM Cortex-M4處理器核和Wi-Fi網(wǎng)絡(luò)處理器,網(wǎng)絡(luò)通信穩(wěn)定可靠,并擁有完整的安全協(xié)議,其外接了多種設(shè)備,包括快速并行接口、SPI、UART串口、ADC模塊等。MMA7260是一款低功耗、低成本、高靈敏三軸加速度傳感器,其加速度以模擬電壓的形式輸出。通過CC3200的ADC模塊對MMA7260的加速度模擬電壓進(jìn)行轉(zhuǎn)換,并通過其Wi-Fi模塊與Android智能設(shè)備連接,在Android強(qiáng)大的計(jì)算能力和OpenGL庫的支持下,可以將MMA7260的姿態(tài)顯示到手機(jī)界面,然后通過對數(shù)據(jù)進(jìn)行分析,實(shí)現(xiàn)對老人跌倒的檢測。
1系統(tǒng)設(shè)計(jì)
1.1系統(tǒng)整體設(shè)計(jì)
系統(tǒng)主要由兩大模塊組成:CC3200下位機(jī)模塊和Android智能設(shè)備上位機(jī)模塊,其系統(tǒng)整體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)整體結(jié)構(gòu)
下位機(jī)CC3200采用TI-RTOS操作系統(tǒng)作為平臺(tái),利用RTOS的多線程能力,創(chuàng)建了兩個(gè)線程,分別用于對MMA7260的加速度模擬電壓值進(jìn)行A/D轉(zhuǎn)換和將得到的加速度數(shù)據(jù)利用TCP/Socket發(fā)送到上位機(jī)。Android上位機(jī)創(chuàng)建了一個(gè)Wi-Fi熱點(diǎn),下位機(jī)通過此熱點(diǎn)建立與上位機(jī)的通信。Android上位機(jī)接收到加速度電壓數(shù)據(jù)之后,首先計(jì)算芯片上3個(gè)坐標(biāo)軸與重力方向的夾角,然后計(jì)算芯片3個(gè)坐標(biāo)軸在地面坐標(biāo)系中的坐標(biāo),并計(jì)算芯片四邊形4個(gè)頂點(diǎn)在地面坐標(biāo)系中的坐標(biāo),最終通過OpenGL ES將坐標(biāo)軸和芯片四邊形繪制到窗口中。
1.2上位機(jī)軟件設(shè)計(jì)
使用一臺(tái)Android智能終端設(shè)備作為上位機(jī),建立與CC3200的連接,并循環(huán)接收加速度的電壓數(shù)據(jù),經(jīng)過一系列轉(zhuǎn)換得到芯片的姿態(tài)并顯示到界面上。
首先,需要建立一個(gè)SocketSever,等待CC3200的連接。為了使得手機(jī)和CC3200能夠連接在一起,需要讓手機(jī)和CC3200位于同一個(gè)局域網(wǎng)內(nèi),因此,需要使用該手機(jī)建立一個(gè)Wi-Fi熱點(diǎn),讓CC3200能夠連接并發(fā)送數(shù)據(jù)。
然后,SocketServer接收到一個(gè)Socket,并獲得其IP地址,新建一個(gè)文件用于保存接收到的數(shù)據(jù),其次獲取Socket的數(shù)據(jù)流,從中獲取加速度電壓數(shù)據(jù)。
接著根據(jù)電壓數(shù)據(jù)計(jì)算出芯片的3個(gè)坐標(biāo)軸與重力方向的夾角,根據(jù)夾角計(jì)算芯片的3個(gè)坐標(biāo)軸在地面坐標(biāo)系中的坐標(biāo)關(guān)系,從而計(jì)算芯片四邊形4個(gè)頂點(diǎn)的位置坐標(biāo),最后使用OpenGL ES將四邊形顯示在窗口中。
上位機(jī)程序流程圖如圖2所示。
圖2 上位機(jī)軟件設(shè)計(jì)流程圖
2上位機(jī)軟件實(shí)現(xiàn)
2.1連接網(wǎng)絡(luò)并獲得加速度數(shù)據(jù)
網(wǎng)絡(luò)連接使用TCP/Socket實(shí)現(xiàn)。首先,應(yīng)用程序建立一個(gè)SocketServer,將端口設(shè)置為與CC3200中一致,即5001,然后使用SocketServer的Accept方法等待CC3200連接本服務(wù)器,并得到連接Socket。
2.2根據(jù)加速度計(jì)算角度
得到3個(gè)坐標(biāo)軸加速度的值之后,可以計(jì)算3個(gè)坐標(biāo)軸與重力方向的角度。重力分解示意圖如圖3所示。
圖3 重力分解示意
將重力G沿3個(gè)坐標(biāo)軸方向分解,則:
Gcosθx=Gx
Gcosθy=Gy
Gcosθz=Gz
因此:
θx=arccos (Gx/G)
θy=arccos (Gy/G)
θz=arccos (Gz/G)
在實(shí)際計(jì)算中,由于采集到的加速度值并不只有重力加速度的分量,在運(yùn)動(dòng)狀態(tài)時(shí)還有比較大的運(yùn)動(dòng)加速度,因此,Gx、Gy、Gz的絕對值可能大于重力加速度g,此時(shí)無法計(jì)算arccos的值。在計(jì)算中,只需要求得角度值而并不需要加速度的具體數(shù)值,所以對Gx、Gy、Gz進(jìn)行閾值處理:
Gx=Gx Gy=Gy Gz=Gz 使得角度均可計(jì)算。 2.3根據(jù)角度計(jì)算向量 在跌倒檢測系統(tǒng)中,存在兩個(gè)不同的坐標(biāo)系:世界坐標(biāo)系和模型坐標(biāo)系。其中,世界坐標(biāo)系即大地坐標(biāo)系,其z坐標(biāo)軸與重力方向相反,此坐標(biāo)系相對于地面是靜止的。模型坐標(biāo)系,即CC3200或者M(jìn)MA7260芯片的坐標(biāo)系,本文中所述的采集得到的3個(gè)加速度方向即為此坐標(biāo)系的3個(gè)坐標(biāo)軸方向,即2.2節(jié)中所述的Gx、Gy、Gz。 本文需要計(jì)算模型坐標(biāo)系坐標(biāo)軸的單位向量在世界坐標(biāo)系中的坐標(biāo)。 一般情況下,芯片位置姿態(tài)固定,世界坐標(biāo)系中x、y方向可以任意選擇,如圖4所示,四邊形代表芯片位置,長坐標(biāo)軸為地面坐標(biāo)系,地面坐標(biāo)系不同但芯片位置相同。因此,為了計(jì)算方便,將兩個(gè)坐標(biāo)系的原點(diǎn)重合,并使得模型坐標(biāo)系的x軸位于世界坐標(biāo)系的yOz平面內(nèi)。 圖4 芯片位置姿態(tài)固定示意圖 首先計(jì)算模型坐標(biāo)系x軸單位向量的坐標(biāo)。由于x軸單位向量在yOz平面內(nèi),設(shè)其單位向量X=(0,yx,zx),如圖5所示,在yOz平面內(nèi),X向量與z軸的夾角為θx,因此X=(0,sin θx,cos θx)。 圖5 芯片x軸在世界 坐標(biāo)系中的位置 然后計(jì)算模型坐標(biāo)系y軸單位向量Y=(xy,yy,zy)的坐標(biāo)。對于此單位向量,其與世界坐標(biāo)系z軸的夾角為θy,因此: 同時(shí),y軸單位向量與x軸單位向量垂直,因此: 聯(lián)立上述方程組,可以得到: 得到x軸單位向量和y軸單位向量的坐標(biāo)后,可以得到z軸單位向量: X·Z=0 Y·Z=0 |Z|=1 然而,在本系統(tǒng)中,根據(jù)x軸單位向量和y軸單位向量便可完全確定模型坐標(biāo)系的xOy平面,即確定芯片在世界坐標(biāo)系中的姿態(tài),因z軸單位向量的表述比較復(fù)雜,因此不再計(jì)算z軸單位向量。 2.4顯示四邊形的頂點(diǎn)坐標(biāo)計(jì)算 圖6 模型四邊形 在得到模型坐標(biāo)系xOy平面的單位坐標(biāo)之后,即可計(jì)算模型四邊形的頂點(diǎn),即芯片四邊形在世界坐標(biāo)系中的頂點(diǎn)。如圖6所示,顯然,四邊形的4個(gè)頂點(diǎn)的坐標(biāo)分別為X+Y,-X+Y,-X-Y,X-Y。其中,X為模型坐標(biāo)系中x軸單位向量坐標(biāo),Y為模型坐標(biāo)系中y軸單位向量坐標(biāo)。 2.5OpenGL軟件設(shè)計(jì) 在本系統(tǒng)中,需要將芯片模型的姿態(tài)以3D形式顯示出來,因此采用Android 3D 引擎OpenGL ES。 在Android中使用GLSurfaceView來顯示 OpenGL 視圖。它提供了一個(gè)專門用于渲染3D 的接口類,即Renderer類,使用setRenderer(new MyRenderer())將GLSurfaceView和渲染接口Renderer類連接起來。實(shí)現(xiàn)Renderer需要它的3個(gè)接口:onSurfaceCreated()、onSurfaceChanged()、onDrawFrame()。其中,onSurfaceCreated()接口在創(chuàng)建窗口時(shí)調(diào)用,通常在此接口中對 OpenGL 做一些初始化工作,例如設(shè)置背景等。onSurfaceChanged()接口在窗口大小發(fā)生改變時(shí)調(diào)用,可以重新設(shè)置場景大小等。onDrawFrame()接口即為最重要的接口,所有繪圖操作都在此函數(shù)中實(shí)現(xiàn)。 當(dāng)OpenGL引擎啟動(dòng)之后,將會(huì)循環(huán)調(diào)用onDrawFrame()進(jìn)行繪圖。在onDrawFrame()中要完成清空屏幕、設(shè)置攝像機(jī)、繪圖任務(wù)。調(diào)用glClear()方法可以實(shí)現(xiàn)清空緩沖區(qū)任務(wù),使用gluLookAt()方法可以設(shè)置攝像機(jī)位置。其繪圖流程圖如圖7所示。 圖7 上位機(jī)繪圖流程圖 在繪圖時(shí),首先根據(jù)加速度計(jì)算得到的角度數(shù)據(jù)計(jì)算模型坐標(biāo)系的單位向量,并計(jì)算模型四邊形頂點(diǎn)坐標(biāo),將得到的數(shù)據(jù)放入Buffer準(zhǔn)備繪圖。繪圖主要代碼略——編者注。 首先申請一個(gè)ByteBuffer,并設(shè)置Buffer中點(diǎn)的繪圖順序,然后將坐標(biāo)以及顏色數(shù)據(jù)轉(zhuǎn)換為float型Buffer,并將頂點(diǎn)坐標(biāo)放入到floatbuffer中,其次使用glColor4f()設(shè)置繪圖時(shí)使用的顏色,也可使用顏色數(shù)組給每個(gè)頂點(diǎn)分別設(shè)置顏色,最后使用glVertexPointer()將數(shù)據(jù)放入繪圖緩沖區(qū)中,并使用glDrawArrays()進(jìn)行圖像繪制。主要繪制的圖像有5個(gè)坐標(biāo)軸,每個(gè)坐標(biāo)軸有兩個(gè)頂點(diǎn),是以GL_LINES的形式繪制;還有一個(gè)模型四邊形,4個(gè)頂點(diǎn)以GL_TRIANGLE_STRIP的形式繪制。 3實(shí)驗(yàn)結(jié)果及分析 在跌倒檢測前首先將數(shù)據(jù)保存在文件中并分析,以確定設(shè)備正常工作并得到傳感器的各狀態(tài)數(shù)值。 根據(jù)MMA7260用戶手冊,對任意方向,V0=1.65 V,R=0.8 V/g。由于采用分壓電路,CC3200中的Vout是實(shí)際Vout的一半。同時(shí),由于不同設(shè)備的差異性,V0并不嚴(yán)格等于1.65 V,R也不嚴(yán)格等于0.8 V/g,并且不同方向的數(shù)值并不嚴(yán)格相同。對于本系統(tǒng),因使用了分壓電路,以上數(shù)值均應(yīng)減少一半。將MMA7260穩(wěn)定放在標(biāo)準(zhǔn)位置,即讓芯片的x軸、y軸、z軸分別處于與重力方向相同并固定,經(jīng)過分壓電路的分壓處理,得到的數(shù)值如表1所列。當(dāng)x軸上加速度為 -1g時(shí),其電壓平均值為1.011 V;當(dāng)加速度為0時(shí),其電壓平均值為0.733 V,當(dāng)加速度為1g時(shí),其電壓平均值為0.42 V,并計(jì)算得到其分辨率為0.275 V/g,即加速度每變化1g,x軸電壓值變化0.275 V。同樣,與x軸類似,當(dāng)y軸與z軸上加速度為0時(shí),其電壓值分別為0.770 V和0.788 V,y軸和z軸上分辨率同樣為0.275 V。三軸加速度電壓如表1所列。 表1 三軸加速度電壓 實(shí)際加速度為0時(shí),電壓值和分辨率都與用戶手冊誤差較大。因此,由2.1節(jié)可知,對于3個(gè)方向上的加速度值的計(jì)算公式為: 實(shí)現(xiàn)硬件連接、組網(wǎng)與程序之后,對其進(jìn)行測試。當(dāng)系統(tǒng)正常運(yùn)行時(shí),手機(jī)端軟件界面如圖8所示。界面中顯示了連接狀態(tài)、連接IP和端口,中間黑色框即為OpenGL的View窗口,顯示了芯片的姿態(tài);同時(shí),還顯示了3個(gè)軸方向得到的加速度電壓值,以及計(jì)算得到的模型坐標(biāo)系3個(gè)軸與重力方向的角度值。 圖8 不同狀態(tài)時(shí)系統(tǒng)界面 當(dāng)MMA7260處于不同姿態(tài)時(shí),手機(jī)上顯示的姿態(tài)與MMA7260的姿態(tài)有較為一致的變化,MMA7260芯片處于不同姿態(tài)時(shí)的結(jié)果略——編者注。 從上述結(jié)果可以看到,手機(jī)界面中顯示的四邊形姿態(tài)與MMA7260芯片姿態(tài)基本一致,能夠較準(zhǔn)確地識(shí)別姿態(tài)。 將MMA7260和CC3200固定在一起,并將CC3200板與人體平行,佩戴在身體腰部靠下位置(這一部位比較穩(wěn)定,在一般的彎腰、行進(jìn)、坐下等動(dòng)作中對跌倒判斷影響比較小)。 結(jié)語 本文利用SimpleLink Wi-Fi CC3200微控制器、MMA7260和Android智能終端設(shè)備,設(shè)計(jì)了一種跌倒檢測系統(tǒng),能夠較好地檢測到人體摔倒并進(jìn)行警報(bào)。系統(tǒng)對CC3200發(fā)送的加速度數(shù)據(jù)進(jìn)行處理,通過OpenGL將芯片的姿態(tài)顯示在窗口中。通過對加速度數(shù)據(jù)進(jìn)行分析,可以有效判斷出人體所處狀態(tài),當(dāng)摔倒時(shí)能夠及時(shí)作出判斷并發(fā)出報(bào)警。 參考文獻(xiàn) [1] TI.CC3200 SimpleLink Wi-Fi and Internet-of-Things Solution,a Single-Chip Wireless MCU[EB/OL].[2015-09].http://www.ti.com/lit/ds/symlink/cc3200.pdf. [2] 陳鈺琨.LM4F232pQD與MMA7260加速度傳感器的跌倒檢測[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013(6):49-52. [3] TI.TI-RTOS 2.14 User’s Guide[EB/OL].[2015-09].http://www.ti.com/lit/ug/spruhd4j/spruhd4j.pdf. [4] TI.CC3200 SimpleLink Wi-Fi and Internet-of-Things Solution,a Single Chip WirelessMCU Technical Reference Manual[EB/OL].[2015-09].http://www.ti.com/lit/ug/swru367b/swru367b.pdf. 趙旭強(qiáng)、高天星(碩士研究生),馬忠梅(副教授):主要研究方向?yàn)榍度胧较到y(tǒng)和物聯(lián)網(wǎng)應(yīng)用。 Upper Computer Design of Fall Detection System Based on CC3200 and Android※ Zhao Xuqiang,Gao Tianxing,Ma Zhongmei (School of Computer Science and Technology,Beijing Institute of Technology,Beijing 100081,China) Abstract:Using a standard interface of OpenGL,Android system can support 3D graphics.In this paper,the four vertex coordinates of the chip quadrilateral model are calculated by processing data received from the lower computer of CC3200.OpenGL ES is applied to display this quadrangle in the window of Android system.The chip status can be presented in 3D form exactly in the window.By analyzing the data,whether the human has falling down can be judged efficiently. Key words:CC3200;Android;OpenGL;fall detection 收稿日期:(責(zé)任編輯:薛士然2015-09-20) 中圖分類號(hào):TP368 文獻(xiàn)標(biāo)識(shí)碼:A