问题描述
我目前正在尝试使用信标技术开发一个实时定位应用程序。因此,我需要使用信标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;
}
解决方法
您发布的示例报告d1
和d3
的估计值低于1,而d2
为100。三边测量算法不精确,因此它试图使总误差最小化。这意味着它将可能的求解点放置在具有相似误差w.r.t的位置。所有距离估算值,即距网关1和网关3的距离大致相同(两者都非常接近),而票价则与网关2相当。
了解了这一点后,我们便遇到了真正的问题,即距离估算。如果使用利用RSS的公式计算距离,则信号越强,距离就越小。所以公式
var cal_d = Math.pow(10,((rss-a)/(-10*n)));
有点倒转。建议您修改此公式,并检查符号和a
期限值。