#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
значение термина.