algorithm - 如何使用信标技术通过 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;
}
解决方案
d1
您发布的示例报告说和的估计值d3
低于 1 而d2
为 100。三边测量算法并不精确,因此它试图最小化整体误差。这意味着它将可能的解决方案点放置在所有距离估计中具有相似的错误,即与网关 1 和网关 3 的距离大致相同(非常接近它们两者),而与网关 2 的距离相当。
了解了这一点后,我们就会遇到真正的问题,即距离估计。如果您使用利用 RSS 的公式计算距离,则信号越强,距离越小。所以公式
var cal_d = Math.pow(10,((rss-a)/(-10*n)));
有点倒置。我建议你修改这个公式并检查符号以及a
术语值。
推荐阅读
- javascript - Javscipt 从一个索引转到另一个索引
- c# - C# 为 Apple 促销优惠生成签名
- html - 如何在 HTML 中包含下载属性以链接
- java - 从适配器外部更改 RecyclerView.ViewHolder 布局
- html - 如何以角度增加垫子步进器的圆形图标的大小
- c - 在 VSCode 中使用 C/C++ 智能的 C 宏中没有代码自动完成
- powerbi - Power BI - 将行转换为列
- python - 如何关闭我在线程中使用的 Flask-SQLAlchemy 连接?
- regex - 正则表达式从字符串解析标签和值
- python - pathon POST 请求中的有效负载参数问题