为了利用Android移动设备成熟的传感器技术来实现体感操作,文中设计了基于Android移动设备传感器的体感应用系统.该系统的架构具有通用性特点,并非只局限于能控制PC中固定的程序.该系统包含了一个移动端(Android)程序与一个Windows平台下的中间件平台,它以Android平台的设备为输入设备,利用各种传感器采集数据,经WIFI发送到PC端的中间件平台,接收后可自定义转换为相应的操作指令,以控制电脑中不同的应用软件或者游戏.
1、系统总体设计
本系统采用客户/服务器(C/S)架构,将PC或运行能力较强的计算设备作为服务器,负责与Android手机进行通信和发出指令操作.Android手机作为客户端,通过友好的用户界面,引导用户选择相应的传感器种类(目前智能手机中同时包含多种传感器),如设定用户操作的种类属于动感式(加速度应用)还是竞技式(支持力的应用)。
1.1、服务器和Android手机的通信
服务器和Android手机之间的通信需要解决的主要问题有:数据传输中稳定性和高效性的把握、用户操作模式的识别方法及用户的动作量化方法.
1.1.1、数据传输
系统中服务器与客户端利用Socket通过用户数据报(UDP)协议进行通信,传输速度快,无延迟.虽然UDP协议有数据报容易丢失、不能保证每个数据报准确无误地传到等问题,但对于运动体感的操作,用户的动作产生的数据是连续的,即使丢掉部分的数据报对用户体验也无大碍.例如控制赛车向左转弯,用户动作一定有一个幅度,在这个幅度当中,其实已经发送了很多个向左的数据报,丢失一两个数据报对用户体验的影响不大.
在Java中有两个数据报类:DatagramSocket(进行端到端通信的类)和DatagramPacket(表示通信数据的数据报类),程序中的客户端A和B可通过调用DatagramSocket收发DatagramPacket,如图1所示.
图1 UDP通信模式
1.1.2、用户操作模式识别
在确定移动通信传输协议的基础上,需要将移动设备的多点触摸功能和传感器功能融入到服务器强大的计算功能中,即实现信息空间和物理空间的融合,因此需要将移动设备发出的指令变成服务器能够识别的操作.
识别的前提是需要引导用户选择操作的模式,如使用触摸屏还是传感器,而Android传感器包含了光照、温度、加速度、压力、重力、地磁等多种传感器,所以Android移动体感选取的状态模式改变时,应该通知PC客户端进行识别,这样才能进行正确的操作映射.
系统中通知状态改变发送的消息格式是:state+n.其中,state是固定的字符串,n是约定意义的数字.状态改变类StateChangedInformer继承基类Transmission,发送状态消息给PC端.
常用的用户操作属于不同模式的应用,如手柄模式属于多点触摸屏模式的应用,而幻灯片(PPT)、赛车等操控属于传感器模式的应用.
1.1.3、动作数据量化
用户需要实现对屏幕的双击、长按及画弧(如图2左边所示的圆圈样式)操作,这些用户操作必须量化为数字信号方能处理.手柄的按钮有按下和弹起2种状态,定义好编号和键盘的对应按键,封装其发送方法,在已有的数据传输的基础上便能实现远程控制的功能.
图2 用户操作界面
技术专区
- Alexa语音服务软件扩展STM32Cube
- 结合DNN API驱动未来神经网络应用的解决方案
- 针对于高端移动通信和汽车市场的四集群设计
- 一款基于帧捕捉的开源图形调试器应用设计
- 即将成为标准配置的最新安全技术:后视摄像系统