APP下载

基于Android移动设备传感器的体感应用*

2012-06-25韩迪潘志宏

关键词:体感加速度服务器

韩迪 潘志宏

(1.香港理工大学电子计算学系,香港999077;2.广东创新科技职业学院计算机与通信系,广东东莞523960)

随着普适计算的蓬勃发展,人们试图让交互的应用伴随移动的用户在对应的空间中迁移,该模式脱离了传统的键盘、鼠标,人们可以随时随地、透明地获得数字化的服务[1],充分利用其周围基础设施中资源相对较丰富的设备进行信息处理.同时其交互应用运行的模块也可以与空间中的其它模块进行交互和协作,以获得与当地空间相关的各种服务.这种应用源于情境感知,即通过传感器及其相关的技术使计算机设备能够感知到当前的情境[2-8].文中设计了一种基于Android移动设备传感器的体感应用系统.体感的基本概念在于人们可以很直接地使用肢体动作与周边的装置或环境互动[9],而无需使用任何复杂的控制设备便可以让人们身临其境地与内容互动.Android移动体感的功能不仅仅局限于游戏,在结合情境感知的基础上,可以将移动设备的体感方便地应用到大部分的应用程序中,如控制个人计算机(PC)上的演讲稿翻页、音乐切换等功能.目前,Android市场上暂时未有类似的软件能主动、便携地控制计算机应用,即将移动设备的传感器功能、多点触摸功能和PC设备强大的计算功能融合起来,解决移动设备计算能力不够而固定设备缺乏物理空间利用的问题,以延伸移动设备的普适计算范围[10-11].

为了利用Android移动设备成熟的传感器技术来实现体感操作,文中设计了基于Android移动设备传感器的体感应用系统.该系统的架构具有通用性特点,并非只局限于能控制PC中固定的程序.该系统包含了一个移动端(Android)程序与一个Windows平台下的中间件平台[12],它以Android平台的设备为输入设备,利用各种传感器采集数据,经WIFI发送到PC端的中间件平台,接收后可自定义转换为相应的操作指令,以控制电脑中不同的应用软件或者游戏[13].

1 系统总体设计

本系统采用客户/服务器(C/S)架构,将PC或运行能力较强的计算设备作为服务器,负责与Android手机进行通信和发出指令操作.Android手机作为客户端,通过友好的用户界面,引导用户选择相应的传感器种类(目前智能手机中同时包含多种传感器),如设定用户操作的种类属于动感式(加速度应用)还是竞技式(支持力的应用).

1.1 服务器和Android手机的通信

服务器和Android手机之间的通信需要解决的主要问题有:数据传输中稳定性和高效性的把握、用户操作模式的识别方法及用户的动作量化方法.

1.1.1 数据传输

系统中服务器与客户端利用Socket通过用户数据报(UDP)协议进行通信,传输速度快,无延迟.虽然UDP协议有数据报容易丢失、不能保证每个数据报准确无误地传到等问题,但对于运动体感的操作,用户的动作产生的数据是连续的,即使丢掉部分的数据报对用户体验也无大碍[14].例如控制赛车向左转弯,用户动作一定有一个幅度,在这个幅度当中,其实已经发送了很多个向左的数据报,丢失一两个数据报对用户体验的影响不大.

在Java中有两个数据报类:DatagramSocket(进行端到端通信的类)和DatagramPacket(表示通信数据的数据报类),程序中的客户端A和B可通过调用DatagramSocket收发DatagramPacket,如图1所示.

图1 UDP通信模式Fig.1 UDP communication mode

1.1.2 用户操作模式识别

在确定移动通信传输协议的基础上,需要将移动设备的多点触摸功能和传感器功能融入到服务器强大的计算功能中,即实现信息空间和物理空间的融合,因此需要将移动设备发出的指令变成服务器能够识别的操作.

识别的前提是需要引导用户选择操作的模式,如使用触摸屏还是传感器,而Android传感器包含了光照、温度、加速度、压力、重力、地磁等多种传感器,所以Android移动体感选取的状态模式改变时,应该通知PC客户端进行识别,这样才能进行正确的操作映射.

系统中通知状态改变发送的消息格式是:state+n.其中,state是固定的字符串,n是约定意义的数字.状态改变类StateChangedInformer继承基类Transmission,发送状态消息给PC端.

常用的用户操作属于不同模式的应用,如手柄模式属于多点触摸屏模式的应用,而幻灯片(PPT)、赛车等操控属于传感器模式的应用.

1.1.3 动作数据量化

