空中鼠标算法原理讨论

   空中鼠标是利用陀螺仪输出的数据,对屏幕上的光标进行控制的设备。原理看起来相对简单,但实现起来,也有不少需要解决的问题。本文是作者在之前开发时的总结。

基本原理

     将空中鼠标的X轴(Pitch)角速度和Z轴(Yaw)映射到鼠标的移动速度上。因此抓握设备的方式就事先要确定,比如哪面朝前,哪面朝上。灵敏度也需要通过实验进行确定。如果能够获取屏幕的分辨率或者屏幕尺寸从而进行动态调节,则效果更佳。

抗静态偏移

     鼠标在不移动的时候,光标自然是不能移动的。但不得不指出,廉价的陀螺仪本身会有静态输出。有些甚至能达到20度/s。 好在偏移通常不会因为环境而发生变化。所以需要在出厂前进行校正。这种问题比较容易解决。

平滑算法

     消费级陀螺仪由于成本所限,精度必然不会很高,数据会出现抖动。通过提高采样速率,即所谓的过采样技术,对同一时刻多个数据进行滤波和平滑,从而尽可能准确地反馈当时的运动状态。

运动平面不匹配

     如上图所示,如果以Z为轴,向Y方向旋转,那么鼠标会划出一条水平的轨迹。但当设备本身发生一定倾斜,如在X轴上有一个旋转角,那么像刚才的移动,就会划出一条斜线。这可能会对用户造成费解。如果拥有加速度计,测量设备的倾斜程度,通过传感器融合算法,就能相对而言避免这类问题。但算法要求较高。

旋转,而不是位移

     普通鼠标都是基于位移的,移动多少,光标就移动多少。但空鼠不是,空鼠是基于旋转的。如果把空鼠在不旋转的基础上,移动一定距离,会发现光标完全没有变化(可能会因为一些干扰造成晃动)。这会让用户费解。可能有算法会试图通过所谓的加速度积分获取位移来考虑水平或垂直运动。但这种算法肯定是不行的,因为传感器的精度限制会非常不准确,基本没有解决的可能性。

防按键抖动

      普通鼠标的按键基本都做在鼠标的顶部,所以按键不会造成鼠标位移。想象按键若做在鼠标侧面,而且按键很硬的话,可能就会出现抖动。因此空中鼠标对按键的要求很高,需要尽可能的,同时还能有明确的触觉反馈。在按下去的时候,能尽量让鼠标不发生位移。最麻烦的是双击操作,双击时人点击鼠标的力量通常比单击大不少。而且会有两次连续的抖动。如果位移过远,操作系统会将其认为是一次拖拽操作,而非双击操作,这需要额外的处理。

手势识别

     这涉及到比较高级的问题,空鼠显然脱离键盘,一些快捷操作无法实现,通过一定的手势能够检测特定的动作,从而触发之前定义的操作。但这涉及到机器学习的话题,而且需要较高的用户学习成本。同样的操作,不同用户做出来的特征可能完全不同。

休眠

     电池供电系统,功耗是必须考虑的,可考虑在一定时间内没有检测到运动,则自动进入低功耗模式,间歇式的发送数据。

结论

     通过基本原理实现最简单的空鼠并不困难,但用户体验并不好。通过加入其它方法,能够有效提升准确性。但必须指出,解决运动平面不匹配的方法虽然能解决匹配问题,会降低实时性,产生类似时滞的感觉,所以取舍还需要具体分析。

     不同传感器和硬件设计,需要调节参数,通过反复的实验对比,确定合理的方案。

时间: 2024-10-19 16:42:12

空中鼠标算法原理讨论的相关文章

[转]MySQL索引背后的数据结构及算法原理

引用:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论. 文章

[数据库]MySQL索引背后的数据结构及算法原理

一 写在前面的话 在编程领域有一句人尽皆知的法则"程序 = 数据结构 + 算法",我个人是不太赞同这句话(因为我觉得程序不仅仅是数据结构加算法),但是在日常的学习和工作中我确认深深感受到数据结构和算法的重要性,很多东西,如果你愿意稍稍往深处挖一点,那么扑面而来的一定是各种数据结构和算法知识.例如几乎每个程序员都要打交道的数据库,如果仅仅是用来存个数据.建建表.建建索引.做做增删改查,那么也许觉得数据结构和这东西没什么关系.不过要是哪天心血来潮,想知道的多一点,想研究一下如何优化数据库,

