Trilateration三边测量定位算法

2023-05-16

http://www.justinablog.com/archives/1066


基本原理

Trilateration(三边测量)是一种常用的定位算法:

  1. 已知三点位置 (x1, y1), (x2, y2), (x3, y3)
  2. 已知未知点 (x0, y0) 到三点距离 d1, d2, d3

以 d1, d2, d为半径作三个圆,根据毕达哥拉斯定理,得出交点即未知点的位置计算公式:


( x1 - x)2 + ( y1 - y0 )2 = d12
( x2 - x)2 + ( y2 - y0 )2 = d22
( x3 - x)2 + ( y3 - y0 )2 = d32  

解法推导

yyAvie

设未知点位置为 (x, y), 令其中的第一个球形 P1 的球心坐标为 (0, 0),P2 处于相同纵坐标,球心坐标为 (d, 0),P3 球心坐标为 (i, j),三个球形半径分别为 r1, r2, r3,z为三球形相交点与水平面高度。则有:


r12 = x2 + y2 + z2
r22 = (x - d)2 + y2 + z2
r32 = (x - i)2 + (y - j)2 + z2  

当 z = 0 时, 即为三个圆在水平面上相交为一点,首先解出 x:


x = (r12 - r22 + d2) / 2d  

将公式二变形,将公式一的 z2 代入公式二,再代入公式三得到 y 的计算公式:


y = (r12 - r32 - x2 + (x - i)2 + j2) / 2j  

D3.js实现

定义三个圆的坐标及半径,计算出交点的坐标 (obj_x, obj_y).


var x_0 = 150, y_0 = 150;
var x_1 = x_0, y_1 = y_0, d = 150, x_2 = x_0 + d, x_3 = 225, y_3 = 315, r = 100;
var i = x_3 - x_0, j = y_3 - y_0;
var x = (Math.pow(r, 2) - Math.pow(r, 2) + Math.pow(d, 2)) / (2 * d) + x_0;
var obj_x = x + x_0;
var y = (Math.pow(r, 2) - Math.pow(r, 2) - Math.pow(x, 2) + Math.pow((x - i), 2)
    + Math.pow(j, 2)) / (2 * j);
var obj_y = y + y_0;  

绘出圆形及交点:
BRNfMz


svg.append("circle").attr("cx", x_1)
    .attr("cy", y_1).attr("r", r)
    .style("fill", "blue").style("opacity", 0.3);
svg.append("circle").attr("cx", x_2)
    .attr("cy", y_0).attr("r", r)
    .style("fill", "red").style("opacity", 0.4);
svg.append("circle").attr("cx", x_3)
    .attr("cy", y_3).style("opacity", 0.5)
    .attr("r", r).style("fill", "yellow");
svg.append("circle").attr("cx", obj_x)
    .attr("cy", obj_y).attr("r", 3)
    .style("fill", "red");  

但在实际定位中,给定的距离由于测量的误差,并不能真正让三个圆交于一点,需要在相交区域绘制出矩形并计算矩形的中心位置,除三边测量计算公式之外,也许还可以采用K-Means或Overlap聚类算法,后两者在地图标注上使用比较广,有兴趣的可以进一步对定位算法进行研究。

参考

