Как рассчитать точное местоположение с помощью библиотеки trilat с использованием технологии beacons

#algorithm #real-time #beacon #indoor-positioning-system #trilateration

#алгоритм #в режиме реального времени #маяк #система позиционирования в помещении #трилатерация

Вопрос:

В настоящее время я пытаюсь разработать приложение для определения местоположения в реальном времени с использованием технологии beacons. Итак, для этого мне нужно отслеживать метки маяка с помощью шлюзов сканера маяка. Я работаю с Node Js и использую библиотеку trilat для вычисления координат 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;
  }
  

ссылочный пример изображения

Комментарии:

1. Будьте осторожны с ограничениями этой технологии: «[трилатерация] редко практична, потому что погрешность в оценке расстояния становится слишком большой, когда вы находитесь на расстоянии более пары метров. Чтобы это надежно работало на практике, вам нужна действительно маленькая комната. » Подробнее здесь

Ответ №1:

В опубликованном вами примере сообщается, что оценки для d1 и d3 ниже 1, в то время как d2 равно 100. Алгоритм трилатерации не является точным, поэтому он пытается минимизировать общую ошибку. Это означает, что он размещает возможную точку решения с аналогичной ошибкой по сравнению со всеми оценками расстояния, т. Е. Примерно на одинаковом расстоянии от gateway1 и gateway3 (очень близко к ним обоим), в то время как довольно быстро формирует gateway2.

Понимание этого приводит нас к реальной проблеме, то есть к оценке расстояния. Если вы вычисляете расстояние с помощью формулы, которая использует RSS, чем сильнее сигнал, тем меньше расстояние. Итак, формула

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

несколько перевернуто. Я предлагаю вам пересмотреть эту формулу и проверить знаки, а также a значение термина.