用户需要实现对屏幕的双击、长按及画弧(如图2左边所示的圆圈样式)操作,这些用户操作必须量化为数字信号方能处理.手柄的按钮有按下和弹起2种状态,定义好编号和键盘的对应按键,封装其发送方法,在已有的数据传输的基础上便能实现远程控制的功能.

图2 用户操作界面Fig.2 User operation interface

1.2 传感器模式

遥控赛车游戏和PPT翻页是比较典型的传感器应用,但它们的原理不太一样,遥控PPT翻页靠用户动作的加速度,通过一直甩动移动设备来实现加速;而遥控赛车游戏是通过重力和桌面对手机支持力的变化来使汽车加速,当设备处于某个角度时可以使汽车持续加速.

Android中的Sensor代表了所有传感器,它通过SensorManager的 getDefaultSensor(int type)方法来实现实例化,其中参数type用于标识不同的传感器,如表1所示,参数数值都封装在Sensor类中.

表1 Sensor类Table 1 Sensor classes

传感器开发需要完成以下的功能:注册事件机制、从加速度传感器中获取数据、处理数据和同步生命周期.因为数据是由客户端传输到服务器端,能够正确地识别用户的动作操作还远远不够,还需要将用户操作转换为有意义的命令,所以需要利用SensorManager对传感器进行初始化、启动和关闭,以及利用SensorEventListener配合SensorEvent来获取传感器收集的数据,通过使用加速度传感器来了解Android传感器开发的流程.

1.2.1 注册事件机制

Android传感器的工作机制属于事件机制,但跟普通Java中的事件机制(如显示组件Button等)有所区别:(1)显示组件可以自己注册监听器,而传感器与监听器之间必须通过SensorManager来注册;(2)当程序不可见时,显示组件自然失效,但传感器会继续工作,直到手工关闭传感器.传感器的设计流程必须满足Android生命周期的特点[15],如图3所示.

图3 传感器设计流程Fig.3 Process of sensor design

在Android中,事件源(Source)对应的类是Sensor,事件(Event)对应的类是 SensorEvent,监听器(Listener)对应的类是SensorEventListener.

Activity的getSystemService(SENSOR_SERVICE)返回一个SensorManager对象,而SensorManager对象的 getDefaultSensor(Sensor.TYPE_ACCELEROMETER)可以获取加速度传感器的实例,其中参数Sensor.TYPE_ACCELEROMETER表示加速度传感器.利用此方法还可以返回其它传感器(见表1)的实例.同时需要利用SensorManager的registerListener()方法来使传感器开始工作,用unregisterListener()方法来注销传感器.

1.2.2 获取加速度

所有传感器的数值保存在SensorEvent.values[]中,values的长度和意义取决于当前的传感器类型.获取数据时,利用SensorManager定义的下标常量可以提高程序的可读性.

上述程序声明了传感器及其事件监听器.监听器SensorEventListener的onSensorChanged()方法用于处理传感器获取的数据.SensorEvent的values数组下标为 SensorManager.DATA_X、SensorManager.DATA_Y、SensorManager.DATA_Z 的值,表示加速度在立体坐标系内x、y、z方向上的分量.

1.2.3 处理数据

通过体感控制PPT的操作包括3个过程:收集数据、判断操作、发送通知.加速度数据从Sensor-Event的values变量获得,接着判断这些数据是否构成一次遥控操作.如果构成操作,则发送通知给PC端完成一次控制操作.控制PPT操作的代码如下:

首先获取x轴和y轴的加速度值.if(x>15 x<-15)、if(z>0)是判断条件,nextPage()、lastPage()、MakeSensorDelay()是向PC端发送通知的自定义方法.一次挥动手机可能产生数十个加速度数据,MakeSensorDelay()的作用是提高用户体验,制造延迟,只判断为一次操作.

1.2.4 同步生命周期

传感器的启动和关闭是由程序的SensorManager管理的,利用Activity生命周期中的onResume()方法来启动传感器,利用onPause()方法来关闭传感器.这样,传感器的工作时间就与Activity同步了,即传感器在进入Activity时开启,离开Activity时关闭.

从表1可知,Android还包含了其它传感器,如控制赛车游戏操作的支持力(重力)传感器,其原理是:当手机静止时,通过手动倾斜手机来改变重力传感器的向量值.其开发过程和加速度传感器类似.

2 提高用户体验

通过上面的操作,客户端程序已经可以与服务器通信,识别发送触屏命令,捕获传感器的变化,但还需要提高用户体验,即让用户控制更为精准,最大程度地节省移动设备的耗电量.

2.1 制造延迟

