張 磊,陳 鋒,楊文浩,李泓臻
(1.珠??萍紝W(xué)院,廣東 珠海 519041;2.深圳市興奇宏科技有限公司,廣東 深圳 518100;3.深圳市合元科技有限公司,廣東 深圳 518128)
該報(bào)警系統(tǒng)主要是通過(guò)識(shí)別人體四肢和軀干各部位的加速度和角速度,通過(guò)算法將加速度和角速度轉(zhuǎn)化為人體各部位的運(yùn)動(dòng)軌跡,從而簡(jiǎn)易地判別人體姿態(tài),去甄別是否摔倒、發(fā)出報(bào)警。其加速度與角速度的數(shù)據(jù)主要來(lái)源于MPU6050六軸傳感器。傳感器采集數(shù)據(jù)后,通過(guò)算法進(jìn)行一定的數(shù)據(jù)處理,分析出人體時(shí)間段內(nèi)姿態(tài)情況,如正常的行走、直立、靜坐。
人體姿態(tài)數(shù)據(jù)的采集部位主要為雙手手腕、雙腳腳腕以及腰部,每一個(gè)部位都有一個(gè)NRF51822藍(lán)牙芯片作為主控,通過(guò)多對(duì)一的無(wú)線藍(lán)牙通信,將MPU6050采集到的數(shù)據(jù)集中到一個(gè)藍(lán)牙主機(jī)中。藍(lán)牙主機(jī)通過(guò)串口通信,把人體姿態(tài)數(shù)據(jù)傳輸給STM32F103ZET6單片機(jī)。單片機(jī)驅(qū)動(dòng)ATK-GM510模塊,使用TCP協(xié)議將姿態(tài)數(shù)據(jù)遠(yuǎn)程傳輸至云服務(wù)器。云服務(wù)器作為數(shù)據(jù)中轉(zhuǎn)中心,把姿態(tài)數(shù)據(jù)發(fā)送到MATLAB上對(duì)數(shù)據(jù)進(jìn)行運(yùn)算處理,模擬繪制出人體的運(yùn)動(dòng)姿態(tài),通過(guò)合加速度和人體姿態(tài)判斷是否摔倒,并向終端反饋信息。如果發(fā)生跌倒,就會(huì)向終端發(fā)送GPS定位信息及報(bào)警信號(hào),終端和佩戴設(shè)備都會(huì)發(fā)出蜂鳴警報(bào)。并且云服務(wù)器與終端可以同時(shí)接收多組用戶的信息,更充分地利用資源,使整體設(shè)備可以進(jìn)行一對(duì)多的監(jiān)控,便于在更多環(huán)境和場(chǎng)景下使用。該設(shè)備系統(tǒng)的整體設(shè)計(jì)框圖如圖1所示。

