diff --git a/server/server.js b/server/server.js index f83d848..09f55fd 100755 --- a/server/server.js +++ b/server/server.js @@ -913,6 +913,23 @@ app.post('/api/homing/run', async (req, res) => { if (!res.writableEnded) res.end(); }); +/** + * Konvertiert den FK-State (von 4b_revolute_angle.py / 5_pose_estimation.py) + * in die G92-Driver-Konvention (appRobotDriver/doc/Info_G92.md). + * + * Unterschiede: + * b: FK b=0 = gerade Hand; Driver B=180° = gerade Hand → B = 180 − b + * c: FK c=0 = neutral Roll; Driver C=90° = neutral → C = c + 90 + * z: 4b misst Ellbogen RELATIV zu Arm1; Driver braucht absoluten Winkel → Z = y + z + */ +function fkStateToDriverG92(s) { + const d = { ...s }; + if (d.b != null) d.b = 180 - d.b; + if (d.c != null) d.c = d.c + 90; + if (d.z != null && d.y != null) d.z = d.y + d.z; + return d; +} + /** * POST /api/homing/send-state * Baut aus { state: { x, y, z, a, b[, c, e] } } ein G92 und sendet es als @@ -929,7 +946,7 @@ app.post('/api/homing/send-state', async (req, res) => { if (!isDriverConfigured()) return res.status(501).json({ error: 'DRIVER_WS_URL ist nicht konfiguriert' }); - const gcode = buildG92(state); + const gcode = buildG92(fkStateToDriverG92(state)); const result = await sendGcode(gcode); if (!result.ok) return res.status(502).json({ error: `Robot-Fehler: ${result.error}`, gcode });