Трилатерация с использованием 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;

0 ответов

Другие вопросы по тегам