圖1 跌倒遠(yuǎn)程報(bào)警系統(tǒng)設(shè)計(jì)框圖
1.2.1 六軸傳感器模塊
本設(shè)計(jì)中進(jìn)行姿態(tài)數(shù)據(jù)采集的傳感器模塊為MPU6050,選用原因?yàn)樗侨蚴桌闲粤S運(yùn)動(dòng)處理組件,其集成了加速度計(jì)和角速度計(jì),可以大大減少穿戴設(shè)備的體積,且普及度高,價(jià)格相對(duì)便宜;角速度全格感測(cè)范圍可達(dá)±2 000°/s,可準(zhǔn)確跟蹤快速和慢速動(dòng)作;加速度全格感測(cè)范圍可達(dá)±16g,同時(shí)具備16 Bit數(shù)字輸出;使用IIC傳輸協(xié)議,適用于各種主控芯片,傳輸速率最高可達(dá)400 kHz;內(nèi)部繼承的DMP處理引擎可以將角速度轉(zhuǎn)換為歐拉角并直接讀取,為MCU減少了大量的數(shù)據(jù)處理;可以在后續(xù)增強(qiáng)整體設(shè)備的功能時(shí),為MCU留出更多的空間,也可在版本穩(wěn)定之后選用數(shù)據(jù)處理功能較弱的MCU,降低設(shè)備成本。
1.2.2 藍(lán)牙模塊
藍(lán)牙部分選用的是NRF51822芯片。藍(lán)牙技術(shù)作為一種近距離、低功耗的無(wú)線傳輸協(xié)議,被廣泛運(yùn)用到各個(gè)領(lǐng)域。該協(xié)議連接迅速,數(shù)據(jù)傳輸穩(wěn)定。利用無(wú)線協(xié)議也可以使得設(shè)備整體更加簡(jiǎn)潔、方便使用。NRF51822不僅內(nèi)部自帶藍(lán)牙模塊可以進(jìn)行數(shù)據(jù)傳輸,還可以作為主控芯片驅(qū)動(dòng)MPU6050進(jìn)行人體姿態(tài)數(shù)據(jù)采集工作,進(jìn)一步減小了設(shè)備的整體體積,更加便于穿戴。NRF51822支持藍(lán)牙4.0協(xié)議,數(shù)據(jù)的傳輸速度也相對(duì)較快。
1.2.3 系統(tǒng)設(shè)計(jì)
上電初始化延時(shí):身體各部位的MCU上電后經(jīng)過(guò)一定延時(shí),再對(duì)NRF51822和MPU6050進(jìn)行初始化,使佩戴者有足夠的時(shí)間調(diào)整自身姿態(tài),與設(shè)備模擬的初始姿態(tài)一致,讓姿態(tài)模擬更加準(zhǔn)確。
數(shù)據(jù)采集頻率高于發(fā)送頻率:在程序的實(shí)際開(kāi)發(fā)中,因?yàn)樗{(lán)牙廣播傳輸不夠穩(wěn)定,存在數(shù)據(jù)丟包等問(wèn)題,使得數(shù)據(jù)失真或數(shù)據(jù)量不夠。所以在實(shí)際使用中,姿態(tài)數(shù)據(jù)的采集頻率比發(fā)送頻率更高,發(fā)送給云服務(wù)器的數(shù)據(jù)是從采集到的數(shù)據(jù)中進(jìn)行一定規(guī)律的篩選和調(diào)整的,從而保證了云服務(wù)獲取到的整體姿態(tài)數(shù)據(jù)的穩(wěn)定性。
周期性廣播:為了使廣播數(shù)據(jù)和采集數(shù)據(jù)2個(gè)任務(wù)互不影響,會(huì)利用NRF51822內(nèi)部的藍(lán)牙協(xié)議棧,令廣播進(jìn)行定期休眠。在廣播休眠此期間進(jìn)行姿態(tài)數(shù)據(jù)的讀取和處理,避免了2個(gè)任務(wù)同時(shí)訪問(wèn)數(shù)據(jù)空間,發(fā)生沖突造成數(shù)據(jù)混亂。
幀同步信號(hào):?jiǎn)纹瑱C(jī)會(huì)根據(jù)數(shù)據(jù)發(fā)送的時(shí)間間隔和自定義的幀同步校驗(yàn)位,判斷是否為同一組數(shù)據(jù),通過(guò)自定義的字頭判斷為哪個(gè)部位的數(shù)據(jù),進(jìn)行數(shù)據(jù)整理再發(fā)送至云端。當(dāng)某一部位的數(shù)據(jù)沒(méi)有及時(shí)更新時(shí)(設(shè)備故障),藍(lán)牙會(huì)停止發(fā)送數(shù)據(jù)(全部復(fù)寫(xiě)為0)。此時(shí)藍(lán)牙主機(jī)會(huì)發(fā)送信號(hào)至終端,提示用戶有設(shè)備出現(xiàn)故障,需要重啟或更換。
LED指示燈及按鍵:TCP連接成功,數(shù)據(jù)發(fā)送成功,藍(lán)牙多對(duì)一連接成功等都配備了相應(yīng)的LED指示燈進(jìn)行提示,方便用戶自己進(jìn)行檢查與維護(hù),且各部位設(shè)備皆有復(fù)位按鍵方便重啟。同時(shí)還有按鍵強(qiáng)制結(jié)束蜂鳴警示,以便在設(shè)備進(jìn)行誤報(bào)警時(shí)進(jìn)行手動(dòng)解除,設(shè)備也會(huì)對(duì)失誤報(bào)警進(jìn)行記錄,方便開(kāi)發(fā)者對(duì)準(zhǔn)確度進(jìn)行校正修改。
1.2.4 主控系統(tǒng)軟件設(shè)計(jì)
主控系統(tǒng)軟件設(shè)計(jì)流程如圖2所示。

