1.背景
本工程實踐項目是一個基於藍牙的定位APP,總共分為兩個階段。第一階段以收集數據為主,通過手機收集當前位置藍牙信標的RSSI和GPS數據,上傳給服務器以訓練模型;第二階段,通過當前位置所接收到的藍牙信標數據輸入機器學習模型獲得當前的位置信息。最后可以通過APP繪制用戶路徑或提供一定范圍內的導航服務。
2.軟件設計方案
2.1系統架構
本項目主要采用MVC架構。MVC指MVC模式的某種框架,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分成三個核心部件:模型、視圖、控制器。MVC是一種模式,確切的說它不是一種設計模式,它是多種設計模式的組合,並不僅僅只是一個單獨的一個模式。
View層,單獨實現了組合模式
Model層和View層,實現了觀察者模式
View層和Controller層,實現了策咯模式
2.2接口API
接口說明 | 添加藍牙信標設備 |
接口地址 | /device/add |
請求方式 | post |
請求參數 | GPS,設備MAC地址,設備名稱 |
響應數據 | 200成功 400失敗 |
備注 |
接口說明 | 登錄 |
接口地址 | /user/login |
請求方式 | post |
請求參數 | 用戶名,密碼 |
響應數據 | 200成功 400失敗 |
備注 |
接口說明 | 上傳藍牙信標數據 |
接口地址 | /data/update |
請求方式 | post |
請求參數 | GPS,設備MAC地址,時間戳,用戶Id,RSSI |
響應數據 | 200成功 400失敗 |
備注 |
接口說明 | 請求定位 |
接口地址 | /location |
請求方式 | post |
請求參數 | 藍牙信標RSSI |
響應數據 | 200成功 當前GPS信息 400失敗 |
備注 |
2.3系統視圖
2.3.1分解視圖
2.3.2依賴視圖
依賴視圖展現了軟件模塊之間的依賴關系。比如一個軟件模塊A調用了另一個軟件模塊B,那么我們說軟件模塊A直接依賴軟件模塊B。如果一個軟件模塊依賴另一個軟件模塊產生的數據,那么這兩個軟件模塊也具有一定的依賴關系。依賴視圖在項目計划中有比較典型的應用。比如它能幫助我們找到沒有依賴關系的軟件模塊或子系統,以便獨立開發和測試,同時進一步根據依賴關系確定開發和測試軟件模塊的先后次序。依賴視圖在項目的變更和維護中也很有價值,比如它能有效幫助我們理清一個軟件模塊的變更對其他軟件模塊帶來影響范圍。
依賴是一種使用的關系,即一個類的實現需要另一個類的協助,所以要盡量不使用雙向的互相依賴。在代碼上主要表現為局部變量、方法的參數或者對靜態方法的調用。
2.3.3執行視圖
執行視圖展示了系統運行時的時序結構特點,比如流程圖、時序圖等。執行視圖中的每一個執行實體,一般稱為組件(Component),都是不同於其他組件的執行實體。如果有相同或相似的執行實體那么就把它們合並成一個。
2.3.4部署視圖
部署圖描述了一個系統運行時的硬件節點,在這些節點上運行的軟件構件將在何處物理運行以及它們將如何彼此通信的靜態視圖。部署圖包括兩種基本模型元素:節點和節點間的連接。每個模型中,僅包含一個部署圖。
下面是本項目的大致的部署視圖:
2.3.5實現視圖
3.數據庫設計
字段名 | 類型 | 注釋 |
user_id | int | 唯一標識 |
user_name | string | 用戶名稱 |
user_passwd | string | 用戶密碼 |
user_nickname | string | 用戶昵稱 |
字段名 | 類型 | 注釋 |
uuid | string | 設備標識 |
mac | string | 信標設備mac地址 |
name | string | 設備名稱 |
pt_power | int | 設備發射功率 |
flags | int | 設備模式 |
device_type | int | 設備類型 |
adevrtising_type | int | 廣播類型 |
rssi | int | 信號強度 |
time_interval | int | 廣播發送間隔 |
字段名 | 類型 | 注釋 |
provider | string | 數據提供者 |
timestramp | timestramp | 獲取定位的時間 |
accuracy | int | 獲得的數據精度 |
longitude | double | 當前位置經度 |
latitude | double | 當前位置緯度 |
altitude | double | 當前位置海拔 |
speed | double | 速度 |
字段名 | 類型 | 注釋 |
mac | string | 數據發送者mac地址 |
timestramp | timestramp | 收集數據的時間 |
rssi | int | 信號強度 |
rssi_1m | int | rssi@1md的信號強度 |
uuid | string | 數據發送者的uuid |
group | int | 數據所在組別 |
4.運行環境與技術選型
開發語言:Java、Python
客戶端:Android
后端框架:SpringBoot
第三方庫:OkHttpUtils、EventBus
開發工具:Intellij IDEA+Android Studio
數據庫:MySQL
數據庫緩存:Redis
運行環境:Linux平台+Docker容器
5.概念原型的核心工作機制
概念是人對能代表某種事物或發展過程的特點及意義所形成的思維結論,是一種虛擬的、理想化的軟件產品形式,其大致等於用例 + 數據模型。
本系統的概念原型工作機制大致如下:
用戶打開軟件,可以通過采集數據的選項,打開藍牙,網絡,與位置信息,通過在一定范圍內活動,來收集空間中所獲得的信標設備所發出來的信號強度和mac地址,接着將數據保存到數據庫中,並且上傳到服務器,供機器學習模型訓練。用戶可以通過請求gps信息返回當前所在經度和緯度。當收集數據到達一定量后,即模型被建立后,用戶可以直接使用軟件的定位模型,將收集到的信號強度數據送入模型,得到在當前一片范圍內自身所在的位置,並返回地圖信息。