[转载]N95当手柄玩游戏,甩起来还可以用手势控制电脑,分享一下我们的设计经验 – Loning’s home – 博客园.
说明
演示视频
http://share.renren.com/share/259556761/2861373448
http://share.renren.com/share/259556761/2861370739
使用说明
解压缩后请打开Driver文件夹,按照自己的系统进入文件夹,其中x86为32位系统、x64为64位系统。
执行devinstall.bat后将会向系统添加模拟手柄的驱动程序。
执行devremove.bat将会删除手柄驱动。
执行完毕后请通过 设备管理器 (我的电脑 –》右键–》管理–》设备管理器)查看一个名为Wiisio Joystick Hid Device的设备,如果该设备工作正常,则系统成功安装该设备。
添加完驱动后即可直接运行Wiisio目录下的Wiisio.MainWinProgram.exe
可以使用test\joytester.exe 测试模拟手柄的运行情况。
在手机上,使用C(删除键)来切换模式,可以通过手机菜单切换模式
在Joystick模式下
手机数字按键1:将当前位置设为手机的平衡位置。
在GameKeyboard模式下
手机数字按键1:将当前位置设为手机的平衡位置。
手机Shift键(C删除键左边):切换当前的映射文件。
在GestureControl模式下
手机Shift键(C删除键左边):切换当前的映射文件。
系统需求
.net framework 2.0 sp2以上的.net框架
Microsoft or Widcomm Bluetooth stack 微软或Widcomm蓝牙协议栈
Nokia N95(其他带传感器的手机因无手机设备未测试)
开发人员
Loning
整体程序设计、驱动开发
Sherlock Yang
Nokia N95客户端开发
Reyoung
硬件设计
功能概述
手势识别
手势模拟按键
手势运行程序
新手势训练
游戏模拟
通过重力模拟游戏手柄,映射手机按键
通过重力模拟上下左右wsad等按键,映射手机按键
控制设备
通过串口发送控制信息
开发计划
iPhone, M9, Windows Phone, Windows Mobile 等客户端开发
使用Wifi通信
公布通信协议接受第三方手机客户端
下载地址
http://u.115.com/file/f1f602a133
摘要
中文摘要
本系统基于手势识别,Windows驱动模拟,八向全驱四轮机器人控制技术,蓝牙无线通信以及无线电通信技术,提出了通过对重力加速度进 行分析处理进而实现数字控制,并以此为控制信息实现一个以EMB-4650开发板为中心,集娱乐,生活为一体的多方位控制解决方案。通过远程手机客户端提 供重力加速度数据,EMB-4650开发板进行分析处理提取相关信息并发送给相关设备,从而实现以一手机客户端控制多个设备行为的目的,进一步展现一机多 用低碳环保的社会主题。
Abstract
The system is based on gesture recognition, Windows-driven simulation, eight-wheel drive to the whole robot control technology, Bluetooth wireless communications and radio communications technology, put forward a solution that use the result of processing the gravities’ data to achieve a multi-directional control solutions that use the EMB-4650 and make life, entertainment together. Remote mobile client provides acceleration of gravity data, EMB-4650 development board analysis and processing extract relevant information and send the information to the related devices, so as to realize the goal that use one mobile client to control multiple devices, to show the theme of a multiple purposes and Low carbon and environmental protection.
系统概述
系统简介及开发背景
现阶段,单一简陋的系统控制方法已经无法满足人们对系统快速准确控制的需要,于是触屏、语音控制、基于图像的手势控制、游戏摇杆等技术应运而生。然而,对于一些特殊应用,需要特殊的控制方法。
本文提出了一套基于加速度分析的控制系统解决方案,实现了一个一机多用、节能低耗、多设备同时处理、具有多种控制模式的控制系统。该系统可以在用于实时手势控制的同时播放电影、进行简单的游戏娱乐。
系统的整体架构分为四层:第一层是数据采集层,第二层是数据分析层,第三层是命令映射和控制层,第四层是被控制设备层。
“数据采集层”的主体为重力加速度信息提取模块,通过远程手机客户端采集加速度信息,并通过蓝牙发送到EMB-4650开发板。现在手机已经相当普遍,拥有重力加速度传感器的手机也已很多,这为此解决方案提供了良好的设备应用基础。
“数据分析层”的主体为数据分析模块,通过SVM支持向量机以及其他数据处理方法对加速度信息特征进行提取。
“命令映射和控制层”的主体为动作映射模块,通过第一层提供的加速度数据特征以及预先设置的映射表和当前系统所处的模式,将相应的加速度数据特征映射成相应的命令,并发送给相应的设备。如需修改映射表,进入本系统的用户界面设置界面对相应的数据特征设置相应的命令。
“被控制设备层”主体是相关设备接收命令以及执行命令的模块,此层范围很广,如本解决方案中的基于单片机的四轮机器人,这个机器人可以通过 接收到的命令实现各种操作(如加速,刹车,转弯,复位等)。通过连接不同设备至机器人下方的的扩展接口可实现拖地、扫地、吸尘等功能(扫地、吸尘功能未实 现);再如家庭中线路开关,可以接受到控制信号实现闭合控制。第四层与第三层主要通过无线模块进行通讯。
应用前景
该解决方案提供了一种既直观明了、充满想象力和乐趣的系统控制方法。使用该控制系统,用户不必在漆黑的夜晚摸黑找电灯开关,只需用已设定 好的手势摇晃用户随声携带的手机就能使眼前一片光明;用户也不必为与同伴一起玩游戏时找不到手柄而发愁,掏出你的手机,这就是一个拥有完整功能的游戏手 柄;用户甚至能掏出你的手机,控制机器人帮助他做家务。该解决方案基于EMB-4650开发板的节能嵌入式系统,并且还应用了特殊的节能技术,即在没有数 据处理时降低优先级以节省能源,在有数据处理时提高优先级以相应实时数据处理,因此完全可以将本系统作为24小时全天候家庭控制系统。现今,手机的极其普 遍,iPad等设备也在逐步增多,加速度传感器已逐渐成为这些设备的标准配置,该解决方案具有相当广泛的应用面。
系统特点
该系统采用加速度信息进行手势识别及系统控制,识别率高,外界环境干扰性小。
新手势易于添加,手势样本需求量小,训练迅速。用户可通过软件附带的训练功能添加自定义手势。
系统能够支持多种不同设备的连接。
充分利用现有资源、提高资源利用率、绿色节能,例如重力加速度信息使用手机等设备、电器控制也仅需在插线板多加一层我们设计的开关。
系统资源占用率低,在系统运行的同时,该设备可处理其他事物,一机多用。自动调节系统程序在操作系统中的运行优先级,无远程设备连接时降低优先级来降低系统资源使用率,节省电能;有远程设备连接时提高优先级,实时处理数据,避免丢包。
系统将加速度信息分为时序性数据与非时序性数据,时序性数据是会对下一次数据处理产生影响的数据,非时序性数据则与之相反。系统将使用不同线程处理这两种不同类型的数据。
系统原理及方案
系统设备组成
主体部分 | |
EMB-4650开发板 | 1个 |
Broadcom 2046 Bluetooth 2.1 | 1个 |
AT89S52 单片机 | 1个 |
FSK-21 超再生无线发射接收模块 | 1个 |
标配电源 | 1个 |
串口数据线 | 1条 |
自制机箱 | 1个 |
机器人部分 | |
带有47:1减速齿轮的电机 | 4个 |
舵机 | 4个 |
带有橡胶防滑套的车轮 | 4个 |
6V 210mAh镍氢电池组 | 1个 |
PVC底盘 | 1个 |
塑料接插件 | 若干 |
有机玻璃板 | 若干 |
AT89S52 单片机 | 1 |
FSK-21 超再生无线接收模块 | 1 |
远程设备 | |
Nokia N95 | 1 |
Nokia 5230 | 1 |
系统架构
图 3.1 系统整体架构
功能与指标
- 实时加速度信息处理
加速度信号在模拟键盘、手柄操作时需要较高的实时性,因而需要将时序性数据处理与非时序性数据处理分离。
- 手势识别
可进行离散的手势识别,易于添加新手势,用户可选择不同的手势-功能映射方式,手势识别率在85%以上。
- 多远程设备连接
支持多种不同设备同时连接,程序易于二次开发。在处理多设备时系统应保持实时性。
- 机器人模块
系统与被控设备之间通过无线设备进行通信,考虑到该设备工作环境主要位于室内,因此无线信号范围应在半径10M左右,但具有较好的墙体穿透能力。
无线开关是一种被控设备,进行简单的电路闭合控制。该设备应易于安装,能长期稳定运行。
系统空闲时CPU平均占用率不超过1%,每个设备连接后CPU平均占用率的增长不超过5%。
硬件系统设计方案
硬件部署
被控设备原理图
图 3.3 Wireless 315MHz 无线信号发射部分
图 3.4 Wireless 315MHz 无线信号接收部分以及四轮机器人控制
软件系统设计方案
软件流程
软件架构
(1) System Layer:该层包含系统API,Bluetooth驱动,串口操作模块,以及系统自定义的手柄模拟驱动。
(3) Logic Layer:该层是系统的主要逻辑层,负责接收、处理加速度信息以及分发数据。
(4) User Interface Layer:该层负责系统与用户间的交互。包括设备监视器、手势训练工具、任务栏通知及系统设置。
系统实现
重力加速度信息提取
手势识别
运动监听
在设备由静止转为运动的过程中,由于运动起始时设备会获得较大的力,从而引起加速度信息的剧烈改变,因而在一个较短的窗口时间内,即可检测出设备的运动情况。
在设备运动的过程中,由于设备会出现匀速状态,在t时间之内,样本的方差会小于,从而会导致系统判断错误。但作为手持设备,由于手部运动范围限制,只要合理设置匀速状态下窗口时间t’,即可降低系统误判率。
加速度信息归一化
经过归一化处理后,样本噪声明显降低。所得平滑曲线如图 4.1所示,其中红色为拟合后曲线,黄色为原始数据。
特征提取
在对样本数据归一化后,可得到四组样本A1、A2、A3 以及总的加速度Ac。分别计算样本的均值、方差、顶点数目、丰度、偏度。通过直方图,将各点由最大值至最小值分为若干组,统计落在组中的点的个数。
由于三组样本相互独立,我们可以构建一个包含该运动信息的高维特征向量V。然后通过支持向量机对这些向量进行分类处理,实现手势识别。
支持向量机与手势识别
程序内置手势
系统为了简化用户操作,已经内置了一部分训练好的手势供用户使用。用户可以在该基础上添加新的手势,亦可删除这些手势重新训练。系统内置的手势如图4.2所示。
类游戏手柄信息提取
多设备连接支持
在系统设计初期,考虑到使系统可以支持多种协议的连接、多种设备的接入,对于今后有可能进行的点都进行了抽象。信号处理模块见图 2。
动作映射
用户可在配置界面选择映射信息。系统将会根据工作模式不同将处理后的远程设备加速度信息及按键信息进行映射。
用户界面
监视器
训练界面
任务栏通知
在进行一些操作时,用户不希望查看监视器,同时也不希望观察远程设备上的反馈信息,但需要确认其手势是否被系统识别。因此,系统提供了接受到消息后在任务栏通知区域显示反馈消息的方式。
设置界面
在设置界面,用户可以设置映射配置、系统是否弹出任务栏通知、以及监视器中加速度图像的更新时间。系统设置的读取与存储由系统自动完成,使用.net framework的序列化功能实现。
为了便于热键输入,系统自定义了一个ComboBox。为了避免与系统的快捷键冲突,在输入时用户应逐个按键依次按下,对于系统响应的按键,如Win键,可在下拉的菜单中选取。手势设置界面见图 4.8。
在设置按键映射的界面中,用户可以将远程设备的旋转状态、按键转换为本地的案件信息。设置界面见图 4.9。
基于单片机的四轮机器人
总体设计思路
在机器人设计上,我们采用了模块化的思想。将舵机控制交由专门的舵机控制器执行。剩下控制和通信工作交由51单片机实现。
出于灵活性的考虑,我们并没有采用差速转弯的控制方法,而是利用四个舵机控制方向。这样便可以做到原地转弯或者横向运动。机器人既可以在家中当作娱乐玩具,也可以添加吸尘器等外部设备,做家庭助理。
硬件设计
舵机控制模块
采用高精度8路舵机控制模块,控制脉冲宽度从500ns到2500ns不等,支持匀速切换脉冲宽度,使移动更平滑。切可自由调控波特率,多模块串联等。
该模块通过串口与单片机通讯。达到简化单片机任务,精确控制舵机,消除舵机抖动等不良反应的作用。
无线接收模块
由于我们系统主题通讯为蓝牙通讯,为了防止信号间相互干扰,我们放弃使用2.4hz的无线收发模块。而是采用了成本更为低廉,且不与主要通讯干扰的超再生接受模块(接受频率为315MHz)。其接口如下图显示:
电机控制模块
电机控制模块采用了l298芯片,该芯片可以用pwm信号控制电机转速。并且采用光电开关,达到了控制信号隔离的目的。
单片机部分
软件设计
总体思路
虽然51系列单片机开发语言为C语言,但是在软件设计上,我们运用了更多面向对象的设计思想。其结构图4.12所示:
具体模块介绍
CQueue是一个循环队列,由于此类处于系统的核心位置,对其算法进行优化,是之效率更高。
Message主体实现消息队列,实现收到消息,获取消息功能。
Serial 由中断实现串口通讯,并且方便调试,实现了一些串口输出函数,例如输出字符串,输出二进制数等。
WirelessControl实现了多设备多命令的系统的收发协议。
CarControl 针对四轮机器人实现的机器人运动控制函数
消息驱动的系统
如图4.13所示,整个系统以消息为中心。此图反映了消息处理流程,系统反复查找新消息,如果有新消息,便去做响应的处理。这种系统扩展性强,便于添加新设备和新的控制任务。
由中断实现的并行输入
我们的系统输入为中断输入,并且只在输入中断中做最简单的消息处理和发送消息,使系统可扩展性,鲁棒性都得到增强。并最大程度的利用了系统资源。
图4.14是串口中断的活动图,内容极为简单,只是将串口数据存下并发送消息给消息队列。
图4.15是无线中断活动图,在无线中断中,我们对收发数据进行编码分析,但是其实也是仅仅做了解析无线内容,发送无线消息的任务。而消息的处理,依赖于主消息循环中的处理函数处理。
与主题分离的控制模块
我们的系统可以实现各种控制模块,且可以自由扩展。控制模块接受主体的消息,解析消息和处理消息的工作,完全交由控制模块自己进行。方便扩展。
无线发射及协议
由串口写入发射命令,例如”A0D0*”,其中A后面的数字为设备地址,D后面的数字为发射数据,*是命令截至位。
串口命令写入解析完毕后,调用发射无线消息的函数,按照消息格式进行发送。
通信模块
远程设备与开发板的通信
我们选择Bluetooth 技术来完成远程设备与开发板之间的通信。
Bluetooth 技 术在2.4 GHz 波段运行,该波段是一种无需申请许可证的工业、科技、医学 (ISM) 无线电波段,能耗低,可以使远程设备更加持久的发送加速度信息。支持点对点及点对多点通信,因而在设备主板上仅需要一个Bluetooth模块。现阶段附 带有重力传感器的手持设备通常都具有Bluetooth 模块。
被控设备与开发板的通信
操作系统驱动
Windows系统没有提供模拟手柄输入设备的API接口。因此,需要开发一款驱动程序,接收程序处理好的手柄模拟信号,再将该信号传递给操作系统。
该驱动采用WDM模型编写,参考了WDM SDK中自带的VHIDMINI驱动程序。可支持带数值的X、Y轴,油门(Z轴),帽子开关(观察点),及12个模拟按钮。
远程设备客户端
远程客户端平台
解决方案采用手机移动平台,考虑到当今社会手机已经相当普及,所以想通过在手机端进行开发,以达到一机多用的效果,同时也符合当今社会低碳环保的社会主题。
蓝牙模块
Symbian OS上的蓝牙模块是由一系列的组件层次结构组成,就是一种堆栈结构,其总体结构见图 4.17。
重力加速度获取模块
用户界面
用户界面是用户与客户端进行交流的接口,在本解决方案中,采用了Model-View-Controller模型,整体构架如图4.23所示:
采取这样的模式使视图层与业务层分离,有利于降低耦合性,增加了可维护性,加开了相关开发速度。用户界面相关的整体结构类图4.24所示: