引 言
拳击娱乐系统是为满足广大群众的需要而设计,目前市场上还没有模拟真人的对抗性的拳击娱乐设备,该系统的出现使人们从枯燥的锻炼中摆脱出来,能够主动地投入到娱乐中。在人形靶的头部正面和胸部正面各安装一个击打气袋和压力传感器,当语音提示可以开始击打时,使用者可以全力击打头、胸部,同时ARM9处理器采集相应的击打数据,在人形靶上安装有自动出击拳装置。
该系统选用了Samsung公司的16/32位RISC处理器S3C2440,由于该处理器价格低、功耗小、性能高,从而降低了整个系统的成本,便于市场的推广。
在用户界面的设计上,采用目前流行的Qt/Embedded,使显示界面更直观,操作更方便。Qt/Embedded丰富的控件资源和较好的可移植性给界面的设计以及今后的进一步完善带来了极大的方便。
1 拳击健身娱乐系统简介
拳击娱乐系统主要由人形靶、用户操作界面、语音播报、数据采集处理、自动出拳五部分组成。使用者击打气袋时,该系统采集压力传感器数据,并进行相应的处理,计算出使用者的出拳力量。语音播报用来提示、问候使用者并播报结果数据。自动出拳可以根据前方是否有遮挡物而随机出拳还击。语音播报和自动出拳的结合更丰富了该系统的互动性。
2 人形靶部分
人形靶高度可以根据使用者的高度进行调整,以适应不同人群的使用。该系统针对娱乐的要求设计了两个击打有效区:头部、胸部。每个击打有效区都由击打气袋、开关触发装置和压力传感器三部分组成。
在人形靶的头部装有反射式光电开关,用来判断前方是否有遮挡物,为自动出拳设备提供输入信号。
3 用户操作部分
用户操作Qt/Embedded设计开发,界面更加人性化,简单化,使不同人群快速学会使用。Qt/Embedded是专门为嵌入式设备上的图形用户接口和应用开发设计的开发包,可以跨平台运行在ARM处理器上的嵌入式Linux操作系统上。Qt/Embedded具有较好的移植性,从而使得今后该部分的进一步开发更加方便。采用标准PDA大小的触摸屏,所以操作非常方便。
Qt/Embedded的底层图形引擎基于Framebuffer。Framebuffer是在Linux内核架构版本2.2以后推出的标准显示设备驱动接口。采用mmap系统调用,可以将Framebuffer的显示缓存映射为可连续访问的一段内存储针。Framebuffer驱动程序的实现分为两个方面:一方面是对LCD及其相关部分的初始化,包括画面在缓冲区的创建和对DMA通道的设置;另外一方面是对画面缓冲区的读写,具体到代码为read,write,lseek等系统调用接口。Qt/Embedded延续了Qt在桌面系统的所有功能,丰富的API接口和基于组件的编程模型,使得嵌入式Linux系统中的应用程序更加方便于该系统的开发。
该部分分为娱乐和结果回放两部分。主界面如图1所示。
娱乐部分有三种模式:压力测试、力量模式、速度模式。压力测试用来测试头、胸气袋压力是否在合适范围内,压力过高、过低进行语音提示;压力模式用来测试使用者力气大小;速度模式用来测试使用者在一定时间内击打的有效拳数。
结果回放用来回放前段时间该系统使用情况,包括击打位置和击打力量两部分信息。
4 语音播报部分
该部分负责播报使用提示、问候语和使用者的击打结果。播报结果包括有效拳重、有效拳数。当使用者击打到有效区域时,会发出仿真的击打声音;压力测试时,压力过高、过低的报警提示音;在开关机时,系统会播报问候语等。在模拟与真人的对抗性的娱乐环境,语音播报突出了趣味性,提高了娱乐效果。
该部分是由专用的语音芯片UDA1341来完成的。在Linux下完成此功能,首先需要编译UDA1341的驱动,使用编译工具为交叉编译器arm-linux-gcc 3.4.1,然后移植到ARM开发板。最后再将madplay播放器使用同样的方法编译后移植到ARM开发板上。驱动和播放器都移植好后,在应用程序中实现语音播报功能。
5 数据采集处理部分
数据采集处理部分由S3C2440处理器控制实现。它通过判断采集有效区中触发装置的触发信号是否有效,控制压力传感器数据的采集。
5.1 采集击打点触发装置的触发信号
在运行力量或速度模式时,需要不断的扫描头、胸击打按键的状态,当击打按键闭合时,开启相应压力传感器采集数据,同时清除击打按键的闭合状态。
该部分在硬件上采用了CD4093来锁存按键的状态,并且使用芯片75452来清除击打按键的锁存状态。
5.2 压力传感器的采集
该部分是系统设计的主要部分,由该部分采集到的数据可以计算出出拳力量。
采集气压需要压力传感器和S3C2410的ADC转换器。压力传感器选用Motorola的MPX5100压力传感器。该传感器需要5 V直流电源供电,量程为110 kPa,对应的输出为0~5 V。
由于击打气袋时,气袋内部不同位置压力变化不同,造成压力传感器采集的压力数据和其距离击打位置有关。为了降低由此引起的测量误差,在头、胸部分别安装两个独立气袋和传感器。实验证明该方案在一定程度上减小了误差,能满足本娱乐拳击系统对结果精度的要求。
由于硬件电路以及电源带来的干扰,导致采集的电压叠加了许多毛刺,对数据的处理带来了很大的困难。并对大量数据进行分析后,在软件上选定了中值滤波的方法减小其干扰,该方法具有编程简单,滤波效果好的特点。
当击打按键被击中,这时记录下规定时间内采集的电压值,通过中值滤波去除毛刺,得到平滑的波形,从而取其峰值作为击打按键的电压值。
5.3 训练数据的保存
娱乐结果数据保存到开发板NAND FLASH中,为结果回放提供数据。在开始使用该系统前,提示是否覆盖已有数据结果,如此可以确保有充足的NANDFLASH空间保存当次结果数据。数据结果包括击打位置、击打力量。为了以后本系统更容易升级,采用数据库SQLITE存放结果数据,以供结果回放时使用。
数据采集处理部分在软件的实现上,分别编写了按键驱动button.ko,ADC转换驱动adc.ko,该驱动能通过设置,选择采集两路AD中那路。建立SQLITE数据库,并对其进行数据存取。
6 自动出拳部分
自动出拳分为检测是否有遮挡物和出拳控制两部分。是否出拳、出左右拳完全是随机的,这样增加了随机不定性,可以达到更好的娱乐效果。
检测遮挡物部分采用反射式光电开关,当光电开关接收到遮挡物的反射信号,输出高电平信号,否则输出低电平信号,该信号通过隔离光耦传人处理器S3C2440。S3C2440收到存在遮挡物的有效信号后,产生一个随机信号控制出拳装置。该随机信号将决定是否出拳、出左拳还是右拳。
出拳控制部分采用两个直流电机来带动两个机械臂完成出拳动作。为了确保每次出拳时,机械臂在收回状态时终止,在机械臂安装一个能产生反馈信号的装置。自动出拳系统根据该反馈信号来确保完成一个出拳周期。
为了避免频繁出拳,引起电机频繁起停对电机本身的损害,同时不影响自动出拳的娱乐效果,自动出拳系统在连续出拳五次后,暂停随后的两次出拳,然后恢复自动出拳。
该部分软件实现包括:控制电机驱动和光电开关信号采集驱动、产生随机信号并控制电机的用户态程序。
7 结 语
该系统适用于各个年龄层的人群,可以比较准确地测量击打力量,同时该系统本身的语音播报以及自动出拳的功能使机器人的互动性更加丰富,体现了该系统的娱乐性。该系统在Linux操作系统下开发,结果保存采用SQLITE数据库,这给今后功能的扩展预留了很大空间。