Трилатерация с использованием node-red или javascript
Используя следующий код, есть ли способ, которым я мог бы создать 2-мерную функцию трилатерации, так как она не работает, так как я не уверен, как я могу определить положение, где position = reciever (цвета), моя идея состояла в том, чтобы установить 3 цвета как например, белый, зеленый, синий и используйте расстояние, полученное из этих мест, для создания функции с расстояниями, которые моя строка равна DARKORANGE,1.12,-70, где color - это приемник 1.12 (это расстояние, вычисленное по rssi), а -70 - Все данные rssi являются переменной, в которую отправляется строковое значение с устройства BLE. где местоположение = положение и X = расстояние
var raw = msg.payload;
msg.length = raw.length;
msg.raw = raw;
var data = {};
data.hostname = raw.substring(18,30);
var rssi = raw.substring(31,34);
function calculateDistance(rssi) {
var txPower = -69 //hard coded power value. Usually ranges between -59 to -65
if (rssi === 0) {
return -1.0;
}
var ratio = rssi*1.0/txPower;
if (ratio < 1.0) {
return Math.pow(ratio,10);
}
else {
var distance = (0.89976)*Math.pow(ratio,7.7095) + 0.111;
return distance;
}
}
var str = data.hostname;
var location = str.replace(`C129E53D0F45`, `pink`)
.replace(`FD139CD46385`, `DARKORANGE`)
.replace(`EB72F2609789`, `DEEPSKYBLUE`)
.replace(`DBECEE45AE6F`, `RED`)
.replace(`E47D6D760A7F`, `WHITE`)
.replace(`C3D7EDB7EF28`, `WHITE`)
.replace(`E3A3BD636EA3`, `GREEN`)
.replace(`D6F579FC35C9`, `YELLOW`);
var str = calculateDistance(rssi).toFixed(2);
function getTrilateration(DEEPSKYBLUE, DARKORANGE, GREEN) {
var xa = DEEPSKYBLUE.x;
var ya = DEEPSKYBLUE.y;
var xb = DARKORANGE.x;
var yb = DARKORANGE.y;
var xc = GREEN.x;
var yc = GREEN.y;
var ra = DEEPSKYBLUE.distance;
var rb = DARKORANGE.distance;
var rc = GREEN.distance;
var S = (Math.pow(xc, 2) - Math.pow(xb, 2) + Math.pow(yc, 2) - Math.pow(yb, 2) + Math.pow(rb, 2) - Math.pow(rc, 2)) / 2.0;
var T = (Math.pow(xa, 2) - Math.pow(xb, 2) + Math.pow(ya, 2) - Math.pow(yb, 2) + Math.pow(rb, 2) - Math.pow(ra, 2)) / 2.0;
var y = ((T * (xb - xc)) - (S * (xb - xa))) / (((ya - yb) * (xb - xc)) - ((yc - yb) * (xb - xa)));
var x = ((y * (ya - yb)) - T) / (xb - xa);
return {
x: x,
y: y
};
}
return msg;