发明内容
本发明解决的技术问题在于提供一种具有单边、多边邻居检测功能的阵列定位装置,以及针对该装置利用数据分析算法实现该装置中的模块在空间中的排布和单个模块在阵列中位置的定位。
为了实现上述目的,本发明采用了如下技术方案:
一种阵列定位装置,包括主机和多个操作模块,所述主机至少具有处理器和连接处理器的第一通信单元,所述处理器包括运算单元和存储单元;所述操作模块至少具有邻居检测单元和第二通信单元,所述邻居检测单元为分布于所述操作模块边缘的多个传感器,每个传感器包括沿操作模块边缘并列设置的信号发生器和信号感应器,且各个传感器中的信号发生器和信号感应器在顺时针/逆时针方向观察时,信号发生器始终位于信号感应器之前/之后;当任意两个操作模块接近时,相邻两边上的传感器中的信号感应器接收对方信号发生器发送的信号,并通过第二通信单元将相关信号发送到第一通信单元,由所述处理器处理。
优选的,所述传感器为磁铁-霍尔对、超声波收发对、红外收发对、光源-感光对、电感对或射频天线对中的任意一种。
本发明还进一步提供了一种基于数据分析的阵列定位方法,用于对上述的阵列定位装置中多个操作模块的阵列进行定位,包括如下步骤:
S1、给所述多个操作模块编号,依次为P1,P2,…,Pn;然后给每个操作模块上的多个传感器依次编号为P11,P12,…P1m;P21,P22,…,P2m;…;Pn1,Pn2,…,Pnm;
S2、使用一个m位的变量X表示某个操作模块上的多个传感器和其它操作模块上的任意传感器的位置关系,则X={x1,x2,…,xm},其中,x1,x2,…,xm的取值为0或1,且当该操作模块上的传感器Pxy的附近检测到临近的其它操作模块上的传感器时取x i =1,否则取x i =0,i=1,2,…,m;
S3、当多个操作模块相互之间的位置发生变化,任意操作模块上的一个传感器检测到有其它操作模块的传感器接近时,更新相应操作模块对应的变量X的值,并将新的X值上报给主机;
S4、主机接收所有产生新的X值的操作模块对应的X新值,构成集合Q={Xi, Xj, Xk…},其中i,j,k..为产生新的X值的操作模块的编号,并对新值集合Q进行数据分析,得到各个操作模块变化后的位置关系。
进一步的,当某个操作模块上的一个传感器检测到有其它操作模块的传感器接近时,成对的更新相应的两个传感器对应的变量x i 的值;否则,提示出错。
进一步的,步骤S4中,对新值集合Q进行数据分析,得到各个操作模块变化后的位置关系具体包括:
S41、根据集合Q提取X值产生变化的操作模块的编号i,j,k..;
S42、提取变化前相应操作模块的X值,组成集合Qpre={Xprei,Xprej,Xprek,…};
S43、根据集合Q和Qpre计算每个操作模块在本次位置变化中X值变化的位数和的集合Qchange_num={Ni , Nj, Nk,…};
S44、若集合Qchange_num中的元素之和为偶数且某一元素等于其他元素之和,则确定该元素对应的操作模块为中心操作模块,所述中心操作模块对应于移动位置进入原有排布的操作模块,其它元素对应的操作模块则为原有排布中受影响的操作模块;
若集合Qchange_num中的元素之和为奇数或者不满足某一元素等于其他元素之和,则将该集合归为不可处理信息序列,提示出错。
S45、根据对集合Qchange_num的分析结果,得到各个操作模块变化后的位置关系。
进一步的, 步骤S45具体包括:
S451、当Qchange_num中的元素数为2时,直接确定各个操作模块变化后的位置关系;或者,
S452、当Qchange_num中的元素数大于2时,提取二维数组PL[][],所述二维数组PL[][]对应于各个操作模块的历史位置信息,其每个元素的值表示该位置上的操作模块的编号;其中,PL[i][j]=n表示第i行j列放置的是操作模块Pn,当n=0时表示此位置没有操作块;
S453、若PL[i][j]=n,则PL[i-1][j]=q表示操作块Pn的上边是操作块Pq,PL[i+1][j]=q表示操作块Pn的下边是操作块Pq,PL[i][j-1]=m表示操作块Pn的左边是操作块Pm,PL[i][j+1]=m表示操作块Pn的右边是操作块Pm。
本发明的阵列定位装置,采用了独特的具有多边邻居检测的操作模块和与之对应的主机,不使用复杂、贵重、精密传感器,仅仅利用简单的磁铁-霍尔对、超声波收发对、 红外收发对、光源-感光对、电感对或射频天线对即可实现,结构简单,成本低,可以广泛用于游戏、玩具开发,或者日常生活中。
本发明的基于数据分析的阵列定位方法,针对上述的阵列定位装置,通过独创的设备编码模型,将多个操作模块在空间中的排列形状及单个模块在阵列中的定位问题分解为基本的操作,并在阵列中操作模块向主机上报的状态序列里提取基本操作对应的序列,提取排列信息,利用数据分析算法实现了该装置中的多个操作模块在空间中的排布和单个模块在阵列中位置的定位。其具有如下优点:
1)能够实时计算分析空间中操作模块排列的动态过程及单个模块的准确定位;
2)对主机运算要求低,计算复杂度小;
3)实现成本低,在紧密排布阵列分析与单设备定位问题上效果好。
本发明的基于数据分析的阵列定位方法,结合上述的阵列定位装置,用于互动式智能玩具领域,支持多个从设备间排列顺序的分析,典型的如支持多个具有四边邻居感应功能的片状、块状等电子设备的在线性或平面中的排列问题。
需要说明的是,本发明的方法不限于应用在上述阵列定位装置,也可用于多个电子设备需要进行邻居感应并计算排列顺序的问题。另外,本发明的方法并不仅限于线性及平面问题,也适应于空间设备邻边感应及排布分析问题。
具体实施方式
为了进一步理解本发明,下面结合实施例对本发明优选实施方案进行描述,但是应当理解,这些描述只是为进一步说明本发明的特征和优点,而不是对本发明权利要求的限制。
一种具有邻居检测的设备定义为:在设备边缘具有某种可检测是否有其他设备存在其边缘或一旁的设备,本发明提供的阵列定位装置即属于一种具有邻居检测的设备。
如图1和图2所示,在本发明的具体实施例中,该阵列定位装置包括主机1和操作模块2-4。其中,主机1设有处理器6和通信模块5,操作模块2的四边设有邻居检测单元7、8、9、10,其内部设有和主机内的通信模块5对应的通信模块;操作模块3、4的设置与操作模块2类似,图中没有一一画出。
上述的邻居检测单元可以是磁铁-霍尔对、超声波收发对、红外收发对、光源-感光对、电感对、射频天线对等。如图2所示,相邻的两个操作模块上的两个邻居检测单元9、11位置相对应,结构相似。其中,邻居检测单元9由一个信号发生器91和一个信号感应器92组成。特别的,每个操作模块边缘的邻居检测单元中信号发生器和信号感应器的相对位置严格一致,即:顺时针观察边缘的邻居检测单元内部的信号发生器和信号感应器排布,要么全部遵循信号发生器在前,要么全部遵循信号感应器在前。采用上述设计,两个相同的操作模块某一边靠近时,其边缘的邻居检测单元中的信号发生器中的信号会被彼此的信号感应器感应到,从而使操作模块具有感应某一边是否有其他操作模块靠近或远离的功能。
上述的阵列定位装置只能通过邻居检测单元获得其是否有邻居块,却无法区分邻居块,也无法知道某一侧拥有的邻居块的数量。因此,本发明进一步提出了一种基于数据分析的阵列定位方法,可以通过分析上述的多个操作模块在互动过程中上报主机的数据重建多个操作模块在线性、平面或空间上拼成的图形阵列。其具体包括如下步骤:
首先,给多个操作模块编号,依次为P1,P2,…,Pn;然后给每个操作模块上的多个传感器依次编号为P11,P12,…P1m;P21,P22,…,P2m;…;Pn1,Pn2,…,Pnm。
之后,使用一个m位的变量X表示某个操作模块上的多个传感器和其它操作模块上的任意传感器的位置关系,则X={x1,x2,…,xm},其中,x1,x2,…,xm的取值为0或1,且当该操作模块上的传感器Pxy的附近检测到临近的其它操作模块上的传感器时取x i =1,否则取x i =0,i=1,2,…,m。
当多个操作模块相互之间的位置发生变化,任意操作模块上的一个传感器检测到有其它操作模块的传感器接近时,更新相应操作模块对应的变量X的值,并将新的X值上报给主机。特别的,当某个操作模块上的一个传感器检测到有其它操作模块的传感器接近时,成对的更新相应的两个传感器对应的变量x i 的值;否则,提示出错。
主机接收所有产生新的X值的操作模块对应的X新值,构成集合Q={Xi, Xj, Xk…},其中i,j,k..为产生新的X值的操作模块的编号,并对新值集合Q进行数据分析,得到各个操作模块变化后的位置关系。具体包括:
a. 根据集合Q提取X值产生变化的操作模块的编号i,j,k..;
b. 提取变化前相应操作模块的X值,组成集合Qpre={Xprei,Xprej,Xprek,…};
c. 根据集合Q和Qpre计算每个操作模块在本次位置变化中X值变化的位数和的集合Qchange_num={Ni , Nj, Nk,…};
d. 若集合Qchange_num中的元素之和为偶数且某一元素等于其他元素之和,则确定该元素对应的操作模块为中心操作模块,所述中心操作模块对应于移动位置进入原有排布的操作模块,其它元素对应的操作模块则为原有排布中受影响的操作模块;
若集合Qchange_num中的元素之和为奇数或者不满足某一元素等于其他元素之和,则将该集合归为不可处理信息序列,提示出错。
e. 当Qchange_num中的元素数为2时,直接确定各个操作模块变化后的位置关系;
f. 当Qchange_num中的元素数大于2时,提取二维数组PL[][],该二维数组PL[][]对应于各个操作模块的历史位置信息,其每个元素的值表示该位置上的操作模块的编号;其中,PL[i][j]=n表示第i行j列放置的是操作模块Pn,当n=0时表示此位置没有操作块;若PL[i][j]=n,则PL[i-1][j]=q表示操作块Pn的上边是操作块Pq,PL[i+1][j]=q表示操作块Pn的下边是操作块Pq,PL[i][j-1]=m表示操作块Pn的左边是操作块Pm,PL[i][j+1]=m表示操作块Pn的右边是操作块Pm,从而得到各个操作模块变化后的位置关系。
下面将以前述的具有四边邻居检测功能的阵列定位装置为例对上述的定位方法进行具体说明。
首先,以具有4边邻居检测的操作模块为例介绍操作模块四边邻居有无的编码方案:定义每个操作模块某一边是否具有邻居用0、1表示,1表示有邻居,0表示没有邻居。用一个8位的变量state(即前述的变量X)来表示一个操作模块四个边有邻居的情况,如表1所示,8位的7~4位不表示任何信息默认为0,其中第0位表示操作模块上边上是否有邻居,如果有则置该位为1,否则置0,其中第1、2、3位分别表示操作模块的右边、下边、左边的邻居情况。
因此:如果某一操作模块仅仅上边有邻居state等于0x01;右边有邻居等于0x02;下边有等于0x04;左边有0x08;上边和右边有其值为0x03;四个边全都没有邻居state值为0x00;四个边全有其值为0x0F。这套操作模块邻居有无的编码方案能够快速简洁地将操作模块四边邻居有无的信息概括、描述出来。
表 1 state的8bits的构成表
本实施例的具体说明中,上述的阵列定位装置的主机可以是Pad、手机等,每个操作模块与主机通过无线通信技术建立连接,建立连接后每个操作模块在主机上有唯一的ID。每个操作模块能够检测其上、下、左、右四边有、无邻居操作模块(不能检测到邻居ID),且任意一边邻居状态发生变化(有邻居 -> 无邻居、无邻居 -> 有邻居)都会触发一次自身四边邻居信息state上报。
在下述的具体说明中,为了简单起见,默认对上述的阵列定位装置的操作满足如下条件(但不用于限制本发明的技术方案):
1)一次只操作一个操作模块。
2)相邻的两个操作模块A、B,只要两操作模块接触、远离,默认的边与边的配对规则为:A上边配对B下边、A下边配对B上边、A左边配对B右边、A右边配对B左边。
3)操作模块之间的接触、远离,必然是成对的上报主机,主机每次根据这一对信息判断操作模块的位置关系。如A右边与B左边接触,则主机收到的一对信息为:A—02、B—06,主机判断为A右边与B左边相邻。因此,如果主机收到的信息不是成对的,则提示出错。
当操作模块和主机通过无线建立连接之后,在主机中维护N个栈用来分别存储N个操作模块的上报信息序列。当装置中某个操作模块的邻居状态发生变化时,就会上报自身的state信息,主机会把对应的state信息PUSH到对应操作模块的栈中。同时主机开一个独立的线程用来从N个栈中分析出操作模块的动态信息。附图3展示了操作模块在平面上排布的五种典型变化情况,为了方便说明,定义编号为n的操作模块的ID为Pn,栈为Sn。
第一种情况:一个新的操作模块1靠近另一个已经排列好的操作模块0,此时操作模块0上报的信息为0x02,操作模块1上报的信息为0x08。此时无论主机先收到操作模块0上报的信息还是操作模块1上报的信息,在没有将操作模块0和操作模块1上报的信息全部收完整时,S0和S1中就不会存在一个配对信息。所谓配对信息即:满足从当前N个栈的栈顶取出的所有第一个元素可以构成互补信息。例如:当主机没有收到任何操作模块发的的信息时S0、S1为空,没有匹配信息;当收到操作模块0上报的信息后,S0变成{0x02}、S1仍然为{},此时由S0、S1的状态分析出的信息是:S0的右边有邻居、S1没有邻居,显然对于一个配对系统这条信息不成立,因此对栈顶信息不进行POP;当收到S1上报的0x08信息后,此时S0={0x02}、S1={0x08},可以推出的信息是:S0右边有邻居、S1左边有邻居,因此可以从S0、S1栈顶将该配对信息POP掉,并在全局操作模块排布变量中标记操作模块0的右边和操作模块1的左边已经贴在一起,组成一个整体。
第二种情况:一个新的操作模块2插入到操作模块0和操作模块1之间,此时分为两种情况:操作模块2最后上报与操作模块2不是最后上报。① 当操作模块2不是最后上报时,最终S0={0x02}、S1={0x08}、S2={0x0a}才会进行一次信息输出,此时根据栈顶元素值推出的信息是:操作模块0右边有邻居、操作模块1左边有邻居,操作模块2左右都有邻居,因此POP掉S0、S1、S2栈顶的元素,将新的信息存储到全局操作模块排布变量中。② 当操作模块是最后上报时,主机会先将操作模块0和操作模块1当成第一种情况来处理,紧接着收到操作模块2上报的0x0a信息,主机会拆解上一条操作模块0和操作模块1合并的信息,并重新将修正的状态保存下来。这里有个前提,即每次操作和下次操作有一定的时间间隔,这个时间间隔只要大于最大一次操作所有操作模块上报的时间即可,这样才能保证本次操作不会和下次操作混淆、才能保证第二种情况中的②情况修正的正确性。
第三种情况:和第二种情况类似,需要分操作模块2最后上报与非最后上报两种,其余操作类似。
第四种情况:一个新操作模块3插入到3个操作模块之间,当3号操作模块第一或第二上报时,栈空间最终会形成S0={0x02}、S1={0x04}、S2={0x08}、S3={0x0b}进行一次信息提取,得到操作模块3插到0、1、2操作模块之间。当操作模块3后上报时,操作模块0、1、2会提前形成某些组合,在操作模块3上报到来时会对之前信息进行修正,重新将之前的组合拆开,最终等到栈空间形成S0={0x02}、S1={0x04}、S2={0x08}、S3={0x0b}会进行一次信息提取。
第五种情况:一个新的操作模块4插入到4个操作模块之间。此种情况和第四种情况类似,如果操作模块4在第一或第二上报信息,栈空间最终会形成S0={0x02}、S1={0x04}、S2={0x08}、S3={0x01}、S4={0x0F}会进行一次信息提取。如果操作模块4较晚上报信息,操作模块0、1、2、3会先进行某些融合,当操作模块4的信息到来时会进行修正,将之前的组合拆开,最终等到栈空间形成S0={0x02}、S1={0x04}、S2={0x08}、S3={0x01}、S4={0x0F}再进行信息提取额。
任何在线性或者平面上拼图都会拆解上述5种情况,因此针对一个操作模块拼接过程主机只需用一个线程不断收集操作模块最新的state信息,并把其PUSH到对应的栈中。用另一个线程不断执行上述分析算法POP栈顶数据形成排列信息,最终达到识别操作模块阵列的排列甚至是定位某一操作模块在阵列中的具体位置的效果。
最后,需要说明的是:
1)不限于实例中的四边检测,本发明所述方法覆盖单边、两边、多边邻居检测。
2)不限于线性和平面阵列排布分析,本发明所述方法覆盖线性、平面和空间排布分析与阵列定位。
3)不限于实例中描述的具有四边邻居检测的装置,本发明所述方法覆盖所有具有做邻居检测、空间排布分析或阵列定位的设备。
4)不限于实例中所述的双线程实现方法,本发明所述方法覆盖单线程、多线程等实现方法
5)不限于实例中所述的基于栈的实现,本发明所述方法覆盖基于其他数据结构实现的相同功能的方法。
对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。