虽然目前可以利用加速度传感器控制相应的PC程序,但一次挥动手机可能产生数十个加速度的数据,显然没有必要处理每条数据,也不允许有时间和能力分析每条数据.所以需要制造一定的延迟,以屏蔽在一次甩动中传感器获取的多余数据并选取满足条件的数据.制造控制延迟有2种方法:(1)不理会一次挥动中多余的数据,忽略若干个数据之后重新监听,但每次挥动的手势、路径、手机朝向都不一样,产生的数据个数也不确定,因此这种方法可行性不高;(2)从数据的源头抓起,传感器事件监听器SensorEventListener一旦出现了满足条件的数据时,马上注销传感器,调用handler的sendMessageDelayed()方法来停止获取数据.在设定的时间之后等待下一次操作,如1s后重新注册传感监听器.

2.2 节约能耗

通过始终甩动来控制PPT等动作敏感度高的程序,用户会感到疲倦.而如果移动设备的资源有限,应用程序的耗电量大,那么该移动设备也难以受到用户的青睐.因此,在设计Android移动体感的过程中,需要考虑节约能耗,使软件更加人性化.能耗的节约需要考虑3个问题:(1)节能操作必须适合大部分机型;(2)不影响已有的操作习惯和用户体验;(3)操作必须简便.

综合考虑这3个问题后,文中使用音量键来控制事件.处理音量键事件需要用到onKeyDown()方法,此方法用于捕获手机的所有按钮信息(包括常用的“ ”回退键),返回值是布尔类型数据,如果返回true,则表明“确定已经完成了按钮事件处理”;如果没有处理好即返回值为false,那么将调用下一级的onKeyDown()方法,表明“还有尚未处理的按钮,希望下一级监听器继续处理”.其中“组件”的下一级是“Activity”,而“Activity”的下一级是“系统级”.

3 实现结果

3.1 通信效率分析

在本项目开发之初,曾使用可靠的传输控制协议(TCP)作为通信协议,但实验测试结果表明:使用TCP协议来传输时延迟非常大.这是因为TCP协议采用了3次握手,对每个数据报都要求验证其正确性,并且为了保证不丢失每个数据报,还采用了停止等待协议,因而项目的测试效果不太理想.例如,控制汽车向左转弯,如果前面向右转弯的数据包还没有传完,这个向左转弯的数据包就必须等待,因而造成延迟,影响用户体验.表2给出了使用 TCP和UDP协议时服务器和客户端之间的通信效率分析结果.

表2 使用不同协议时的通信效率分析结果Table 2 Analysis results of communication efficiency using different protocals

虽然UDP协议有数据报容易丢失、不能保证每个报文准确无误地传到等问题,但运动体感操作对数据延迟性非常敏感,而对数据完整性没有严格的要求,故文中采用UDP协议.它明显地提高了数据的传输效率.

其次,数据传输时的能耗是手机能耗的主要部分,减少通信时延,即缩短数据传输时间对于降低能耗是至关重要的.综上所述,UDP协议更适合移动体感应用.

3.2 应用场景

移动设备和服务器(C/S结构)通过友好的用户界面进行匹配,只有配对成功方可控制,因此具有很高的可靠性,如图4所示.

图4 Android手机端程序初始化Fig.4 Application initialization in Android mobile phone

整个项目主要的应用场景可分为操控式、动感式和竞技式3种.操控式和动感式主要是利用手机的加速度传感器进行开发,而竞技式主要是通过多点触摸达到模拟游戏手柄的控制效果.

3.2.1 操控式

当手机平放在桌面上时,手机受到重力和桌面对手机的支持力的影响.Android中的加速度传感器会屏蔽重力,即当手机静止放在桌面时,加速度传感器的数值不为0,而是有数值显示的,这个数值是桌面对手机的支持力.

操控式最具代表性的应用是利用手机在物理空间内摆放状态的改变来控制极品飞车等赛车类游戏.其原理是:当手机静止时,通过手动倾斜手机来改变支持力对传感器的向量值,以此来控制赛车或者飞机的前进后退、左右倾斜,如图5所示.

图5 Android移动体感遥控《极品飞车14》示意图Fig.5 Schematic diagram of Android somatic application control《The Need for Speed 14》

3.2.2 动感式

加速度传感器可以捕获x、y、z方向的加速度,通过每次挥动产生的数据结合项目中的模式识别算法来实现相应的操作控制,图6所示为通过挥动手机实现遥制PPT翻页的示意图.除此之外,还可以利用手机挥动实现对播放音乐的切换和“贪食鱼”等对动作敏感度要求高的游戏.

图6 Android移动体感遥控PPT和游戏示意图Fig.6 Schematic diagrams of Android somatic application control PPT and game

3.2.3 竞技式

