胡輝翼 韓燕國 荊琳 王威
摘要:如今GPS等導航定位服務已發展相當成熟,但在室內由于信號被遮擋,往往無法得到較準確的定位。同時隨著我國老齡人口數量逐年增加,難免有老年人在外意外摔倒,若不能得到及時救治極可能使情況惡化。因此本文提出并設計一款基于Android實現摔倒識別與自主定位的手機APP,通過讀取并處理加速度計等傳感器的數據,大致判斷手機持有者是否摔倒,在地圖上確定出運動軌跡和當前位置,并根據情況通知家人以避免危險。
關鍵詞:定位導航;加速度傳感器;摔倒辨識
中圖分類號:TP311.52 文獻標識碼:A 文章編號:1007-9416(2018)05-0119-03
1 引言
隨著科學技術的不斷發展,國民經濟水平的不斷增加,智能手機的普及率越來越高。由于手機硬件的性能大幅提升,軟件功能越來越豐富,當代的智能手機已不只是一個簡單的通訊工具,它改變了人們的生活方式,成為了日常生活的必需品。在這樣的大背景下,2007年由谷歌公司推出的Android手機系統,憑借自身方便、易用的優勢,成為了最受歡迎的手機操作系統。智能手機基于GPS(Global Positioning System)的室外導航功能,是人們最常使用的功能之一,應用廣泛。然而,在室內的環境下,由于建筑物或者其他復雜環境的干擾,GPS信號微弱,無法有效導航。與此同時,針對老年人用戶群體,新聞中常有報道老年人摔倒,路人不敢上前幫扶,而其家人并不知情,摔倒老人無法得到及時救助,以至于面臨危險。該文針對以上問題,本文提出并設計一款能夠實現摔倒辨識與室內定位的Android手機APP,通過實時定位,在地圖上繪制出運動軌跡,同時讀取加速度計等傳感器的數據,通過算法判斷運動情況,對用戶的摔倒進行大致的判斷,并根據情況及時通知家人。
2 關鍵技術
2.1 Android操作系統簡介
Android是一種基于Linux的自由及開放源代碼的操作系統,主要應用于移動設備,如智能手機和平板電腦。2007年,Google與84家硬件制造商、軟件開發商及電信營運商組建開放手機聯盟共同研發改良Android系統。2008年HTC在美國發布了第一部搭載Android的智能手機。據有關數據統計,截止2016年,Android操作系統在中國的市場占有率超過了80%。
2.2 傳感器
Android系統提供了對多種傳感器的支持,如加速度傳感器、重力傳感器等。
在Android系統中,用一個標準的三維坐標系來表達數據值,對于大多數傳感器來說,當設備放置在默認的方向時,即手機正面豎直放置,坐標系和設備的屏幕相關。在這款APP中,主要用到了加速的傳感器。手機加速度傳感器的坐標軸如下:
x方向就是手機的水平方向,右為正;
y方向就是手機的水平垂直方向,前為正;
z方向就是手機的空間垂直方向,天空的方向為正,地球的方向為負(圖1)。
3 系統設計與功能實現
3.1 用戶界面
主界面布局包含兩個按鈕控件,使用switch通過不同的id 獲取到按鈕的信息:
(1)按鈕一,btn_sms,設置收信人。輸入指定對象的手機號碼,在軟件識別到用戶發生了摔倒動作后,實現自動給指定的手機號碼發送求助短信。同時建立緩存來保存手機號碼,方便第一次輸入手機號碼之后,再次使用軟件時,上次設定的手機號碼為默認的號碼,可以跳過設置號碼步驟,直接進入地圖環節。如果需要更換指定聯系人的聯系方式,也可以重新按下該按鈕,設置新的手機號碼。
(2)按鈕二,btn_usemap,打開地圖。點擊按鈕打開地圖,為了提高精度,此處使用高德地圖提供的開放API 接口。高德Web服務API向開發者提供HTTP接口,開發者可通過這些接口使用各類型的地理數據服務,返回結果支持JSON和XML格式。Web服務API對所有用戶開放。使用本組服務之前,需要申請應用Key。不同類型用戶可獲取不同的數據訪問能力。
3.2 調用高德地圖
使用高德地圖提供的開放API接口,將PackgeName導入到API中,添加相應的so庫,導入依賴調用高德地圖:
android:value="300ba53ad8fb0139a2f19bb14ca42675"> 配置service 標簽 獲取API 權限,對地圖定位進行操作: 3.3 定位與軌跡繪制 (1)建立公共類Util類,獲取定位并將定位信息返回:調用AMap Location接口,獲取到定位的經緯度和街道地址信息等,將獲取的信息放入Buffer緩沖中,提高讀取效率。之后使用靜態方法public synchronized static LatLng getLatlng(AMapLocation aMapLocation) 來返回需要的信息。 (2) 初始化定位信息,使用手機的高精度定位模式,在條件允許的情況下優先使用高精度定位方式:使用Location 方法獲取到定位需要的相關屬性的初始化,進行配置。使用時獲取手機的GPS定位權限,數據權限以及藍牙等定位權限,用戶在使用中會彈出相應的權限獲取窗口,獲得同意后APK 才可以進行使用和定位。用戶在打開地圖后點擊定位藍點,就可以將界面獲取到手機所在的位置,手指伸縮來放大地圖。 a、設置監聽,不斷地獲取到手機所在的定位信息,并更新定位點
mLocationClient.setLocationListener(this);
b、 配置高精確的定位模式,優先使用最高精度的定位,但是耗電量會有增加。
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);
c、獲取到GPS定位返回的地位地址等定位信息。
mLocationOption.setNeedAddress(true);
mLocationOption.setLocationCacheEnable(false);
d、設置定位刷新時間為3分鐘 即使每三分鐘定位一次
mLocationOption.setInterval(3*60*1000);
(3)軌跡繪制:
通過Util的getLatlng方法獲取到Util類返回的經緯度信息,令第一次定位點為newLog,第二次刷新后的定位點為OldLog, 將兩次的經緯度信息分別傳入的LatLng中進行坐標的判斷:
如果坐標(經緯度)在-180.0D <= var3 && var3 < 180.0D則為正常的維度信息,可以使用,反之若var1 < -90.0D || var1 > 90.0D則為無效坐標,對獲取到的坐標信息重新進行Math.max(-90.0D, Math.min(90.0D, var1));運算獲取最大的坐標信息并重新賦值后傳出作為有效的坐標點,獲取前后兩次坐標分別進行判斷后,通過AMap中的addPolyline方法在兩個點之間畫出平滑的折線。同時折線的寬度,顏色等屬性均可以通過該方法進行設置,此外通過設置定位的刷新時間來使折現更加的流暢舒服。
3.4 摔倒辨識
通過讀取手機加速度的數據來判斷持有者的狀態,但是通過手機的三維加速度坐標系只能做出大致判斷。如果需要更加精確的判斷還需要通過佩戴相應的數據收集器來采集人體變化如:心跳,呼吸等等。
假設z軸方向為重力加速度的方向,平均重力加速度9.8m/s^2,而人體的擺動會讓豎直向下的方向獲取一個加速度值,人體在正常的浮動下,取g=10為各地的重力加速度初值,若x||y||z>10則某一軸為重力豎直方向。
由公式a=(v2-v1)/t知:
a=dv/dt(在a-->0)時,人體運動時在水平方向的vx=v0,豎直方向vy=0;當人體突然摔倒,水平方向獲取一個加速度,豎直方向也獲取到一個加速度。因此在水平方向上加速度a=v-v0/t,因此手機的加速度傳感器會獲取到水平方向的加速度變化并增大,同理在豎直方向上a也會瞬間增大再減少到10,于是獲取到手機加速度傳感器的參數變化并打印后,使用MATLAB對數據進行分析,取相對穩定的數值,并取整后作為加速度參數的判斷條件。
x,y,z三軸在不同的情況下,加速度所在的軸不一樣但是參數變化是相同的,三個軸的參數設置為:
手機橫放,屏幕朝向周圍:檢測到z>4&&y;>3之后,x>18;
水平放置:x>3&&y;>4之后,z>18;
豎直放置:x>3&&z;>4之后,y>18。
4 APP的功能測試
在摔倒識別與自主定位手機APP的測試方面,選擇對北京林業大學工學院部分學生進行試用,來檢測實用性,技術內容和測試結果見表1。
5 結語
本文首先對目前導航服務技術的背景及約束進行了闡述,簡要介紹了Android操作系統,并對相關傳感器進行了介紹。在APP的系統設計部分,對各項功能進行了模塊的劃分,同時對用戶界面設計、地圖調用、傳感器的利用、運動軌跡繪制、摔倒辨識的算法實現做了詳細的說明。從本文的介紹的得知,基于Android的摔倒識別與自主定位系統在室內GPS信號受到阻擋而削弱的環境下,能實現定位以及軌跡繪制,并提供服務用戶的導航服務;同時在有意外事故發生用戶摔倒時,能提供相應的檢測與辨識,給出能夠發送定位短信這樣的的解決方案,具有良好的市場前景。
參考文獻
[1]朱建佳.基于Android系統的室內導航系統的設計與實現[D].北京:北京郵電大學,2014.
[2]王立劍.基于Android平臺的手機室內定位及導航的設計與實現[D].山東:中國海洋大學,2013.
[3]趙康.基于Android平臺的室內三維導航系統的研究與實現[A].山西:山西省地圖院,2016.