郭 俊, 杜 华
(成都理工大学 工程技术学院,乐山 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框架. 系统设计与应用简单,完成了客户端室内定位,客户端之间的文本、图像等信息交流,可以应用在各类型会议、聚会等场所,加强用户之间的交流,具有广阔的应用前景.
在室内障碍物较多时的定位精度的提高,以及即时通讯系统的信息传递的多样化,如视频等是下一步研究的方向.