A robust localization algorithm in wireless sensor networks
Calculating the intersection area of 3+ circles
Clustering Map Symbols

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Trilateration三边测量定位算法 的相关文章

  • 大数据平台架构设计探究

    近年来 xff0c 随着IT技术与大数据 机器学习 算法方向的不断发展 xff0c 越来越多的企业都意识到了数据存在的价值 xff0c 将数据作为自身宝贵的资产进行管理 xff0c 利用大数据和机器学习能力去挖掘 识别 利用数据资产 如果缺
  • ros 解析激光点云的强度信息

  • 国外程序员整理的 C++ 资源大全

    转 xff1a http www csdn net article 2014 10 24 2822269 c 43 43 C 43 43 是在C语言的基础上开发的一种集面向对象编程 泛型编程和过程化编程于一体的编程语言 应用较为广泛 xff
  • Oracle、MySQL、SQL Server数据库的jdbc连接驱动配置

    Oracle MySQL SQL Server数据库的jdbc连接驱动配置 Oracle jdbc driver 61 oracle jdbc driver OracleDriver 或者 oracle jdbc OracleDriver
  • PID调参详解1

    PID调参详解1 xff08 比例环节 xff09 PID控制中有P I D三个参数 xff0c 只有明白这三个参数的含义和作用才能完成控制器PID参数调整 下面我们分别通过实例来分析比例微分积分三个环节对系统输出的影响 上式为PID控制器
  • NVIDIA NX刷机,配置深度学习环境

    买来的NVIDIA NX自带了一个sd卡和一个ssd卡 xff0c 刚开始按照sdkmanager去安装系统 xff0c 结果安装后发现装到了sd卡上 xff0c 后又根据视频教程在ssd上安装了系统 xff0c 最后配置了深度学习的环境
  • 串口调试助手VC源程序及详细编程过程

    串口调试助手VC源程序 及编程详细过程 作者 xff1a 龚建伟 可以任意转载 xff0c 注明作者和说明来自 龚建伟技术主页 目次 xff1a 1 建立项目 2 在项目中插入MSComm控件 3 利用ClassWizard定义CMSCom
  • linux 下 pytorch 安装

    我的显卡是gtx 730M 已经安装linux版本的驱动 xff0c 安装环境centos8 xff0c 内核版本Linux localhost localdomain 4 18 0 305 19 1 el8 4 x86 64 1 xff0
  • 章文嵩:怎样做开源才有意义?

    转至 xff1a http www infoq com cn interviews how to make open source meaningful utm campaign 61 infoq content amp utm sourc
  • seL4 构建和测试

    转载至 xff1a https source2014 hackpad com seL4 IJItb9IDncR 取得核心程式碼 預先設定好 Toolchain http sel4 systems Download DebianToolCha
  • [小技巧] ping 的时间间隔

    ping 可以选择间隔一段时间的间隔值 使用 i 命令 参考 xff1a 隔一秒钟ping一次 ping i 1 127 0 0 1 PING 127 0 0 1 127 0 0 1 56 84 bytes of data 64 bytes
  • [R语言] quantmod 包获取国内的股票数据

    2016 05 09追加 xff1a 对应的quantmod包相关说明参考 http www quantmod com quantmod 包默认是访问 yahoo finance 的数据 xff0c 其中包括上证和深证的股票数据 xff0c
  • 文件名日文乱码处理

    文件名出现日文乱码的话可以用如下命令解决 xff1a convmv r t utf 8 notest path to dir 另外 xff0c 压缩的 zip 解压时使用如下命令 xff1a unzip Ocp932 path to zip
  • can 总线介绍

    CAN xff0c 全称为 CONtroller Area Network xff0c 即控制器局域网 xff0c 是国际上应用最广泛的现场总线之一 最初 xff0c CAN被设计作为汽车环境中的微控制器通讯 xff0c 在车载各电子控制装
  • python 的 do ~ while 语法

    本文摘至 http ama ch hatenablog com entry 20080425 1209110237 Python不支持do while语法 while xff08 无限循环 xff09 和break组合起来替换 do whi
  • 802.11协议帧格式、Wi-Fi连接交互过程、无线破解入门研究

    本文转载至 xff1a http www cnblogs com littlehann p 3700357 html 目录 1 802 11标准简介 2 802 11协议格式 3 Wi Fi认证过程 4 802 11标准中的数据安全加密协议

