Trilateration三边测量定位算法

转载自Jiaxing / 2014年2月22日


基本原理

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

解法推导

设未知点位置为 (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;

绘出圆形及交点:

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

时间: 2024-10-16 13:45:02

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

[CLPR] 定位算法中常见的几种思路

一. 引言 如何从一副图片中找到车牌? 这是机器视觉的一个应用. 理所当然地, 思考的角度是从车牌本身的信息入手, 为了讨论方便, 下面均以长窄型蓝白车牌为例. 下图就是这样一张车牌的基本信息. 一眼看过去, 可以得到的信息有: 长宽比 - 3.14, 字符数 - 7, 第一个字符是汉字, 第二个字符是字母, 之后为5个字母/数字混合等距排列. 同时还可以大致了解到, 一个清晰的车牌应该拥有足够多的边缘信息, 换句话说, 边缘信息足够密集地聚集在一个3.14:1的矩形中. 所以今天介绍的算法,

两点定位算法

基于RSSI的精确室内定位算法 基于系统识别的RSSI定位算法 无线定位算法综述 一种用于室内人员定位的RSSI定位算法 ZigBee技术中基于RSSI测距的定位算法研究 Zigbee定位测量 zigbee定位的概念笔记(2)(cc2431定位引擎)

定位算法及算法导论小结

一.电子围栏定位算法: 还是决定不做定位算法了,原因有下: 1.文献[1]中利用线性算法解决了TDOA问题(四个观测点以上),文献[2]中将AOA算法的形式也纳入进来.多个直线的交点就是待测点的位置.如果考虑单点是否在围栏内部,之前做的假设是,定位单点的算法复杂度高,但这两篇文献中说明的是:理论上是线性的,很简单.根据四个及以上观测量可将问题变成线性问题求解的后续扩展思路是,1结合新的应用场景和实际数据,得到算法应用的结果测试,像文献[3]就在车联网中应用了这个定位算法,但是实测数据我现在很难拿

关于APIT定位算法的讨论

关于APIT定位算法的讨论 [摘要]   无线传感器网络节点定位机制的研究中,基于距离无关的定位技术得到快速发展,其中基于重叠区域的APIT定位技术在实际环境中的定位精度高,被广泛研究和应用. [关键词] 无线传感器网络:定位算法:APIT: [正文] 在传感网络中的许多应用中,用户一般都会关心一个重要问题,即特定时间发生的具体位置或区域.例如,目标跟踪,入侵检测,环境监控等,若不知道传感器自身的位置,感知的数据是没有意义的.因此,传感器网络及诶单必须知道自身所在的位置,才能够有效地说明被检测物

[转]基于TDOA声源定位算法仿真--MATLAB仿真

原文链接:https://blog.xxcxw.cn/2019/08/10/%e5%9f%ba%e4%ba%8etdoa%e5%a3%b0%e6%ba%90%e5%ae%9a%e4%bd%8d%e7%ae%97%e6%b3%95%e4%bb%bf%e7%9c%9f-matlab%e4%bb%bf%e7%9c%9f/ 转自:http://t.cn/AiTjYCqD 声源定位算法是利用麦克风阵列进行声音定位,属于宽带信号,传统的MUSIC和DOA算法并不适用该场景,本仿真主要用TDOA算法进行定位.

图像特征提取:SIFT定位算法关键步骤的说明

1. SIFT算法中一些符号的说明 $I(x,y)$表示原图像. $G(x,y,\sigma)$表示高斯滤波器,其中$G(x,y,\sigma) = \frac{1}{2\pi\sigma^2}exp(-(x^2+y^2)/2\sigma^2)$. $L(x,y,\sigma)$表示由一个高斯滤波器与原图像卷积而生成的图像,即$L(x,y,\sigma) = G(x,y,\sigma)\otimes I(x,y)$.一系列的$\sigma_i$,则可以生成一系列的$L(x,y,\sigma_i)

逆向分析之定位算法的一些经验

当开始逆向分析一个300M的图像处理软件的一个功能时,才发现之前玩逆向都是小打小闹,一个多月的奋斗,终于搞定了.很希望遇到问题,因为这样才能学到新的东西,事实上确实遇到了不少问题,也学到了很多经验. 之前的逆向都是直接扔到OD就开始调试,而现在知道在虚拟机里运行,因为这么大的软件不是一两个小时就可以搞完的,在虚拟机里直接快照拍摄,就像游戏存档一样,这样可以避免每次运行软件的注册激活,避免重复之前的分析,避免内存地址动态变化等等,好处多多. 分析算法的难点之一是定位核心算法.对于有软件保护的软件就

基于朴素贝叶斯的定位算法

1 定位背景介绍 一说到定位大家都会想到gps,然而gps定位有首次定位缓慢(具体可以参考之前的博文<LBS定位技术>).室内不能使用.耗电等缺陷,这些缺陷大大限制了gps的使用.在大多数移动互联网应用例如google地图.百度地图等,往往基于wifi.基站来进行定位. 一般APP在请求定位的时候会上报探测到的wifi信号.基站信号.以wifi为例,手机会探测到周围各个wifi(mac地址)对应的信号强度(RSSI),即收集到信号向量(<WF1, RSSI1> <WF2, R

一种高效的可变行高列表行定位算法

列表控件是数据显示时使用的一种常用的控件. 一般情况下列表中的行是等高的,这种情况下无论列表包含多少行,都能够在O(1)的时间定位到指定行. 但是当显示的内容格式不一致时,使用相等的行高可能就意味着显示空间的浪费,也意味说用户需要更多的滚动操作,影响用户体验. 要实现一个支持可变行高的列表控件,首先要解决的问题就是快速定位列表行. 假定一个列表中的表项按照下面的高度排列: 1,2,3,1,2,3,1,2,3,1,2,3,4,5 可以知道总高度为:33 程序员需要解决从一个随机的[0,32]的值(