Вычислить ориентацию акселерометра в функции JavaScript (Node RED) - PullRequest
0 голосов
/ 24 августа 2018

Как бы я рассчитал ориентацию датчика в функции JavaScript?Я видел пример в 3d акселерометре для расчета ориентации , но я не уверен, как применять значения msg.payload.xAxis / yAxis / zAxis как таковые в расчете.Мне нужно применить его к приведенному ниже примеру полезной нагрузки в виде нового поля, если это возможно.

{
"device":"368640",
"deviceType":"Sigfox-Tracker",
"version":3,
"timestamp":"1535121228",
"rssi":"-113.00",
"battery":3.28,
"temp":21.5,
"soil":2107,
"xAxis":61,
"yAxis":-26,
"zAxis":994
}

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Спасибо, Эндрю, это правильный синтаксис для msg.payload, поскольку каждая полезная нагрузка сообщает разные значения?

let data = msg.payload

function calcRoll(y, z){
  return Math.atan2(y, z) * 180/Math.PI;
}

function calcPitch(x, y, z){
  return Math.atan2(-x, Math.sqrt(y*y + z*z)) * 180/Math.PI;
}

let dataX = data.xAxis;
let dataY = data.yAxis;
let dataZ = data.zAxis;

let roll = calcRoll(dataY, dataZ);
let pitch = calcPitch(dataX, dataY, dataZ);

msg.payload.roll = roll;
msg.payload.pitch = pitch;
return msg;

Вот сообщение отладки, которое я вижу в Node-RED, когда прибывает новая измененная полезная нагрузка:

{"device":"368640","deviceType":"Sigfox-Tracker","version":3,"timestamp":"1535136195","rssi":"-109.00","battery":3.28,"temp":19.5,"soil":2105,"xAxis":71,"yAxis":-32,"zAxis":1002,"roll":-1.8291836314227448,"pitch":-4.05104777734416}
0 голосов
/ 24 августа 2018

То, что вы вставили, является объектом javascript, и вы можете получить доступ к его свойствам, используя точечную запись , как data.xAxis ниже.

Я создал 2 функции для вычисления из ответа по вашей ссылке. Затем я использовал встроенный Math объект для предоставленной формулы.

Вот пример:

let data = {
  "device": "368640",
  "deviceType": "Sigfox-Tracker",
  "version": 3,
  "timestamp": "1535121228",
  "rssi": "-113.00",
  "battery": 3.28,
  "temp": 21.5,
  "soil": 2107,
  "xAxis": 61,
  "yAxis": -26,
  "zAxis": 994
}

function calcRoll(y, z){
  return Math.atan2(y, z) * 180/Math.PI;
}

function calcPitch(x, y, z){
  return Math.atan2(-x, Math.sqrt(y*y + z*z)) * 180/Math.PI;
}

let dataX = data.xAxis;
let dataY = data.yAxis;
let dataZ = data.zAxis;

let roll = calcRoll(dataY, dataZ);
let pitch = calcPitch(dataX, dataY, dataZ);

console.log(`roll is: ${roll} and pitch is ${pitch}`);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...