许洪光 汪思汗 周稷麟 王友学 刘青林
(哈尔滨工业大学(深圳)电子与信息工程学院 广东 深圳 518055)
空中鼠标是在无线鼠标的基础上,利用惯性传感器采集的姿态信息,控制屏幕上的光标移动,从而使鼠标不依赖桌面。
空中鼠标的性能指标分为以下几点:定位的精度、平滑性、易操作性。按键抖动一直影响着用户对空中鼠标的使用和体验。文献[1]提出了用低通滤波器消除输入速率低于每5秒度的所有动作,但是,这也会影响到那些有意而为之的细微动作,造成所谓的动作“死区”。若用户不小心大幅度移动空中鼠标,这必然导致光标大幅度移动,使用户难以找到光标在屏幕中位置,目前还没有针对此问题的具体解决方案。文献[2-4]用位移控制光标移动,大量实验发现,加速度来测量位移存在着较大的误差[5]。文献[6-9]用角度变化控制光标移动,但是左右平移鼠标,此时的角度变化不大,光标几乎不会移动,不符合用户使用习惯。
基于以上背景,本文提出了BLE(Bluetooth Low Energy)空中鼠标系统设计方案,设计并定义了光标定位法和固定光标法。同时采用角度和加速度相结合方法来控制光标移动以及采用滑动窗口滤波法来解决数据抖动问题,利用加速度标定模型进行系统误差校正,还设置了多个功能按键以此增加空中鼠标功能的多样性,从而提高用户体验质量。
本系统方案采用模块化设计,实现BLE空中鼠标系统,该系统主要包括两个部分:手持端和蓝牙适配器,系统结构如图1所示。
图1 BLE空中鼠标系统结构
主控芯片选用TI公司生产的40引脚BLE芯片CC2541,负责通信协议的转换。
手持端主要包括主控芯片、数据采集模块、按键模块、电源模块。数据采集模块MPU6050传感器,负责采集手持端的三维空间位置数据,并通过IIC接口与主控芯片通信。设置七个按键,按键数据通过IO口传给主控芯片,分别实现电源开关、复位、Enter键、鼠标左击、鼠标右击、向上翻一页、向下翻一页的功能。根据蓝牙通信协议,主控芯片将接收到的三维空间位置信息和按键信息处理编码并通过蓝牙天线发送给蓝牙适配器。
蓝牙适配器主要包括主控芯片、电源模块、USB接口。蓝牙适配器接收到手持端发射的信息流,经过主控芯片解析处理为光标位移及按键信息,依据USB协议编码,通过USB接口完成和计算机的交互通信,最终实现BLE空中鼠标操作电脑的功能。
本软件系统采用多任务操作系统,以OSAL(Operating System Abstraction Layer)作为调度核心,OSAL是一种任务分配资源的机制,BLE协议栈、profile定义、所有的应用都围绕它来实现,OSAL是在此基础上建立和执行事件的循环。
任务事件实现软件的功能,创建一个任务事件需以下三个步骤:
(1) 创建任务的标识符任务ID;
(2) 创建任务初始化进程,然后添加到OSAL初始化进程中;
(3) 编写任务处理程序。
系统流程图如图2所示。
图2 系统流程图
1.2.1 姿态四元数
鼠标的姿态角求取方法分为三种:欧拉角法、方向余弦法、四元数法。四元数具有计算精度高的特点,同时可以很好避免奇异性,而且计算量少很适合在嵌入式设备运行。因此四元数被广泛应用到各种场合。
四元数是一种超复数,最早是由爱尔兰数学家哈密顿提出的数学概念,其形式如公式:
Q=q1+q2i+q3j+q4k
(1)
式中:i、j、k代表虚数单位的基,而q1、q2、q3、q4代表四个实数。
文献[10-12],详细介绍了推导四元数旋转矩阵。用字母T表示四元数的旋转矩阵,其公式如下:
(2)
通过四元数旋转矩阵可以求出,航偏角α(-180°,+180°),俯仰角β(-90°,+90°),横滚角γ(0°,360°)。其中航偏角和横滚角存在多解问题,需要在求解航偏角和横滚角时判断它们所在的象限,之后就可以明确航偏角和横滚角的真值。公式如下:
(3)
1.2.2 光标定位法
光标定位法,是通过快速向上或向下移动鼠标,将光标定位到用户事先设定的位置。
光标定位法是为了解决用户难以找到光标在电脑屏幕上位置的问题。电脑的屏幕一般为长方形,假设用户在屏幕上设定的位置为坐标原点,显示器屏幕的长为x轴,显示器屏幕的宽为y轴,建立xOy坐标系,记录每次光标的坐标位置。光标坐标公式如下:
x(n)=x(n-1)+Δx
y(n)=y(n-1)+Δy
(4)
x(n)、y(n)表示当前光标的坐标位置,x(n-1)、y(n-1)表示上一次光标的坐标位置,Δx、Δy表示每次光标移动的距离。
经过多次试验,快速向上或向下采集的绝对值最大z轴加速度如表1所示。
表1 绝对值最大z轴加速度值
由表1可知,每次实验最大或最小值不同,但相差不大,为了更好识别向上和向下的手势,设定一个相关系数为0.85。
当检测到向上或向下手势后,光标会移动(-x(n),-y(n) )坐标距离。光标在移动之后就会回到用户设定的原点,其中用户设定的原点为鼠标刚连接到PC机时光标的位置或者空中鼠标系统重启后光标的位置。具体实现流程图,如图3所示。
图3 光标定位法流程图
1.2.3 固定光标法
固定光标法,是当用户按下鼠标键后,让光标在一定时间内保持不动。
按键抖动问题是一个综合的问题,按键位置、软硬度都与抖动有关。本文是在按键位置和软硬度确定的情况下,当用户按下某一鼠标键之后,将光标固定一定时间,能够很好地消除按键带来的光标抖动而不会造成“死区”问题。不同的按键位置和软硬度,需要固定不同光标时间。具体实现流程图,如图4所示。
图4 固定光标法流程图
MPU6050传感器主要存在两种误差,一种系统误差,一种随机误差。系统误差主要包括:零偏误差、零偏重复性、刻度因子非线性、刻度因子重复性、非敏感轴互耦误差、安装误差[13]。随机误差主要源于噪声。由于环境噪声存在,导致传感器输出的数据具有波动性,传感器测量精度会对姿态信息计算产生重大影响,使用前必须对其进行误差补偿。本文采用加速度计标定模型和滑动窗口滤波分别校正系统误差和减少随机误差。
加速度计传感器测量模型,如图5所示。
图5 加速度计测量模型框图
加速度计传感器误差模型公式如下:
f=a0+Kaab
(5)
具体形式如下:
(6)
式中:f=[fx,fy,fz]T为加速度计测量输出,Kai(i=x,y,z)表示加速度计传感器标度系数,Kaij(i,j=x,y,z)表示加速度计传感器的安装误差,j轴的输出对i轴的耦合影响;a0=[ax0,ay0,az0]T表示加速度计传感器的零偏误差矩阵;ab=[abx,aby,abz]T表示加速度计的理论输出。
通过加速度误差模型可以反解出校正后的加速度,如下公式:
(7)
文献[14-16],详细介绍了一种六位置方法,以此求解加速度计模型里矩阵系数。
利用二轴电动转台,采用六位置方法,求解矩阵系数,最终解的矩阵系数,如公式所示:
(8)
传感器输出的数据会受到外界噪声干扰,即使经过系统校正后,输出的数据仍然会有一定波动性,因此,在对传感器数据处理前,需要对数据进行平滑滤波。而滑动窗口滤波算法比较好的对传感器采集的数据进行平滑处理,减少数据波动性,能够提高鼠标的动态性能。
本文采用滑动窗口均值滤波,公式如下:
(9)
式中:βi为采样点,N为数据长度,而i表示第i个采样点,其中i的取值范围为i=1,2,…,N。图6是滑动窗口滤波过程的图形介绍。
图6 滑动窗口均值滤波
一般空中鼠标是利用角度控制光标移动而不采用位移控制光标移动,主要由于加速度二重积分,会引起较大的累计误差,导致光标偏移过大。航偏角α(-180°,+180°)的角度变化控制光标在电脑桌面水平方向移动,俯仰角β(-90°,+90°)的角度变化控制光标在电脑桌面竖直方向移动。本文提出了以航偏角α和x轴加速度相结合方式来控制光标在水平方向的移动的方法,其中x轴加速度是用来解决左右平移空中鼠标而光标不移动的问题。
在鼠标水平移动一段距离后停止时,x轴加速度是先增加后减少为0,然后反向加速,后反向减速为0。如果把后部分的反向加速和反向减速也用来计算光标移动的位移,那么会出现光标漂移现象。为了防止光标漂移,本文只采用了x轴加速度先增加后减少这部分的加速度值,丢弃了反向加速和反向减速的这部分加速度值。
采用本文方案所设计的空中鼠标,在Windows7操作系统的PC机上进行实验验证,结果如下。
从以下两方面来进行:一是光标定位;二是固定光标。下面分别通过实验对上述方法进行验证。
空中鼠标连接到PC机时光标的位置为参考位置坐标(0,0);接着移动鼠标,光标会在PC屏幕上移动,停止移动鼠标静止一段时间后,光标获得一个新的坐标并记录;然后向上或向下快速移动鼠标,光标会回到参考位置并记录坐标,重复上述操作,采集坐标如表2所示。
表2 定位前后光标的坐标
从表2可以看出,z轴向上或向下加速度满足定位手势的条件,从而实现定位功能。
固定光标验证是通过大量测试某一固定按键,然后观察光标固定时间与对应消除按键抖动的效果好坏,如表3所示。
表3 光标固定时间所对应消除按键抖动的效果
从表3可以看出,在本方案中,固定时间介于[400,500]之间,按键抖动消除效果较好。将[400,500]区间继续细分,通过大量测试发现,当固定时间近似为420 ms时,按键抖动消除效果最佳。不同按键软硬度和按键位置,固定时间不同,本文只是提出一种解决此问题的方法。
从以下两方面来进行:一是加速度计误差模型验证;二是滑动窗口滤波验证。
加速度计误差模型验证是以双轴电动转台为平台,测试30度状态下三轴加速度数据,然后对采集的原始数据经过加速度误差模型校正。原始数据和校正后数据如表4所示。
表4 加速度原始数据和加速度校正后数据
从表4中可以看出校正后的数据更接近真实值。
滑动窗口滤波验证,首先测试静止状态下加速度传感器三轴的值,然后经过滑动窗口滤波。图7表示有无滑动窗口滤波数据图。从图7可以看出,在滤波前得到的加速度值波动比较大,而在滑动窗口滤波后,计算得到的数据波动较小。
图7 有无滑动窗口滤波比较
BLE空中鼠标如图8所示。手持端和蓝牙适配器配置好后,在Windows7操作系统下,操作BLE空中鼠标按照数字“2”轨迹移动,利用画图软件描绘光标轨迹如图9所示。
图8 空中鼠标实物
图9 鼠标运动轨迹
本文提出了一种基于MPU6050六轴传感器的BLE空中鼠标系统的设计方案。该方案提出了光标定位法和固定光标法,采用滑动窗口滤波法解决数据抖动问题,利用加速度标定模型校正系统误差,最终实现了BLE空中鼠标功能的优化。在Windows7平台中测试,验证了方案的正确性和有效性。另外,现有文献均未提出光标“未知”问题的解决方案,本文创造性地提出了向上或向下手势来解决该问题。本方案很好地解决了光标“死区”和光标位置“未知”的问题,并增加了光标移动的多样性。适合任意场景的应用,如火车、床上等无桌面依托的环境中,尤其适合手脚不灵的残疾人使用。另外,增加了功能按键,也可用作教学遥控笔。下一步将研究设计出更符合用户使用习惯的硬件外观和按键布局,以此进一步增强用户的体验感和舒适度。
[1] Hillcrest Labs.空中鼠标系统设计的关键因素[B/OL]. 2013-12-12/2017-1-10. http://archive.eet-china.com/www.eet-china.com/ART_8800693044_480501_TA_857d0c44_2.HTM.
[2] 王海红. 三维鼠标的设计及其在虚拟现实中的应用[D]. 苏州大学, 2010.
[3] 江朝强, 石睿, 王云飞. 基于MEMS指环式低功耗无线三维鼠标的设计[J]. 自动化与仪表, 2013, 28(9):12-14.
[4] 陈建新, 卜翔, 王荣,等. 基于MEMS加速度的三维无线鼠标设计与实现[J]. 无线互联科技, 2011(8):22-25.
[5] 陈建新, 王荣, 章韵. MEMS加速度传感器的距离测量性能分析[J]. 电脑与电信, 2011(11):30-32.
[6] 李士垚, 唐星阳, 吕迪洋. 基于MPU6050六轴传感器的悬空鼠标设计与实现[J]. 电子制作, 2016(15):26-27.
[7] 段建雷, 韩鹏, 樊爱军,等. 基于手机惯性传感器空中鼠标的优化与实现[J]. 计算机应用与软件, 2015, 32(12):226-230.
[8] 许乃展. 基于MPU6050的空中鼠标的设计与实现[D]. 东南大学, 2015.
[9] 滕飞, 胡湘娟, 阳泳. 基于STM32F103的空中鼠标设计与论述[J]. 科技创新与应用, 2015(34):40-40.
[10] 徐小明, 钟万勰. 四元数与欧拉角刚体动力学数值积分算法及其比较[J]. 计算机辅助工程, 2014, 23(1):59-63.
[11] 王力, 李豪, 姜卫平. 一种基于四元数的三维基准转换简便模型[J]. 大地测量与地球动力学, 2015, 35(2):243-247.
[12] Gim D W, Alfriend K T. State Transition Matrix of Relative Motion for the Perturbed Noncircu-lar Reference Orbit[J]. Journal of Guidance Control & Dynamics, 2012, 26(6):956-971.
[13] 王如胜. MEMS陀螺捷联惯导系统标定方法研究[D]. 哈尔滨工业大学, 2015.
[14] 石玺文, 李杰, 胡陈君,等. MEMS三轴加速度计6位置标定方法的研究[J]. 电子器件, 2016, 39(2):403-406.
[15] 奔粤阳, 刘新源, 鲍桂清,等. 捷联惯性测量组件六位置标定精度分析[Z]. 2012.
[16] 王佳, 丁鑫, 高文超,等. 基于双轴速率转台的IMU440惯性测量单元快速标定方法与实验[J]. 船舶工程, 2015(12):56-59.