在 JavaScript 函数(Node RED)中计算加速度计方向



如何在 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
}

您粘贴的是一个 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}`);

谢谢安德鲁,这是在每个有效负载报告不同值时在 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}

最新更新