基于R16的五子棋虚拟现实对弈系统设计
2017-11-03陈睿祺郁佳佳诸程杰刘云卿徐叶菡
陈睿祺,郁佳佳,诸程杰,刘云卿,徐叶菡
(东南大学成贤学院电子与计算机工程学院,南京 210088)
基于R16的五子棋虚拟现实对弈系统设计
陈睿祺,郁佳佳*,诸程杰,刘云卿,徐叶菡
(东南大学成贤学院电子与计算机工程学院,南京 210088)
基于R16芯片和IOIO模块开发了一套五子棋虚拟现实对弈平台。平台基于IOIO模块连接图像识别模块、落子系统模块、远程通信模块,开发了针对五子棋棋盘的图像识别软件系统和机械落子系统,实现了虚拟现实对弈功能,包括人机对弈和远程对弈两方面子功能。人机对弈功能通过图像识别分析棋盘信息并作出决策,之后控制机械结构落子。远程对弈功能根据远程棋手决策指导机械机构完成落子,并再次采集棋盘信息反馈给远程棋手。
R16;IOIO;嵌入式系统;图像识别
2016年3月15日Alpha Go以总比分4:1战胜韩国棋手李世石,人机对弈又一次走进普通民众视野并成为人工智能的代表应用形式。
随时计算机软件技术的普及,人机对弈、虚拟现实对战等应用软件层出不穷,加之物联网、嵌入式系统的软硬件技术不断发展,相应系统及软件的设计思维向集成化、小型化、开源化等方面转变,由此,虚拟现实对弈在人机交互方式和真实用户体验有着更高的要求。本文基于R16辅以IOIO制作了一个即时交互的五子棋虚拟现实对弈系统,可实现五子棋人机对弈或远程对弈。
1 处理及控制平台简介
1.1 R16简介
面对当下对嵌入式系统设计思维向集成化、小型化和高性能的需求,珠海全志科技股份有限公司设计了R16嵌入式系统芯片。
硬件设计上,R16基于ARMCortex-A7架构,主频最高可达1.6 GHz,主存512 MHz,拥有多种储存接口及外设接口;采用Mali400作为图形处理器;支持主流视屏格式的1 080 pixel的解码与回放,支持Hi-Fi音频解码;最高支持5 Mpixel摄像头;同时支持USB Host及USB OTG。R16结构功能框图如图1所示。
图1 R16结构功能框图
软件平台上,R16可直接运行Android 4.4操作系统,通过Android系统的应用程序层进行JAVA编程操作即可实现应用功能。
1.2 IOIO简介
IOIO是SparkFun公司以PIC24F为核心控制器针对Android 1.5版本以上操作系统设计的通用性开源控制模块。IOIO硬件电路上集成了模拟输入、I2C总线、SPI、UART、GPIO、PWM等多个功能[1]。
IOIO通过USB或者蓝牙可以直接与Android操作系统设备相连接,只需通过其提供的Java API接口进行Android编程即可直接对外部硬件I/O端口进行控制。目前,市面上主流兼容USB OTG的Android操作系统设备都兼容支持IOIO模块。
2 系统总体方案设计
2.1 总体结构
对弈系统主要由图像识别模块、落子系统模块、远程通信模块3部分组成。通过图像识别后将信息处理后通过落子系统模块进行落子或通过远程通信模块与异地相同系统进行通信后通过落子系统模块进行落子。系统模型图如图2所示
图2 系统模型图
2.2 硬件设计
根据总体方案,若为人机对弈,首先通过OV2640摄像头拍摄棋盘信息后发送至R16进行图像识别处理,经过决策系统完成处理后通过USB OTG连接IOIO并对其IO口进行控制,进而控制步进电机的转动圈数来控制丝杠、滑轨组成的机械结构到达处决策系统所处理处的落子位置,再控制舵机打开开关实现落子;若为远程对弈通过WIFI模块对数据进行发送与接收后控制机械结构实现落子。为了上述电路能够正常工作,设计了可靠的供电模块。对弈系统硬件结构如图3所示。
图3 对弈系统硬件结构图
2.3 图像识别设计
本系统的落子识别设计基于OpenCV流程如图4所示。首先对落子前的棋盘进行拍照得到图片1;对图片1设置感兴趣区域[2]ROI(Region of Interest),同时进行角点识别确定棋盘上坐标位置予以记录;落子后再次采集棋盘图像得到图片2,将图片1与图片2做差后得到目标图片3;对目标图片3进行双边滤波以降低光源产生的阴影和随机产生的噪声干扰;将滤波后的图片进行二值化处理后使用Canny算法进行边缘检测;对检测到的边缘进行目标识别并进行圆心拟合得出圆心坐标;将圆心坐标与之前记录的棋盘坐标进行数据比对后得出落子对应棋盘坐标。
图4 落子识别流程图
2.4 落子系统设计
由IOIO对步进电机及舵机进行控制,R16将计算后得出的落子坐标对应指令通过USB 或者蓝牙发送IOIO,进而IOIO输出相应的脉冲波形用于控制步进电机实现精确的位移,到达对应坐标后,再控制舵机转动实现落子。落子结束后IOIO方向信号反向使步进电机回到起始位置。
图5 系统软件流程图
2.5 远程通信设计
在Java中,可通过openConnection()方法所返回的一个URLConnection对象与服务器建立通信[3]。由此通过sendPost()与sendGet()方法(发出请求参数,并使用BufferedReader读取服务器响应)来实现字符串的发送与接收,在主线程中对以上两个方法进行调用[4],即可完成字符串的接收与发送。
3 系统软件方案设计
系统的软件流程如图5所示。
3.1 图像识别
3.1.1 双边滤波
在OpenCV中调用双边滤波函数:BilateralFilter()将参数分别设置为:d=15,σr=50,σd=140,双边滤波后的图像对比如图6所示。
图6 双边滤波图像对比图
3.1.2 圆心拟合
圆心的拟合原理基于霍夫(Hough)变换,霍夫变换的主要思想是利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。而检测圆时所对应的参数方程为r2=(x-x0)2+(y-y0)2,OpenCV中实现霍夫圆检测算法主要使用两个步骤。第1步,二维累加器应用于找到可能的圆的位置。由于在圆周上的点的梯度应该指向半径方向,因此,对于每个点,只有沿着梯度方向的项才能得到增加(基于预定义的最大与最小半径值)。一旦找到可能的圆心(即获得预定义数量的投票),便在第2步构建一维的半径的直方图。这个直方图中的峰值对应的是检测到的圆的半径,进而便能得出圆心大致坐标位置[7]。在OpenCV中调用霍夫圆变换函数:cvHoughCircles(),即可实现圆心的拟合与圆心坐标的确定。
3.2 落子系统的控制
在IOIOLib[8]库中提供了下列接口API以便于对输出信号进行精确的控制。
Channel[8](通道):每个管脚都可以作为一个Channel,用来输出一个单独的信号。
Cues[8](执行时间):在某一特定的的时间段所有的Channels的命令组成。
Sequencer[8](顺序模式):可以将一系列复杂的操作按照精确的时间执行。
3.2.1 步进电机的控制
硬件上选择的步进电机规格为2线4相,每个脉冲电机旋转1.8°,即旋转圈数(Rounds)为200时旋转一圈。将控制步进电机的系统时钟频率(Fsystem)设定为250 kHz,设定period的值为400根据公式period=Fsystem÷Fmoto则步进电机工作频率(Fmoto)被设定为625 Hz。综上根据公式Rounds÷Fmoto×62500=Cue可得出执行时间(Cue)的值为10 000,进而实现步进电机179.05 rad/s转动速度控制。步进电机控制参数设置代码如下:
Stepper Step Cue_1.clk=Sequencer.Clock.CLK_250K;//设定系统时钟250 kHz
stepper Step Cue_1.pulse Width=2;//脉冲宽度2
stepper Step Cue_1.period=400;//周期400
stepper Dir Cue_1.value=false;//方向控制
sequencer_.push(cue_,10000);//cue执行时间设置
3.2.2 舵机的控制
将控制舵机的系统时钟频率(Fsystem)设定为2MHz,设定period的值为400根据公式period=Fsystem÷Factuator则舵机工作频率(Factuator)被设定为50 Hz,周期为20 ms。舵机控制参数设置代码如下:
Sequencer.ChannelConfigPwmPosition(
Sequencer.Clock.CLK_2 M,4 0000,2 000,new Digital Output.Spec(7));
通过更改pwm的脉冲宽度,实现对舵机来回旋转的控制,代码如下:
servosCue.pulse Width=2 000;//舵机,一个周期内高电平持续时间2 000/2 000=1 ms;
servosCue.pulse Width=4 000;//舵机,一个周期内高电平持续时间4 000/2 000=2 ms;
3.3 远程对弈设计
在用户选择进入远程对弈模式后,一方落子,系统进行图像识别分析获取落子点坐标后,整合为字符串,并通过post请求将该数据发送至云端服务器,服务器在接收到请求后数据库进行实时更新[9]。另一方则定时向服务器发送get请求获取落子点坐标,判定数据库更新后,将坐标点字符串信息经过Integer.parseInt(String string)转换整型[4],并交付IOIO控制机械结构进行运作,至此便实现了远程对弈。
4 整体性能测试
对弈系统的整体性能可以归纳为:准确性、时效性[10]。下面对这2种性能进行试验测试。
对于准确性的验证分为两个部分,图像识别棋子在棋盘坐标的准确性识别及落子系统的落子坐标的准确性。将棋盘划分为x、y轴,划分方式如图7所示。
图7 棋盘划分方式
将棋子随机放置于棋盘,通过游标卡尺测量棋子实际圆心坐标位置与在摄像头无抖动的条件下图像识别棋子圆心坐标进行误差比较,反复进行试验150次,记录x轴方向上最大绝对误差绝对值,最大相对误差;y轴方向上最大绝对误差,最大相对误差。模拟对弈通过机械机构进行棋盘落子,使用游标卡尺测量棋子圆心坐标位置与棋盘坐标位置进行误差比较,反复进行试验150次,同样记录两个坐标轴方向上的最大绝对误差绝对值,最大相对误差值。最大相对误差=最大绝对误差绝对值/对应棋盘坐标。准确性测试数据如表1所示,其中图像识别最大绝对误差及最大相对误差在x轴方向及y轴方向上均小于2%,表明识别能够满足圆心位置识别要求,结合棋盘坐标前后间隔完全能够准确识别出棋子所在棋盘坐标。根据分析误差来自于所采用的棋子并非严格正圆,以及棋子材质反光致使图片前后相减会造成棋子损失。落子最大绝对误差及相对误差在两个坐标轴方向上均小于5%,表明能够较好满足落子的准确性要求,不会出现落错棋盘坐标的情况发生。根据分析,误差来自于在通过轮盘带动棋子时由于棋子的质量不均,出子的速度不同,最终造成落到棋盘上会有误差产生。模拟对弈落子实验如图8所示。
表1 系统准确性测试数据
图8 模拟对弈落子实验图
时效性测试,使用秒表测量从用户落子后至机械结构落子返回起点的消耗时间来进行时效性测试以保证用户使用体验。测量数据如表2所示。
表2 系统时效性测试数据
从表中数据看出图像识别方面耗时在1 s以内,时效性良好,平均耗时25.44 s主要源自于五子棋落子大多集中在棋盘中部,机械系统从原点移动至落子处后进行落子返回过程会消耗大量时间,后期可以通过配置性能更好的步进电机或者搭建机械臂予以提升速度。
5 结束语
本系统是一款虚拟现实五子棋对弈嵌入式系统。其以功耗、性能、稳定性强的嵌入式系统芯片R16作为数据处理核心,主要采用OpenCV进行图像识别后辅以IOIO操作机械系统运作落子,实现了虚拟现实、现实增强、沉浸式体验[11]的对弈平台设计。从上述性能测试可以看出,该系统稳定性出色,时效性良好,完全满足当前人机对弈、远程对弈需求。本设计可扩展性比较强,具有今后进一步开发的潜力。
[1] 张佳进,陈立畅,唐秀英,等. IOIO在Android手机中的应用与研究[J]. 单片机与嵌入式系统应用,2013,13(2):42-44.
[2] 赵炯,朱海涛,屈剑平,等. 基于OpenCV的圆心定位在地铁隧道变形监测中的应用[J]. 传感器与微系统,2013,32(11):139-142.
[3] 李刚. 疯狂Android讲义[M]. 第3版. 北京:电子工业出版社,2015.
[4] 李刚. 疯狂Java讲义[M]. 第3版. 北京:电子工业出版社,2014.
[5] 陈秉涛. 数字图像混合噪声滤除算法研究[D]. 云南大学,2012.
[6] 河田谕志,五十川贤造,松本信幸,等. 图像处理设备以及方法:CN102713971A[P]. 2012.
[7] Robert Laganière.OpenCV2计算机视觉编程手册[M]. 北京:科学出版社,2013.
[8] Simon Monk. Making Android Accessories with Ioio[M]. USA:O’Reilly Media,Inc,2012.
[9] 冯久凌. 个人云系统移动终端数据同步的设计与实现[D]. 北京:北京邮电大学,2013.
[10] 孙伟,闫慧芳,李瑞豹,等. 基于惯性技术的端帮采煤机姿态测量仪设计[J]. 传感技术学报,2016,29(2):306-312.
[11] 曹峥. 应用于实验教学的五子棋人机对弈系统[J]. 软件工程师,2014,17(8):3-6.
ResearchandDesignofaGobangGameSysteamBasedonR16
CHENRuiqi,YuJiajia*,ZHUChengjie,LIUYunqing,XUYehan
(Electronic Engineering and Computer Science Department,Southeast UniversityChengxian Colloge,Nanjing 210088,China)
A virtual reality gobang playing platform is developed based on R16 chip and IOIO module. This platform connects pattern recognition module,chess move system module,distance communication module based on IOIO module. It also develops pattern recognition software system and mechanical chess move system especially for gobang chessboard and realizes virtual reality playing function including man-machine chess playing and distance chess playing. As for man-machine chess playing function,it makes decision based on chessboard information via pattern recognition and then controls mechanical structure to move. Regarding distance chess playing function,it guides mechanical structure to move according the decision by distance player and then feeds back the chessboard information to distance player.
R16;IOIO;embedded system development;image recognition
10.3969/j.issn.1005-9490.2017.05.051
2016-08-31修改日期2016-10-31
TP273.5
A
1005-9490(2017)05-1319-05
陈睿祺( 1993-) ,男,汉族,四川德阳,东南大学成贤学院电子与计算机工程学院,本科,研究方向为嵌入式系统设计,513149746@ qq.com;
郁佳佳(1986-) ,女,汉族,江苏南通,东南大学成贤学院电子与计算机工程学院,讲师,硕士,研究方向为模式识别与智能系统,yujiajia8@ 126.com;
诸程杰(1994-) ,男,汉族,江苏无锡,东南大学成贤学院电子与计算机工程学院,本科,研究方向为嵌入式系统设计,523272685@ qq.com。