圖2 主控系統(tǒng)軟件設(shè)計(jì)流程圖
整個(gè)主控設(shè)備以STM32作為主控芯片,先與云服務(wù)器通過(guò)TCP協(xié)議進(jìn)行連接。當(dāng)網(wǎng)絡(luò)數(shù)據(jù)傳輸通道連接成功并且穩(wěn)定后,使能藍(lán)牙的串口中斷。此時(shí)分為2個(gè)子任務(wù):一個(gè)是主控控制4G模塊以5 Hz的頻率向云服務(wù)器發(fā)送人體姿態(tài)數(shù)據(jù),另一個(gè)任務(wù)是判斷4G模塊上報(bào)的信息(即云服務(wù)器反饋)是否為報(bào)警信號(hào)。若是,則蜂鳴器模擬報(bào)警、取消藍(lán)牙串口使能,停止姿態(tài)數(shù)據(jù)的獲取,同時(shí)驅(qū)動(dòng)4G模塊獲取當(dāng)前GPS的定位信息,通過(guò)云服務(wù)器將定位信息發(fā)送給綁定設(shè)備的終端。
1.2.5 手環(huán)軟件設(shè)計(jì)
手環(huán)部分主要以藍(lán)牙芯片NRF51822為核心。對(duì)其時(shí)鐘、IIC協(xié)議初始化完成后,驅(qū)動(dòng)其對(duì)MPU6050進(jìn)行初始化[1]。然后以12.5 Hz的頻率從MPU6050中提取數(shù)據(jù),而廣播以10 Hz的頻率,向藍(lán)牙主機(jī)發(fā)送姿態(tài)數(shù)據(jù)。因?yàn)榭紤]到廣播數(shù)據(jù)丟包和廣播與發(fā)送數(shù)據(jù)沖突等問(wèn)題,可能會(huì)造成從機(jī)發(fā)出的數(shù)據(jù)量無(wú)法達(dá)到需求,所以令藍(lán)牙提取姿態(tài)數(shù)據(jù)的頻率比廣播頻率更高一些,這樣就可以讓每個(gè)藍(lán)牙從機(jī)發(fā)送至主機(jī)的數(shù)據(jù)量得到保證。同時(shí)廣播設(shè)定了一定的休眠期,藍(lán)牙主機(jī)利用休眠的空隙來(lái)進(jìn)行數(shù)據(jù)的處理和發(fā)送。這樣就可以避免提取數(shù)據(jù)和發(fā)送數(shù)據(jù)2個(gè)任務(wù)同時(shí)訪問(wèn)數(shù)據(jù)空間,產(chǎn)生沖突而導(dǎo)致數(shù)據(jù)發(fā)送不全或數(shù)據(jù)丟失的問(wèn)題。
1.2.6 云服務(wù)器上基于JAVA的TCP客戶端
云服務(wù)器上會(huì)利用JAVA先建立一個(gè)Socket Server(TCP服務(wù)器)實(shí)時(shí)監(jiān)聽(tīng)是否有新客戶端連接,然后建立一個(gè)客戶端集合對(duì)象。每當(dāng)有一個(gè)新的客戶端連接至服務(wù)器,JAVA都會(huì)新增一個(gè)線程,實(shí)現(xiàn)多臺(tái)客戶端連接服務(wù)器。每當(dāng)有一臺(tái)客戶端發(fā)送數(shù)據(jù),服務(wù)器都換轉(zhuǎn)發(fā)給其他客戶端。每個(gè)客戶端都會(huì)對(duì)獲取到的數(shù)據(jù)IP和ID進(jìn)行識(shí)別,以此來(lái)甄別是否為互相綁定的設(shè)備客戶端,達(dá)到定向接收的效果。
本系統(tǒng)判斷摔倒的判據(jù)分為2部分,第一部分是通過(guò)合加速度的大小,判斷是否有過(guò)大的瞬時(shí)加速度,從而判斷人是否摔倒[2]。為了使判斷更加準(zhǔn)確,加入了第二部分——人體姿態(tài)檢測(cè)。通過(guò)檢測(cè)人體當(dāng)前的姿態(tài),進(jìn)行輔助判斷。
因?yàn)镸PU6050存在著誤差,且各地的重力加速度有些許差異。在設(shè)備使用前會(huì)先上電檢測(cè),對(duì)傳感器的值進(jìn)行補(bǔ)償,使傳感器下一次上電后的值更加精確。各方向上的加速度和合加速度公式如下。
各方向加速度公式為:

