郭 俊, 杜 華
(成都理工大學 工程技術學院,樂山 614007)
隨著社會發展,人們之間交流學習的機會日漸增多,例如各院校之間的教學研討會,公司之間的產品交流會等. 在這些環境下需要即時通訊軟件方便參會人員進行交流. 由于大部分參會人員來自不同的地域,相互之間并不了解熟悉,因此要求即時通訊軟件能夠實現幾點功能:(1) 能夠在局域網的條件下快速組建臨時討論群; (2) 具有室內定位功能,能夠準確定位各個參會人員的位置坐標,有利于通過位置查找相關人員進行點對點討論.
目前國外流行的通訊軟件主要有Skype,WhatsApp等[1]. 這些通信軟件主要功能是實現既有的特定人群的相互交流,使得雙方在交流溝通等方面更加的方便迅速[2]. 但是這種通訊軟件也有不便之處,一方面在臨時聚會或者會議場合,這些軟件不方便迅速組成討論群,另一方面因為QQ微信這些軟件更傾向于好友熟人私密方面的交流,部分人不愿意公開自己的賬號,容易造成交流溝通的障礙.
室內定位技術主要包括射頻標簽,藍牙,無線WIFI,紅外線定位以及UWB定位等[3]. 根據文獻[4,5],藍牙、WIFI、射頻、紅外線等定位技術的精度都大于1 m,難以滿足系統要求的室內人員定位精度. 而UWB定位精度高,大約在0.1~0.3 m[6],很好的滿足了室內聊天系統的定位需求.
系統主要分為定位模塊和即時通訊模塊.
定位模塊采用UWB定位技術,在室內(會議室或大禮堂)的周邊設置若干個定位基站,用以將整個空間劃分為一個坐標系,用以獲得標簽模塊的具體坐標值,將數據傳給上位機,達到定位功能.
即時通訊模塊包括服務器模塊和客戶端模塊,客戶端采用android系統,實現局域網內部的群聊和點對點定位聊天功能. 服務器響應客戶端的請求,獲得客戶端的連接信息.
整個系統業務流程設計如下:將UWB的標簽模塊放置在胸牌內部發給參會人員,參會人員通過局域網使用移動終端下載即時通訊客戶端,掃描掛牌的二維碼使得標簽模塊和移動終端形成一對一的關系. 用戶輸入昵稱通過客戶端連接服務器,進入群聊系統; 參會人員也可以通過客戶端查看以自己為坐標中心的周圍人員圖形化信息,并通過點擊頭像進入兩者點對點聊天界面.
系統整體網絡架構如圖1所示.
系統設計應用在一長寬為16 m×15 m的能容納的會議廳. 從系統架構圖可以看到,該系統主要包含3部分:
UWB定位模塊:采用UWB定位技術,在室內(會議室或大禮堂)的周邊設置一個定位基站,用以將整個空間劃分為一個厘米級別的坐標系,獲得標簽模塊的具體坐標值,將數據傳給上位機服務器端,達到定位功能.
服務器端:獲取客戶端的坐標信息,實現在線用戶管理; 建立會話連接.
客戶端:客戶端是與標簽節點綁定在一起的,安裝在參會人員移動設備上,客戶端程序包含信息發送和接收功能.
定位系統采用DecaWave公司的實時測距定位功能模塊DWM1000,DWM1000的三個基站節點就可以對一個標簽節點進行精確定位[7,8]. 該模塊理論測距最大為300 m,抗多徑和抗干擾能力強,定位精度能夠達到10 cm[9]. 充分滿足室內場合對人員定位的需求. 節點的MCU采用意法半導體公司的STM32F105RCT6,內置了256 K的Flash Rom,DWM1000通過SPI掛載在MCU上[10].
當布置在室內環境中,由于梁柱、隔斷和設備等會造成信號的衰減,根據資料,確保定位精度的定位距離按理論值的0.1計算[11],可設定基站節點與標簽節點定位最大距離不大于30 m. 在建筑面積為16 m×15 m的室內環境可以在四個角設置基站節點.
對標簽的定位測量方法采用基于到達時間差(TDOA)法,該方法通過接收端接收兩次信號的時間差推導出定位基站與標簽的距離,再利用多個基站的數據定位出標簽節點的位置,具有很高的定位精度,復雜度小[12,13].
服務器端的主要功能一方面是監聽客戶端的連接請求,啟動線程響應客戶端的通訊信息,另一方面是作為上位機周期性的獲得UWB模塊傳遞的坐標信息,通過IP與客戶端綁定. 因此服務器主要包含客戶端登錄信息處理模塊,用戶通信處理模塊和客戶端坐標處理模塊.
(1) 服務器啟動,監聽端口,等待客戶端的接入
(2) 通過USB接口與某一基站連接,獲得各個基站的基準坐標,間隔30 s查詢各個節點標簽的坐標,以鍵值對形式存入內存.
(3) 接收到客戶端的連接信息后,判斷用戶昵稱在用戶列表是否唯一. 如果不是唯一,提示用戶更換昵稱,否則啟動線程,處理客戶端信息.
(4) 獲得客戶端掃描二維碼傳遞過來的節點編號,從節點列表中根據編號查詢到節點的坐標,與客戶端IP作為鍵值對方式存入Map對象中.
(5) 接收到客戶端傳遞的顯示附近人員命令時,首先獲得客戶端的坐標值,然后查找Map對象中所有節點的坐標值,通過運算找出以客戶端為圓心,以客戶端傳遞的距離參數為半徑的人員,將用戶昵稱和坐標值返回給客戶端.
(6) 服務器負責轉發客戶端之間的通信數據. 根據收到客戶端數據的MessageType類型,將信息進行群發或者遍歷用戶列表將信息轉發給特定用戶.
服務器與客戶端通信采用WebSocket協議,這個協議是在HTTP協議的基礎上用于服務器和客戶端之間進行雙向數據傳輸的一種技術,使服務器端和客戶端直接間能夠進行全雙工的雙向通信,可以取代傳統的輪詢技術,用以提高數據的穩定性和降低服務器壓力.
目前主流的Web服務器都提供了WebSocket的支持,系統在這里采用的是Spring WebSocket框架. 該框架包含三個接口和抽象類:
WebSocketConfigurer接口作用是添加攔截URL地址以及相應的WebSocket消息處理器,完成對WebSocket的配置.
HttpSessionHandshakeInterceptor接口起到攔截器作用,主要進行服務器和客戶端握手前后的一些處理.
WebSocketHandler抽象類主要是用來處理消息的接收和發送. 這個接口中有3個較為重要的方法.
其中handleTextMessage(WebSocketSession session,TextMessage message)方法處理客戶端發送的信息,當客戶端調用websocket.send()發送消息時,會觸發該方法. sendMessageToUser()完成對單個用戶信息發送,sendMessageToUsers(TextMessage message)方法完成消息的群發.
用戶通過Android平臺的客戶端實現與服務器間的數據交換和其他用戶的交互. 客戶端的主要功能有用戶登錄,用戶群聊,顯示附近用戶以及私聊功能等.
(1) 啟動客戶端,連接局域網內的服務器. 進入登錄界面,用戶輸入自己的昵稱,進行登錄.
(2) 服務器判斷用戶昵稱是否當前群聊里面的唯一值,如果不是,提示用戶更換昵稱,否則確認用戶登錄.
(3) 用戶登陸后,掃描胸牌的二維碼,獲得UWB模塊的id值,將它發送給服務器. 服務器將UWB的id與客戶端的IP進行綁定. 服務器周期性的通過定位模塊獲得當前用戶的坐標XY值.
(4) 用戶使用客戶端在群聊中進行信息的接收與發送.
(5) 客戶端提供“附近”界面功能,服務器根據當前各個UWB標簽的XY坐標以地圖的方式顯示客戶端周邊若干米范圍其他用戶的昵稱和頭像.
(6) 用戶點擊鄰近用戶頭像進入私密聊天界面.
(7) 點擊退出按鈕,用戶斷開服務器連接,服務器同時清除該用戶的聊天信息和定位坐標.
OKHttp框架是Android中處理網絡請求的輕量級開源框架. OKHttp在3.0版本中已經對WebSocket協議提供了支持.
使用OKHttp提供的WebSocket,一方面是通過OkHttpClient的newWebSocket方法建立客服端與服務端之間的連接,一方面需要創建一個Listener監聽類來繼承WebSocketListener類,Listener監聽類用于客戶端與服務端之間的異步通知. Listener類覆蓋父類的onOpen,onMessage以及onClosing方法.
onOpen方法實在客戶端與服務端建立連接時的回調,可以通過WebSocket的send方法向服務端發送消息; onMessage方法獲取服務端發送過來的消息,這里有兩個重載方法,用以獲得字符串信息或者二進制數據; onClosing方法表示服務端不再發送數據給客戶端時的回調,準備關閉連接.
UWB定位系統有許多誤差來源,主要是多路徑和非視距環境下的障礙物阻擋影響,在16 m×15 m的室內環境中,固定了4個基站錨節點,選取錨節點1作為坐標原點,對標簽節點的坐標進行誤差測量. 測量環境分為兩種,首先是在室內隨機位置固定10名人員作為障礙物,對標簽節點的7個位置進行測量,取XY坐標中誤差最大值,測試結果如表1所示. 其次是障礙物人數增加至30名,對標簽節點的7個位置再次進行測量,測試結果如表2所示. 經結果分析,當障礙物數量增加時,標簽節點的定位誤差普遍增大,誤差均值由14.4 cm顯著增加到25.8 cm,說明人群或者環境遮擋對UWB定位有一定的影響; 測試坐標中最大誤差為29 cm,誤差均值在26 cm以內,能夠滿足即時通訊系統室內定位系統需求.

表1 室內10個障礙物定位實驗

表2 室內30個障礙物定位實驗
即時通訊系統采用局域網模式,服務器與客戶端手機在同一局域網內,將室內環境網格圖導入Android設備中,系統能夠實現文本、圖像及語音的通信功能,并能通過軟件定位界面顯示定位標簽實時位置. 圖2是客戶端查找附近聊天人員的全局界面以及手勢放大后的界面.

圖2 客戶端“附近”界面
本文介紹了采用室內定位技術的即時通訊軟件的設計與實現,研究了UWB模塊定位系統,采用TDOA算法進行標簽定位; 設計了即時通訊系統模塊設計,其中服務器采用Spring框架集成的WebSocket協議,使得服務器端開發較為輕便,簡單,減輕系統資源消耗;Android客戶端應用了對WebSocket協議支持的OK Http框架. 系統設計與應用簡單,完成了客戶端室內定位,客戶端之間的文本、圖像等信息交流,可以應用在各類型會議、聚會等場所,加強用戶之間的交流,具有廣闊的應用前景.
在室內障礙物較多時的定位精度的提高,以及即時通訊系統的信息傳遞的多樣化,如視頻等是下一步研究的方向.