首先自我介绍下,本人接触室内定位这个行业三年多,主要从事定位算法的研究。
虽然我入行时间不长,但是还是接触过不少的定位算法,其中主要包括蓝牙、WI-FI、地磁、惯性、灯光定位算法,据我所知这几种方式基本覆盖了市面上90%的室内定位公司。
黑幕其实也说不上,主要是说说我这几年踩到的一些有意思的坑,顺便对有志入行的朋友提个醒,不要去尝试一些看似有可能但是实际上是死路一条的方法。
如果我下面的任何观点有误,欢迎指正。
这个行业可谓是鱼龙混杂,有非常有技术实力的公司,也有纯属圈钱的公司。公司规模一般不大,所以还没有哪一家能够一统天下的。
这个行业本身利润还是挺高的,毕竟主要靠算法。这几年也正好赶上国家政策,一是智慧停车,二是智慧医院,前者一般对应大型商场的地下停车场,商场和医院一样是不差钱的主。这样一来也就吸引了大量的室内定位公司如雨后春笋一般“崛起”。当然,并不是你的技术实力强就能拿到大订单的,这点想必各位都心知肚明,技术、营销、人脉缺一不可。
定位算法真的是五花八门,我就主要从我熟悉的几种算法来一一介绍。
惯性导航主要是通过用户的运动数据(一般包括行走步数、行走步长和行走方向)来推算出用户当前到达的位置,以达到定位的效果。
想要对用户进行定位,首先必须要先知道用户在哪。不管你是用GPS、蓝牙还是其他任何定位手段都好,首先要知道用户在哪儿,然后才能利用惯性导航算法来一步步推算出用户下一步的运动位置。
这点就证明了,这个算法是没法单独使用的。
惯性导航是有误差累积的,而且是越积越多。
计步器的误差我们暂且忽略不计,但是运动步长的误差就很难忽视了,假设一开始每一步只是偏差3-5厘米,到了一百步以后就是3-5米了,走的越远误差越大。
另一个重要的影响因素便是方向了,即使方向偏差仅仅只有 10 ° 10\degree 10°,一百米以后也就相当可观了。根据我个人的经验来说,手机的方向偏差在 10 ° 10\degree 10°到 30 ° 30\degree 30°都是非常正常的,可想而知最终的定位误差。
但是咱们反过来想,如果只要求在10米范围内的定位,上面的这些问题就不是什么问题了。所以说,小范围内,用惯性导航的效果还是挺好的。
惯性导航只适用于辅助定位,而且是小范围的。
由于我本人只研究过蓝牙的定位算法,而蓝牙、WI-FI据我了解两种算法原理是比较接近的,所以我这里只提下蓝牙的定位算法。
蓝牙或者说类似蓝牙的定位方式用的算法一般有两大类:三点定位法、指纹法。
三点定位法的原理由下面这一张图就可以说明白。
只要知道A、B、C三个点的坐标和三点分别到图中O点的距离,就可以通过下面的数学公式将O的坐标给计算出来。
{ ( x O − x A ) 2 + ( y O − y A ) 2 = O A 2 ( x O − x B ) 2 + ( y O − y B ) 2 = O B 2 ( x O − x C ) 2 + ( y O − y C ) 2 = O C 2 \begin{cases} \quad (x_O-x_A)^2+(y_O-y_A)^2=OA^2\\ \quad (x_O-x_B)^2+(y_O-y_B)^2=OB^2 \\ \quad (x_O-x_C)^2+(y_O-y_C)^2=OC^2 \end{cases} ⎩⎪⎨⎪⎧(xO−xA)2+(yO−yA)2=OA2(xO−xB)2+(yO−yB)2=OB2(xO−xC)2+(yO−yC)2=OC2
我这里没有将公式展开,不过这相信是难不倒各位看官的,这个公式非常完美,但这前提是我们能够准确的计算出 O A 、 O B 、 O C OA、OB、OC OA、OB、OC,这才是难点。如果没有这个难点的话,室内定位就大结局了,具体难在哪里,我会在后面说明。
介于距离的计算精度问题,上面的公式未必能适应多变的环境,因此产生了非常多的变种算法,这里我就不多说,各位可以自行去查找一些资料。
跟三点定位法不同的是,指纹法不需要知道蓝牙等设备的位置。指纹法通过事先将某个位置采集的信号的特征储存在数据库中,每次对用户所在位置采集的信号与数据库里的数据进行匹配(匹配算法有很多,这里不提),利用算法找到最佳的匹配点,然后确定用户位置。
举个例子吧,还是这张图:
假设我提前在O点采集信号,采集到信号 S = [ S A , S B , S C ] S=[S_A,S_B,S_C] S=[SA,SB,SC],将这三个数据存到数据库中。当用户走到相同的位置时,他的收信设备收到信号为 S ′ = [ S A ′ , S B ′ , S C ′ ] S'=[S_A',S_B',S_C'] S′=[SA′,SB′,SC′],此时我在数据库中去查找与 S ′ S' S′最相似的数据,匹配发现最相似的数据是 S S S,反过来就能确定用户此时在O点。
三点定位法和指纹法主要的难点基本相同。首先,不论是蓝牙还是WI-FI,发送的都是电磁波,电磁波在传播过程中容易受到环境噪声的干扰(例如多径效应)。其次,发送信号和接收信号的设备硬件本身的品质参差不齐,获取到的信号特征也就天差地别。
简而言之,如何降低环境干扰、降低不同品质收发信装置的差异,这些是做算法需要研究的重点。
个人观点,蓝牙和WI-FI应该还是未来室内定位研究的重点。
地磁的核心算法与上面提到指纹法一致,只不过采集的数据由电磁波信号换成了地磁场信号。
地磁作为定位方式的依据就在于建筑内部混泥土材料中钢筋的不同分布,使得建筑物内部磁场产生了稳定的变化,因此我们就利用建筑内部不同位置的磁场来用作指纹法匹配的数据来源。
我们都知道磁场会受到铁制品的干扰,首先汽车就是一个大型的铁制品了,其次人体血液是含铁成分的,那么这样一来,车来车往的室内停车场和人来人往的医院以及商场就很难保持磁场的稳定性,定位效果也将大打折扣。
虽然我前面说过,磁场定位的依据是由于建筑物内部的钢材,但是实际上部分区域的差异可能并没有那么的明显,打个比方就是5米远和10米远的磁场特征几乎一致,这个时候匹配算法就不一定能够很好的进行区分,定位精度就会稍打折扣。
这是我不太看好的一种定位方式,费时费力且定位精度差。
实话说,光定位我没有真正去实现过,国内几乎很少有听说哪家公司用到这项技术的。
光定位如同字面意思,就是利用灯光来传递信号,跟前几年有点火的Li-Fi差不多。原理就是利用灯光的闪烁来发送数据,各位可以想象成摩斯密码,利用调节灯光的闪烁间隔来发送信号。当然灯光闪烁速度达到一定的频率后,人眼是无法识别的,因此并不会影响用户的感官。光定位需要通过相机来捕捉信号,再利用对应的解码算法来读取数据。
毕竟是类似摩斯密码的形式,两个不同的摩斯密码同时播报,别人也就无法识别了。这样的特性就限制了每盏灯之间的距离不能太近,太近了彼此之间就会产生干扰,这么一来灯与灯之间会有盲区。另外,在一盏灯的辐射范围内,是无法确定用户的具体方位(只能知道在距离某盏灯X米的距离,不知道在灯的前后还是左右),这样一来就限制了光定位的定位精度。
为了防止被别人利用,编解码算法一般需要自行设计,实现难度较高,不是一般公司玩得起的。
是一种有趣的方法,但是实现难度大,效果却并不比蓝牙更好。和惯性导航结合倒是可以一试。
上面说的其实都是针对人在步行的时候如何进行定位,那么如何对室内停车场中的行驶车辆进行定位呢?这其实是业内的一个难点,据我所知目前暂时没有任何公司能做到这一点。
车上定位又是一种完全不一样的场景,我在上面说的的方法几乎都将失效:
车行中唯一有可能性的就是光定位,或者说现在比较火的视觉定位(手机就暂时别想了)。
室内定位其实入门门槛并不高,然而其中还是有不少学问的,本人毕竟接触时间也并不长,上面提出些难点也就当抛砖引玉了,若各位有什么新思路,也望不吝赐教。
话外多提一点,若是嫌算法麻烦,贴个二维码小字条也还是能快速定位的,当然美不美观就是另外一回事了,哈哈。