合加速度[3]公式為:

其中,a原為傳感器的原始數(shù)據(jù),g為重力加速度。通過(guò)靜止?fàn)顟B(tài)時(shí),傳感器測(cè)得的原始數(shù)據(jù)計(jì)算出該傳感器在當(dāng)?shù)氐闹亓铀俣萭,后續(xù)的加速度計(jì)算所用到的重力加速度都基于此值。
補(bǔ)償值得到后即可進(jìn)行上電使用。MATLAB通過(guò)數(shù)據(jù)計(jì)算合加速度,若合加速度大于設(shè)定的閾值,再通過(guò)演示的姿態(tài)輔助判斷。
本系統(tǒng)所使用的傳感器為MPU6050,通過(guò)該傳感器可以讀出加速度和角速度的原始數(shù)據(jù),利用自帶的數(shù)字運(yùn)動(dòng)處理器(Digital Motion Processor)硬件加速引擎,可以將原始數(shù)據(jù)轉(zhuǎn)換為四元組數(shù)據(jù),通過(guò)IIC接口與主控進(jìn)行數(shù)據(jù)傳輸,在主控進(jìn)而完成歐拉角的計(jì)算。其中,DMP輸出的四元數(shù)是q30格式(浮點(diǎn)數(shù)擴(kuò)大230倍)。想要換算成歐拉角,必須先將其轉(zhuǎn)換為浮點(diǎn)數(shù),也就是除以230,然后再進(jìn)行計(jì)算。
將q30格式轉(zhuǎn)換為浮點(diǎn)數(shù):

計(jì)算出四元數(shù)后,可以通過(guò)四元數(shù)計(jì)算出歐拉角:

