如何使用信标技术使用Trilat库计算精确位置

问题描述

我目前正在尝试使用信标技术开发一个实时定位应用程序。因此,我需要使用信标beacon tags来跟踪scanner gateways。我正在使用Node Js,并使用trilat library计算x,y坐标。但是每次它仅计算质心位置!

这是我的代码,用于计算x和y坐标,以及使用RSSI值计算的距离。

app.js

var trilat = require('trilat');

var gatway1RSSi=-30;
var gatway2RSSi=-79;
var gatway3RSSi=-29;

var d1 = calc_dist(gatway1RSSi);
var d2 = calc_dist(gatway2RSSi);
var d3 = calc_dist(gatway3RSSi);


//gatway coordinates

var gatway1_X_axis= 150;
var gatway1_Y_axis= 209.5;
var gatway2_X_axis= 305;
var gatway2_Y_axis= 169.5;
var gatway3_X_axis= 280;
var gatway3_Y_axis= 345;


var input = [
//      X     Y     R
    [ gatway1_X_axis,gatway1_Y_axis,d1],[ gatway2_X_axis,gatway2_Y_axis,d2],[ gatway3_X_axis,gatway3_Y_axis,d3],];
 
// [
//   [ 150,209.5,0.35481338923357547 ],//   [ 305,169.5,100 ],//   [ 280,345,0.31622776601683794 ]
// ]

var output = trilat(input);
console.log(output)
// [ 233.81590601205798,219.6331375609171]


function calc_dist(RSS){
     var  a='-39';//tx power 
     var n='2';//noise
     var cal_d = Math.pow(10,((RSS-a)/(-10*n)));
     return cal_d;
  }

reference example image

解决方法

您发布的示例报告d1d3的估计值低于1,而d2为100。三边测量算法不精确,因此它试图使总误差最小化。这意味着它将可能的求解点放置在具有相似误差w.r.t的位置。所有距离估算值,即距网关1和网关3的距离大致相同(两者都非常接近),而票价则与网关2相当。

了解了这一点后,我们便遇到了真正的问题,即距离估算。如果使用利用RSS的公式计算距离,则信号越强,距离就越小。所以公式

var cal_d = Math.pow(10,((rss-a)/(-10*n)));

有点倒转。建议您修改此公式,并检查符号和a期限值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...