43 lines
943 B
JavaScript
43 lines
943 B
JavaScript
/**
|
|
* calculateAngles module
|
|
*
|
|
* Browser + Server + Jest (CJS) kompatibel
|
|
*/
|
|
|
|
function calculate(foundMarkers, jsonRobot) {
|
|
// --- X of the Hand-Joint ---
|
|
const validOns = new Set(['Base', 'Arm1', 'Joint1']);
|
|
const foundById = new Map(foundMarkers.map(f => [f.id, f]));
|
|
|
|
const markersMovingFixedX = jsonRobot.Marker.filter(m => validOns.has(m.on));
|
|
const markersXPosition = new Map();
|
|
|
|
const xs = markersMovingFixedX
|
|
.map(m => {
|
|
const f = foundById.get(m.id);
|
|
return f ? f.position[0] - m.relPos[0] : null;
|
|
})
|
|
.filter(x => x !== null);
|
|
|
|
const xAvg = xs.length
|
|
? xs.reduce((a, b) => a + b, 0) / xs.length
|
|
: 0;
|
|
|
|
return {
|
|
meta: {
|
|
module: 'calculateAngles',
|
|
timestamp: new Date().toISOString()
|
|
},
|
|
inputs: {
|
|
markers: foundMarkers ?? null,
|
|
robot: jsonRobot ?? null
|
|
},
|
|
status: 'ok',
|
|
result: {
|
|
xAvg
|
|
}
|
|
};
|
|
}
|
|
|
|
|
|
module.exports = { calculate }; |