在MATLAB程序中,建立三維坐標(biāo)系,通過(guò)歐拉角可以得知,每個(gè)傳感器在x、y、z三軸的轉(zhuǎn)向和所轉(zhuǎn)的角度,便可得知傳感器的坐標(biāo)軸與MATLAB所建立的三維坐標(biāo)軸之間的實(shí)時(shí)對(duì)應(yīng)關(guān)系。再利用三軸加速度數(shù)據(jù)進(jìn)行傅里葉變換,積分處理,得到各傳感器的運(yùn)動(dòng)軌跡(即人體四肢與腰部的運(yùn)動(dòng)軌跡)。進(jìn)而演示出人體四肢的簡(jiǎn)單運(yùn)動(dòng),模擬出人體的姿態(tài)[4]。
穿戴設(shè)備上電時(shí)會(huì)有一定的延時(shí),再進(jìn)行初始化,使使用者在時(shí)間內(nèi)以固定的姿勢(shì)靜止,保證人體的姿態(tài)與MATLAB開(kāi)始計(jì)算的初始姿態(tài)一致,便可進(jìn)行姿態(tài)的實(shí)時(shí)演示。當(dāng)檢測(cè)出合加速度大于閾值時(shí),若演示出的姿態(tài)其腰部高度大于閾值,且其余四肢亦正常活動(dòng),則不判斷為摔倒,故不發(fā)出警報(bào);若演示出的姿態(tài)其腰部低于閾值,四肢活動(dòng)異常,則發(fā)出警報(bào)。
目前姿態(tài)的模擬準(zhǔn)確度還不是很高,其主要原因有2個(gè):一是MPU6050模塊自身具有一定的誤差,得到的歐拉角也存在零漂;二是目前對(duì)姿態(tài)采集的頻率還不夠高。當(dāng)加速度突然變化時(shí),捕捉到的加速度的值不夠準(zhǔn)確。使得演示的人體姿態(tài)不夠精準(zhǔn)。進(jìn)行進(jìn)一步研究時(shí),計(jì)劃通過(guò)一些濾波算法,以及提高數(shù)據(jù)的采集頻率,令人體姿態(tài)模擬更加的完善。
2.3.1 MATLAB演示部分軟件流程圖
系統(tǒng)基于MATLAB R2019b進(jìn)行設(shè)計(jì)。接收程序通過(guò)TCP/IP協(xié)議與云服務(wù)器進(jìn)行通信,接收的數(shù)據(jù)經(jīng)過(guò)排序處理后輸出形成文件并保存,然后監(jiān)測(cè)報(bào)警信息。演示程序開(kāi)始后循環(huán)檢測(cè)文件中的數(shù)據(jù)是否更新,若無(wú)則繼續(xù)檢測(cè),有則進(jìn)行數(shù)據(jù)解算,解算出來(lái)的數(shù)據(jù)改變圖像中人四肢的三維坐標(biāo)位置實(shí)現(xiàn)姿態(tài)演示。并通過(guò)數(shù)據(jù)中腰部傳感器測(cè)出的3個(gè)方向加速度及角度來(lái)綜合判斷用戶的異常情況,若有異常情況改變報(bào)警數(shù)據(jù),接收程序監(jiān)測(cè)到報(bào)警信息后將向云服務(wù)器發(fā)送報(bào)警信息[5]。
2.3.2 監(jiān)測(cè)報(bào)警系統(tǒng)
報(bào)警系統(tǒng)主要是為了讓手環(huán)佩戴者的親屬知道姿態(tài)異常情況。如佩戴者是老人或者小孩,可以第一時(shí)間知道摔倒等情況,采取應(yīng)急措施。通過(guò)建立穩(wěn)定的TCP連接,只要姿態(tài)解算出現(xiàn)異常,立刻就會(huì)通過(guò)服務(wù)器向親屬的報(bào)警系統(tǒng)發(fā)出信號(hào),通知佩戴者的情況。
本設(shè)計(jì)雖然也是基于MPU6050六軸姿態(tài)傳感器,但時(shí)相比于其他摔倒檢測(cè)裝置,在設(shè)備體積上更加輕便小巧,便于穿戴。且利用ATK-GM510模塊后,無(wú)論是室內(nèi)還是室外,只要有網(wǎng)絡(luò)信號(hào)都可進(jìn)行遠(yuǎn)距離數(shù)據(jù)傳遞。該設(shè)備大部分的數(shù)據(jù)處理即運(yùn)算都在云服務(wù)器上完成,不需要實(shí)際的硬件設(shè)備,使得設(shè)備維護(hù)和使用的更加的方便。且藍(lán)牙芯片NRF51822還有多個(gè)可驅(qū)動(dòng)的空閑IO口,可以在該設(shè)備的基礎(chǔ)上集成更多的外設(shè),實(shí)現(xiàn)更多的功能,具有更多的提升空間。本文討論的跌倒遠(yuǎn)程報(bào)警系統(tǒng)除了合加速度的判斷之外,還加入了人體姿態(tài)模擬來(lái)進(jìn)行輔助判斷,不僅提高了準(zhǔn)確率,并且人體姿態(tài)模擬還可以進(jìn)行更多的應(yīng)用,具有一定的創(chuàng)新性、綜合性以及一定的市場(chǎng)價(jià)值。