通过移动设备的触摸屏实现对应的命令映射,可以实现竞技类游戏的控制,如图7所示.本系统除了可以兼容各种手柄类游戏之外,还可以实现类似远程鼠标的控制效果.

图7 Android移动体感遥控FIFA足球示意图Fig.7 Schematic diagram of Android somatic control FIFA

4 结语

随着Android设备的日益普及和移动体感的广泛应用,利用Android平台开发用户体验好的移动体感应用显得炙手可热,文中利用Android移动设备的传感器技术实现了移动体感应用系统,它具有较好的用户体验.在HTC G11和Sunsang I9100上的反复测试,以及在Android市场和国内亿欧、Wooboo市场的用户测试表明,手机连接服务器的时间几乎可以忽略不计,Android客户端设备对服务器端的控制响应时间小于1s,完成了手机在智能空间的普适访问和软件控制.今后拟实现多点设备之间的远程互操作,系统将采用浏览器/服务器架构,争取在该架构下能兼容更多的移动嵌入式设备.

[1]徐光祐,史元春,谢伟凯.普适计算[J].计算机学报,2003,26(9):1042-1050.Xu Guang-you,Shi Yuan-chun,Xie Wei-kai.Pervasive computing[J].Chinese Journal of Computers,2003,26(9):1042-1050.

[2]Schilit B,Adams N,Want R.Context-aware computing applications[C]∥Proceedings of Workshop on Mobile Computing Systems and Applications.Los Alamitos:IEEE,1994:85-90.

[3]Kuna M,Kolaric H,Bojic I,et al.Android/OSGi-based machine-to-machine context-aware system[C]∥Proceedings of the 11th International Conference on Telecommunications.Graz:IEEE,2011:95-102.

[4]Heer J,Newberger A,Beckmann C,et al.Liquid:contextaware distributed queries[C]∥Proceedings of the Fifth International Conference on Ubiquitous Computing.Seattle:Springer,2003:140-148.

[5]Lowe R,Mandl P,Weber M.Context directory:a contextaware service for mobile context-aware computing applications by the example of Google Android[C]∥Proceedings of IEEE International Conference on Pervasive Computing and Communications Workshops.Lugano:IEEE,2012:76-81.

[6]Jorge E,Farias M,Carmo R,et al.A framework for context-aware systems in mobile devices[C]∥Proceedings of the 12th International Conference on Computational Science and Its Applications.Salvador de Bahia:Springer,2012:444-456.

[7]David L,Endler M,Barbosa S D J,et al.Middleware support for context-aware mobile applications with adaptive multimodal user interfaces[C]∥Proceedings of the 4th International Conference on Ubi-Media Computing.Sao Paulo:IEEE,2011:106-111.

[8]Choi Yoon-Bin,Park Young-Ho.Design of a context-aware mobile system using sensors[C]∥Proceedings of International Conference on Multimedia,Computer Graphics and Broadcasting.Jeju Island:Springer,2011:89-96.

[9]Mao Xiaodong,Wang Dahu,Zhang Tong,et al.Remote control based on Android phone [J].Applied Mechanics and Materials,2011,130/131/132/133/134:3982-3985.

[10]Hung-Ming,Chen Po-Hung,Liou Yong-Zan,et al.Design of a smart remote controller framework based on Android mobile devices[J].Advanced Materials Research,2011,268/269/270:1607-1612.

[11]Chikaraishi T,Minato T,Ishiguro H.Development of an Android system integrated with sensor networks[C]∥Proceedings of IEEE/RSJ International Conference on Intelligent Robots and Systems.Nice:IEEE,2008:326-333.

[12]韩迪.网络实训设计与实践[M].北京:北京邮电大学出版社,2010:136-145.

[13]Li Y J,Ng Peter H F,Wang H B,et al.Apply different fuzzy integrals in unit selection problem of real time strategy game[C]∥Proceeding of International Conference on Fuzzy System.Taiwan:IEEE,2011:170-177.

[14]韩迪.Android创意实例详解[M].北京:北京邮电大学出版社,2012:364-379.

[15]Google.Application fundamentals[EB/OL].[2012-01-18].http:∥developer.android.com/guide/topics/fundamentals.html.

猜你喜欢

体感加速度服务器
“鳖”不住了!从26元/斤飙至38元/斤,2022年甲鱼能否再跑出“加速度”?
体感交互技术在脑卒中康复中的应用
人体体感感知机械手设计与实现
通信控制服务器(CCS)维护终端的设计与实现
天际加速度
创新,动能转换的“加速度”
死亡加速度
非触控式的体感机械臂交互控制系统研究
中国服务器市场份额出炉
得形忘意的服务器标准