三球交汇定理计算标签位置(UWB)

题目

假设标签坐标为(x0,y0),基站ABCD的坐标分别为(x1,y1)(x2,y2)(x3,y3)(x4,y4),基站坐标已知,如何计算标签坐标

在这里插入图片描述

三球交汇定理

三球交汇定位( Three-ball intersection positioning schematic )是一种基于几何原理的定位方法,通过已知的三个点(基站)和目标到这些点的距离来确定目标的位置。该方法在二维平面上进行,可以扩展到三维空间。题目中有4个基站,根据定理,选择三个基站进行方程计算即可。

计算过程

  1. 距离方程:每个基站和标签之间的距离满足以下方程
    ( x n − x 0 ) 2 + ( y n − y 0 ) = r n 2 ; 其中 n = 1 , 2 , 3 , 4 \begin{aligned} & \left(x_n-x_0\right)^2+\left(y_n-y_0\right)=r_n^2; 其中n=1,2,3,4 \end{aligned} (xnx0)2+(yny0)=rn2;其中n=1,2,3,4

  2. 转换方程:展开上述方程并简化,得到以下四个方程
    x 0 2 + y 0 2 − 2 x 0 x 1 − 2 y 0 y 1 + x 1 2 + y 1 2 = r 1 2 x 0 2 + y 0 2 − 2 x 0 x 2 − 2 y 0 y 2 + x 2 2 + y 2 2 = r 2 2 x 0 2 + y 0 2 − 2 x 0 x 3 − 2 y 0 y 3 + x 3 2 + y 3 2 = r 3 2 x 0 2 + y 0 2 − 2 x 0 x 4 − 2 y 0 y 4 + x 4 2 + y 4 2 = r 4 2    \begin{aligned} & x_0^2+y_0^2-2 x_0 x_1-2 y_0 y_1+x_1^2+y_1^2=r_1^2 \\ & x_0^2+y_0^2-2 x_0 x_2-2 y_0 y_2+x_2^2+y_2^2=r_2^2 \\ & x_0^2+y_0^2-2 x_0 x_3-2 y_0 y_3+x_3^2+y_3^2=r_3^2 \\ & x_0^2+y_0^2-2 x_0 x_4-2 y_0 y_4+x_4^2+y_4^2=r_4^2~~ \end{aligned} x02+y022x0x12y0y1+x12+y12=r12x02+y022x0x22y0y2+x22+y22=r22x02+y022x0x32y0y3+x32+y32=r32x02+y022x0x42y0y4+x42+y42=r42  

  3. 作差消元法:通过减去这些方程,消除 x 0 2 + y 0 2 x_0^2+y_0^2 x02+y02 ,可以得到三个新的线性方程:

