三球交汇定理计算标签位置(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 npdef calculate_tag_position(x_coords, y_coords, distances):# 基站坐标x1, x2, x3, x4 = x_coordsy1, y2, y3, y4 = y_coordsr1, 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 = Bpos, 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的第二行):
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3245301.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

SAP PP学习笔记28 - 生产订单的收货及品质管理

上一章讲了生产订单的很多概念,比如确认(报工)以及报工的各种形式,反冲,自动入库等。 SAP PP学习笔记27 - Confirmation(报工/确认)(CO11,CO11N,CO15,CO12),…

【排序算法】1.冒泡排序-C语言实现

冒泡排序(Bubble Sort)是最简单和最通用的排序方法,其基本思想是:在待排序的一组数中,将相邻的两个数进行比较,若前面的数比后面的数大就交换两数,否则不交换;如此下去,直…

ospf复习综合小实验

实验要求: 1,R4为ISP,其上只能配置IP地址;R4与其他所有直连设备间均使用公有IP 2,R3-R5/6/7为MGRE环境,R3为中心站点; 3,整个OSPF环境IP基于172.16.0.0/16划分; 4&#…

Pytorch学习笔记day1—— 安装教程

这里写自定义目录标题 Pytorch安装方式 工作需要,最近开始搞一点AI的事情。但是这个国产的AI框架,实话说对初学者不太友好 https://www.mindspore.cn/ 比如说它不支持win下的CUDA,可是我手里只有3070Ti和4060也不太可能自己去买昇腾就有点绷不…

读人工智能全传15意向立场

1. 物理立场 1.1. 可以解释一个实体行为 1.2. 在物理立场中,我们使用自然法则(物理、化学等)来预测系统的行为结果 1.3. 虽然物理立场在解释这种行为的时候非常有效,但无法应用于理解或者预测人类行为 1.3.1. …

0601大学物理电磁篇 静电场中的导体和电介质

静电场中的导体和电介质01 6-1静电场中的导体 6-1静电场中的导体

【Java--数据结构】二叉树

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 树结构 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合 注意:树形结构中,子…

Qt实现IP地址输入框-自定义控件

在 许多应用程序中,我们经常需要使用IP地址。为了方便用户输入和处理,一个好的解决方案是使用自定义控件。本示例代码使用Qt编写一个名为“IPAddress”的自定义控件来实现IP地址的输入功能。通过使用此控件,用户可以方便地输入和处理IP地址。…

【中项第三版】系统集成项目管理工程师 | 第 5 章 软件工程② | 5.4 - 5.8

前言 第 5 章对应的内容选择题和案例分析都会进行考查,这一章节属于技术的内容,学习要以教材为准。 目录 5.4 软件实现 5.4.1 软件配置管理 5.4.2 软件编码 5.4.3 软件测试 5.5 部署交付 5.5.1 软件部署 5.5.2 软件交付 5.5.3 持续交付 5.5.4…

全新升级!联想Windows 10 22H2专业版,一键下载!

联想Windows 10 22H2专业版系统适用于联想笔记本、台式机安装使用,全新优化升级,运作更流畅更稳定,丰富多样的系统功能,轻松满足用户日常学习、工作的使用需求。同时,该版本系统能够正常更新补丁,您也可以手…

useState函数

seState是一个react Hook(函数),它允许我们像组件添加一个状态变量,从而控制影响组件的渲染结果 数据驱动试图 本质:和普通JS变量不同的是,状态变量一旦发生变化组件的视图UI也会随着变化(数据驱动试图) 使用 修改状态 注意&am…

LabVIEW异步和同步通信详细分析及比较

1. 基本原理 异步通信: 原理:异步通信(Asynchronous Communication)是一种数据传输方式,其中数据发送和接收操作在独立的时间进行,不需要在特定时刻对齐。发送方在任何时刻可以发送数据,而接收…

Java猿社区—理解Java中的字符串比较机制

Java中的字符串比较是一个经典且常见的问题,尤其是在面试中。本文将详细探讨通过三种不同方式创建的字符串对象之间的比较机制,并扩展相关的技术问题,帮助读者深入理解Java的字符串处理。 文章目录 1. Java中的字符串对象创建方式2. 和equals…

在AWS创建一台Windows主机并登录

正文共:1111 字 21 图,预估阅读时间:1 分钟 因为之前微软云Azure免费,我们还做了简单的测试(白嫖党618福利!来Azure领200美刀!外加云主机免费用一年!);并且通…

睡前故事—绿色科技的未来:可持续发展的梦幻故事

欢迎来到《Bedtime Stories Time》。这是一个我们倾听、放松、并逐渐入睡的播客。感谢你收听并支持我们,希望你能将这个播客作为你睡前例行活动的一部分。今晚我们将讲述绿色科技的未来:可持续发展的梦幻故事的故事。一个宁静的夜晚,希望你现…

【15】Android基础知识之Window(一)

概述 这篇文章纠结了很久,在想需要怎么写?因为window有关的篇幅,如果需要讲起来那可太多了。从层级,或是从关联,总之不是很好开口。这次也下定决心,决定从浅入深的讲讲window这个东西。 Window Window是…

Win10+Docker配置TensorRT环境

1.Docker下载和安装 Docker下载:Install Docker Desktop on Windows Docker安装: 勾选直接下一步就行,安装完成后需要电脑重启。 重启后,选择Accept—>Continue without signing in—>skip survey. 可以进入下面页面,并且左下角是绿色的,显示e…

【踩坑日记】【教程】嵌入式 Linux 通过 nfs 下载出现 T T T T [Retry count exceeded: starting again]

文章目录 1 本篇文章解决的问题2 问题解决原理3 问题环境4 开启 ubuntu-20.04 的 nfs24.1 确认 nfs2 是否已经开启4.2 开启 nfs2 5 卸载 iptables5.1 卸载 iptables5.2 禁用 ufw5.3 尝试重新下载 6 原理分析6.1 nfs2 开启部分6.2 卸载 iptables 部分 7 后记7.1 拓扑结构一7.2 拓…

打包一个自己的Vivado IP核

写在前面 模块复用是逻辑设计人员必须掌握的一个基本功,通过将成熟模块打包成IP核,可实现重复利用,避免重复造轮子,大幅提高我们的开发效率。 接下来将之前设计的串口接收模块和串口发送模块打包成IP核,再分别调用…

Automation Anywhere推出新一代AI+自动化企业系统,助力企业实现10倍商业增长

RPA厂商纷纷进军AI Agent ( AI 代理)领域,陆续推出创新产品。最近,Automation Anywhere宣布推出其新的AI 自动化企业系统,该系统结合AI和自动化技术,以实现指数级的业务成果。 在Imagine 2024大会上首次亮相的这款新产品&#xf…