随机推荐

  • Make 命令教程

    转载至 xff1a http www ruanyifeng com blog 2015 02 make html 作者 xff1a 阮一峰 日期 xff1a 2015年2月20日 代码变成可执行文件 xff0c 叫做编译 xff08 com
  • Python中用于计算对数的log()方法

    本文转载至 xff1a http www jb51 net article 66130 htm 这篇文章主要介绍了Python中用于计算对数的log 方法 是Python入门基础中的必会的方法 需要的朋友可以参考下 log 方法返回x的自然
  • RT-Thread创始人熊谱翔: 我和Linux、嵌入式实时操作系统RT-Thread

    本文转载至 xff1a http www rt thread org dynamic 78 html 接触 Linux 说起 Linux应该从我在校园时期说起 我是在山城 重庆邮电学院念的书 xff0c 1998年时宿舍伙伴一起凑的钱买的电
  • 到底什么是Unikernel?

    本文转载至 xff1a http dockone io article 855 utm source 61 tuicool amp utm medium 61 referral 编者的话 本文介绍了一种新的应用虚拟化技术 xff0c 它让应
  • xauth: “timeout in locking authority file /home/<user>/.Xauthority”?

    本文转载至 xff1a http unix stackexchange com questions 215558 why am i getting this message from xauth timeout in locking aut
  • 小技巧:检查你本地及公共 IP 地址

    本文转载至 xff1a https linux cn article 8207 1 html utm source 61 rss amp utm medium 61 rss 你本地的 IP 地址 xff1a 192 168 1 100 上面
  • Inside Real-Time Linux

    本文转载于 xff1a https www linux com news event elce 2017 2 inside real time linux Real time Linux has come a long way in the
  • [小技巧] vim中使用cscope时不区别大小写

    cscope 有 C 这么一个选项 C Ignore letter case when searching vim 里使用 cscope 不区别大小写可以使用下面一个技巧 xff1a set csprg 61 usr bin ra csco
  • PWM占空比和电机转速有什么线性关系

    可以看电机拖动一书 xff0c 里面讲了电机的建模 由于PWM波频率很高 xff0c 一般认为接在电机两端的电压平均值有如下关系 xff1a 假如占空比为a xff0c 驱动板供电电压为U xff0c 则电机两端电压Ud 61 a U 对于
  • SIFT特征点提取及描述论文算法详解

    SIFT特征点提取及描述论文算法详解 1 尺度空间极值检测 Scale space extrema detection 1 1 尺度空间和极值1 2 DoG和LoG的关系1 3 构建高斯尺度差分空间Tips 2 极值点定位 Keypoint
  • 国科大计算机视觉20-21考题

    国科大计算机视觉20 21考题 SIFT检测及描述流程 xff08 20分 xff09 相机成像模型 xff08 16分 xff09 两视图的稀疏重建 xff08 16分 xff09 LM算法流程 xff08 16分 xff09 PCA的思
  • Ubuntu18.04关闭内核自动更新安装之前版本

    Ubuntu18 04关闭内核自动更新安装之前版本 回退的原因 xff0c 上一周安装了Ubuntu18 04双系统 xff0c 主机型号是外星人 Asura R6 xff0c 安装完毕后可以正常进入Ubuntu xff0c 但是关机的时候
  • Windows10配置MongoDB

    Windows10安装MongoDB并配置 1 安装2 安装完成后启动服务器2 1 一次性启动2 2 设置为服务 xff0c 开机自启动 3 添加环境变量 xff0c 方便在cmd任何目录中直接启动 参考链接 xff1a https www
  • Ubuntu18.04编译ORB-SLAM3及遇到的一些问题

    测试环境 xff1a 系统 xff1a Ubuntu18 04Eigen 3 3 4 查看Eigen3版本的方法Pangolin 0 6OpenCV 3 4 14ROS Melodic 一 安装依赖 ORB SLAM的各项依赖里OpenCV
  • Python multiprocessing多进程编程,进程间通信,psutil监控进程状态并通过电子邮件告警

    python多进程编程 进程监测 一 mutiprocessng多进程编程和通信二 进程监测分析 三 Python邮件发送功能四 完整代码运行结果 xff1a 服务器上的web后端经常需要同时运行多个进程 xff0c 各个进程之间需要交换数
  • Supervisor服务器进程监测

    服务器上的应用程序有时候会莫名其妙地挂掉 xff0c 如果我们经常去登录服务器看是不是程序挂了 xff0c 挂了再拉起 xff0c 那样是非常耗时和麻烦的事情 后来我们通过使用 supervisor 去守护启动 xff0c 实现方法如下 一
  • Ubuntu18.04手动安装NVIDIA驱动

    Ubuntu18 04手动安装NVIDIA驱动 1 下载驱动 查看系统推荐的驱动版本 xff0c 官网下载对应的run文件 NVIDIA驱动下载的高级搜索 xff1a https www nvidia cn Download Find as
  • ORB-SLAM2 编译记录

    ORB SLAM2编译记录 由于之前已经编译过ORB SLAM3 xff0c 大部分库都已经配置好了 xff0c 这次主要只了处理两个错误 1 error usleep is not declared in this scope xxx x
  • 视觉SLAM十四讲 Ubuntu20.04 Pangolin 环境配置

    视觉SLAM十四讲 Ubuntu20 04 Pangolin 环境配置 一 github下载源代码 选择0 5版本的 xff0c 要不然版本装高了编译ORB SLAM2会遇到问题 二 报错及处理 error AV PIX FMT XVMC
  • Trilateration三边测量定位算法

    http www justinablog com archives 1066 基本原理 Trilateration xff08 三边测量 xff09 是一种常用的定位算法 xff1a 已知三点位置 x1 y1 x2 y2 x3 y3 已知未