− 2 x 0 ( x 1 − x 2 ) − 2 y 0 ( y 1 − y 2 ) = r 1 2 − r 2 2 + x 2 2 + y 2 2 − x 1 2 − y 1 2 − 2 x 0 ( x 1 − x 3 ) − 2 y 0 ( y 1 − y 3 ) = r 1 2 − r 3 2 + x 3 2 + y 3 2 − x 1 2 − y 1 2 − 2 x 0 ( x 1 − x 4 ) − 2 y 0 ( y 1 − y 4 ) = r 1 2 − r 4 2 + x 4 2 + y 4 2 − x 1 2 − y 1 2 \begin{aligned} & -2 x_0\left(x_1-x_2\right)-2 y_0\left(y_1-y_2\right)=r_1^2-r_2^2+x_2^2+y_2^2-x_1^2-y_1^2 \\ & -2 x_0\left(x_1-x_3\right)-2 y_0\left(y_1-y_3\right)=r_1^2-r_3^2+x_3^2+y_3^2-x_1^2-y_1^2 \\ & -2 x_0\left(x_1-x_4\right)-2 y_0\left(y_1-y_4\right)=r_1^2-r_4^2+x_4^2+y_4^2-x_1^2-y_1^2 \end{aligned} 2x0(x1x2)2y0(y1y2)=r12r22+x22+y22x12y122x0(x1x3)2y0(y1y3)=r12r32+x32+y32x12y122x0(x1x4)2y0(y1y4)=r12r42+x42+y42x12y12

  1. 矩阵形式:提取 x 0 x_0 x0 y 0 y_0 y0 作为变量矩阵
    [ x 1 − x 2 y 1 − y 2 x 1 − x 3 y 1 − y 3 x 1 − x 4 y 1 − y 4 ] [ x 0 y 0 ] = 1 2 [ r 1 2 − r 2 2 + x 2 2 + y 2 2 − x 1 2 − y 1 2 r 1 2 − r 3 2 + x 3 2 + y 3 2 − x 1 2 − y 1 2 r 1 2 − r 4 2 + x 4 2 + y 4 2 − x 1 2 − y 1 2 ] \left[\begin{array}{ll} x_1-x_2 & y_1-y_2 \\ x_1-x_3 & y_1-y_3 \\ x_1-x_4 & y_1-y_4 \end{array}\right]\left[\begin{array}{l} x_0 \\ y_0 \end{array}\right]=\frac{1}{2}\left[\begin{array}{l} r_1^2-r_2^2+x_2^2+y_2^2-x_1^2-y_1^2 \\ r_1^2-r_3^2+x_3^2+y_3^2-x_1^2-y_1^2 \\ r_1^2-r_4^2+x_4^2+y_4^2-x_1^2-y_1^2 \end{array}\right] x1x2x1x3x1x4y1y2y1y3y1y4 [x0y0]=21 r12r22+x22+y22x12y12r12r32+x32+y32x12y12r12r42+x42+y42x12y12

代码实现

这个代码示例展示了如何通过球交汇定理计算标签的坐标。如果有四个基站数据,通常可以通过最小二乘法得到标签的坐标。

import numpy as np

def calculate_tag_position(x_coords, y_coords, distances):
    # 基站坐标
    x1, x2, x3, x4 = x_coords
    y1, y2, y3, y4 = y_coords
    r1, r2, r3, r4 = distances

    # 系数矩阵
    A = np.array([
        [x1 - x2, y1 - y2],
        [x1 - x3, y1 - y3],
        [x1 - x4, y1 - y4]
    ])

    # 常数项
    B = 0.5 * np.array([
        r1**2 - r2**2 + x2**2 + y2**2 - x1**2 - y1**2,
        r1**2 - r3**2 + x3**2 + y3**2 - x1**2 - y1**2,
        r1**2 - r4**2 + x4**2 + y4**2 - x1**2 - y1**2
    ])

    # 解方程 Ax = B
    pos, residuals, rank, s = np.linalg.lstsq(A, B, rcond=None)

    print("\nSolution (解) (pos):", pos)
    print("Residuals (残差和:无解则返回空数组):", residuals)
    print("Rank of A (矩阵A的秩):", rank)
    print("Singular values of A (矩阵A奇异值):", s)
        
    return pos


# 示例数据
x_coords = [0, 1, 0, 1]
y_coords = [0, 0, 1, 1]
distances = [1.0, 1.414, 1.0, 1.414]#距离

# 计算标签坐标
tag_position = calculate_tag_position(x_coords, y_coords, distances)
print(f"标签坐标: (x0, y0) = ({tag_position[0]:.2f}, {tag_position[1]:.2f})")

说明

  1. x_coords 和 y_coords:基站的已知坐标。
  2. distances:标签到每个基站的距离。
  3. np.linalg.lstsq:使用最小二乘法求解方程组。(显然示例数据无解,求近似解使得distance的误差最小)
  4. 上述代码举例是是用了4个基站的联立方程,结果用3基站的三球求解结果一样。

使用4个基站数据的结果:
在这里插入图片描述

使用3个基站数据的结果(注释 矩阵A的第二行矩阵B的第二行):
在这里插入图片描述

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值