MySQL索引背后的数据结构及算法原理

看到的一篇关于MySql索引的介绍,感觉比较经典,直接转了. 本文转自张洋博客,原文链接:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.为了避免混乱,本文将只关注于BTree索引,因为

SEO搜索中文分词算法原理实战教程

SEO搜索中文分词算法原理实战教程,如果一个人想成为一个合格的SEO人员,那么搜索引擎分词思维是必须掌握的,因为只有掌握了分词思维,你才可以做出搜索引擎喜欢,而且用户也喜欢的网页,虽然在梦想之旅视频教程中有和大家分享过搜索引擎中文分词原理,但没有完全的,系统的用文字版本和图片版本和大家分享,那么顾芳源就带大家如何正确学习SEO搜索分词思维吧. 搜索引擎中文分词原理 首先我们要知道搜索引擎工作原理是把每个网页的内容按词来录入到数据库,比如你的文章标题是:梦想SEO实战培训提供免费SEO教程,那么搜

qt-关于QT实现跨平台的原理讨论,新手请各位大侠赐教!

问题描述 关于QT实现跨平台的原理讨论,新手请各位大侠赐教! 最近要做个IM通讯软件,因为要跨平台,选择了QT.以前没用过,但是查资料说QT跨平台能力很强,实现原理是一次编码,处处编译.对于这不是不是很理解.我的理解是如果我在Windows上编码完成之后,我要向在mac上发布我的软件的话,要在mac上编译一次,然后打包之后,就可以在mac上发布使用了.还有,如果是这样的话,那其他运行的mac上,需要安装QT的环境么?谢谢各位路过的大侠赐教!!! 解决方案 Qt跨平台是它底层封装了针对不同平台的类

经典的7种排序算法 原理C++实现

经典的7种排序算法 原理C++实现 排序是编程过程中经常遇到的操作,它在很大程度上影响了程序的执行效率. 7种常见的排序算法大致可以分为两类:第一类是低级排序算法,有选择排序.冒泡排序.插入排序:第二类是高级排序算法,有堆排序.排序树.归并排序.快速排序. 一.低级排序算法 1. 选择排序 排序过程:给定一个数值集合,循环遍历集合,每次遍历从集合中选择出最小或最大的放入集合的开头或结尾的位置,下次循环从剩余的元素集合中遍历找出最小的并如上操作,最后直至所有原集合元素都遍历完毕,排序结束. 实现代

教你如何利用算法原理,让TA对你一见钟情

Tinder主打"看脸配对",操作非常简单,如果对TA感兴趣,可以将照片向右滑动,代表喜欢:如果对TA不感兴趣,可以将照片向左滑动,让其消失.一旦双方都标记为了"喜欢",就可以彼此发起对话. 鸡年过半,对象还没搞定?好消息,经过无数个昼夜的冥思苦想,我们已经找到Tinder配对算法的工作原理了!这个复杂的算法耗费了我们两个多月时间. Tinder配对算法是通过投票.打分和发消息这几种因素驱动的.Tinder配对算法会让你与对你感兴趣的人(通过右滑手机屏幕实现)配对.

DBSCAN聚类算法原理及其实现

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)聚类算法,它是一种基于高密度连通区域的.基于密度的聚类算法,能够将具有足够高密度的区域划分为簇,并在具有噪声的数据中发现任意形状的簇.我们总结一下DBSCAN聚类算法原理的基本要点: DBSCAN算法需要选择一种距离度量,对于待聚类的数据集中,任意两个点之间的距离,反映了点之间的密度,说明了点与点是否能够聚到同一类中.由于DBSCAN算法对高维数据定义密度很困难,

从算法原理,看推荐策略

  推荐算法简介 目前的推荐算法一般分为四大类: 协同过滤推荐算法 基于内容的推荐算法 混合推荐算法 流行度推荐算法 协同过滤的推荐算法 协同过滤推荐算法应该算是一种用的最多的推荐算法,它是通过用户的历史数据来构建"用户相似矩阵"和"产品相似矩阵"来对用户进行相关item的推荐,以达到精准满足用户喜好的目的.比如亚马逊等电商网站上的"买过XXX的人也买了XXX"就是一种协同过滤算法的应用. 基于内容的推荐算法 基于内容的推荐算法,是将item的名