• 710公海赌赌船官网欢迎您,公海赌赌船官方网站

    基于rssi的三点定位算法

    2018-09-27
    |
    微信扫一扫分享

    基于rssi的三点定位算法,是已知三个点的坐标和未知点到这三个点的rssi的信号值,求解未知点的坐标。

    首先是将rssi信号转换为距离:

     

    d=10^((ABS(RSSI)-A)/(10*n))

     

    其中d为距离,单位是m。

    RSSI为rssi信号强度,为负数。

    A为距离探测设备1m时的rssi值的绝对值,最佳范围在45-49之间。

    n为环境衰减因子,需要测试矫正,最佳范围在3.25-4.5之间。

     

    在获取未知点到三个点的距离后,剩下的就是求解未知点的坐标。我们都知道两个圆会相交于一个或者两个点(如果相交),那么三个圆如果相交的话,必然会交于一个点(三个探测设备在一条直线上的情况下有可能相交于两个点,这里不考虑),所以我们要求解的未知点便是以三个已知点为圆心,以他们与未知点之间的距离为半径画出的三个圆的交点。那么这个问题就转化为了求三个已知圆的交点,然后如果根据圆的方程:

     

    (x1 – x)^2 + (y1-y)^2 = r1^2

    (x2 – x)^2 + (y2-y)^2= r2^2

    (x3 – x)^2 + (y3-y)^2= r3^2

     

    求解的话,是非常难求出未知点的坐标的。

    这里介绍另一种程序容易实现的计算方法:

    一、判断任意两个圆是否相切(内切或外切),这里可以设定一个误差允许值d,也就是

     

    (x1 – x2)^2 + (y1-y2)^2= (r1+r2+d)^2

     

    满足上述公式时就认为两个圆相切,其中d为误差值,可以是正数或者负数。如果两个圆相切的话,那么交点就比较好求解了:

     

    x = x1+ (x2 - x1)*(r1/(r1 + r2));

     

    y = y1 + (y2- y1)*(r1/(r1 + r2));

     

    求解到x和y的坐标后,只需要用第三个圆进行验证,即求出这个点到第三个圆的圆心的距离,再和第三个圆的半径做比较,如果在误差允许范围内,那么就可以认为求得的x,y是三个圆的交点,也就是未知点的坐标。

     

    二、没有任意两个圆相切,那么就先用两个圆求解两个交点,如下图:

    其中A,B是两个圆心,坐标分别为(xa,ya)和(xb,ybs),C,D是两个圆的焦点,E为AB与CD的交点。

    其中

     

     AB^2 = (xa – xb)^2 +(ya-yb)^2

     

    其中

     

    AC^2 =AE^2 + CE^2               ……………………1

     

    BC^2 = BE^2+ CE^2                                ……………………2             

     

    AC = ra

    BC= rb

    AE + BE = AB = (xa – xb)^2+ (ya

    – yb)^2

     

    等式2转换为

     

    BC^2 = (AB - AE)^2 + CE^2

     

    BC^2 = AB^2 + AE^2 – 2*AB*AE + CE^2 ……………………3

     

    等式3减去等式1:

     

    BC^2 - AC^2 = AB^2 – 2*AB*AE

    AE = (rb ^2 - ra ^2 -AB^2)/( – 2*AB)

     

    于是可以根据以下公式求得CE

     

    CE^2 = AC^2 – AE^2

     

    我们还可以获取E点的坐标(xE, yE)

     

    xE = xa + ( (xb- xa)*AE )/AB

    yE = ya + ( (yb- ya)*AE )/AB

     

    然后我需要求得AB和CD的斜率KAB和KCD

     

    kAB = (yb - ya)/(xb - xa)

    kCD = (-1)/kAB //这里要注意kAB为0的情况

     

    然后求得CD和x轴的夹角

     

    ∠CDX = atan(kCD)

     

    这时候就可以求得C (xc, yc)和D(xd, yd)的坐标

     

    xc = xE + CE*cos(∠CDXs)

    yc = yE + CE*sin (∠CDXs)

    xd = xE - CE*cos(∠CDXs)

    yd = yE - CE*sin (∠CDXs) //这里也要注意sin (∠CDXs)和cos(∠CDXs)为nan的情况

     

    至此,我们就求得了两个圆的两个交点坐标,然后只需要用这两个点去第三个圆做验证,就可以获得三个圆的交点,也就是我们要求的未知点。

    来源:CSDN

     

    710公海赌赌船官网欢迎您