首页 > 解决方案 > 如何使用信标技术通过 trilat 库计算精确位置

问题描述

我目前正在尝试使用信标技术开发一个实时位置查找应用程序。因此,为此,我需要使用信标扫描仪网关跟踪信标标签。我正在使用 Node Js,并使用trilat 库来计算 x,y 坐标。但每次它只计算一个质心位置!

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

应用程序.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;
  }

参考示例图像

标签: algorithmreal-timebeaconindoor-positioning-systemtrilateration

解决方案


d1您发布的示例报告说和的估计值d3低于 1 而d2为 100。三边测量算法并不精确,因此它试图最小化整体误差。这意味着它将可能的解决方案点放置在所有距离估计中具有相似的错误,即与网关 1 和网关 3 的距离大致相同(非常接近它们两者),而与网关 2 的距离相当。

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

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

有点倒置。我建议你修改这个公式并检查符号以及a术语值。


推荐阅读