G92-Grad + E-Korrektur
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
* der Controller kennt nur strukturierte Befehle, keine rohen Textstrings.
|
||||
*/
|
||||
const GCodeParser = require('./GCodeParser');
|
||||
const { motorStateFromPorts } = require('./portInverse');
|
||||
const { motorStateFromPorts, D } = require('./portInverse');
|
||||
|
||||
class RobotController {
|
||||
|
||||
@@ -121,14 +121,31 @@ class RobotController {
|
||||
}
|
||||
|
||||
if (cmd === 'M92' || cmd === 'G92') {
|
||||
// Beide setzen die Motorposition ohne Bewegung, unterscheiden sich aber in den
|
||||
// Winkel-EINHEITEN:
|
||||
// G92 → GRAD (G-Code-Konvention für Rotationsachsen, wie FluidNC und die
|
||||
// "Position Motoren"-Anzeige in public/app.js). Intern sind die
|
||||
// Winkel-Slots in Radiant → Grad/D umrechnen (D = 180/π).
|
||||
// M92 → RADIANT, roh in die internen Slots (interne/Test-Variante).
|
||||
// X ist die lineare mm-Schiene, E die Greifer-Öffnung in mm (ab Null-Position
|
||||
// eines Fingers) — beide ohne Winkel-Umrechnung.
|
||||
const angScale = (cmd === 'G92') ? 1 / D : 1;
|
||||
robot.createMotorPosition();
|
||||
if (Number.isFinite(params.X)) { robot.xMotor = params.X; robot.xMotorChanged = true; }
|
||||
if (Number.isFinite(params.Y)) { robot.alpha = params.Y; robot.yMotorChanged = true; }
|
||||
if (Number.isFinite(params.Z)) { robot.beta = params.Z; robot.zMotorChanged = true; }
|
||||
if (Number.isFinite(params.A)) { robot.a = params.A; robot.aMotorChanged = true; }
|
||||
if (Number.isFinite(params.B)) { robot.b = params.B; robot.bMotorChanged = true; }
|
||||
if (Number.isFinite(params.C)) { robot.c = params.C; robot.cMotorChanged = true; }
|
||||
if (Number.isFinite(params.E)) { robot.e = params.E; robot.eMotorChanged = true; }
|
||||
if (Number.isFinite(params.X)) { robot.xMotor = params.X; robot.xMotorChanged = true; }
|
||||
if (Number.isFinite(params.Y)) { robot.alpha = params.Y * angScale; robot.yMotorChanged = true; }
|
||||
if (Number.isFinite(params.Z)) { robot.beta = params.Z * angScale; robot.zMotorChanged = true; }
|
||||
if (Number.isFinite(params.A)) { robot.a = params.A * angScale; robot.aMotorChanged = true; }
|
||||
if (Number.isFinite(params.B)) { robot.b = params.B * angScale; robot.bMotorChanged = true; }
|
||||
if (Number.isFinite(params.C)) { robot.c = params.C * angScale; robot.cMotorChanged = true; }
|
||||
// E nach B/C setzen: der Greifer-Motorwert hängt über die Kinematik-Kopplung
|
||||
// von b und c ab. robot.e = Finger-Öffnung (mm), eMotor = abgeleiteter Motorwert.
|
||||
// Ohne diese eMotor-Ableitung bliebe der Greiferwert stale (alte E-Inkonsistenz):
|
||||
// sendCommand() verschickt eMotor, nicht e.
|
||||
if (Number.isFinite(params.E)) {
|
||||
robot.e = params.E;
|
||||
robot.eMotor = robot.gripperMotorFromOpening(robot.e);
|
||||
robot.eMotorChanged = true;
|
||||
}
|
||||
|
||||
robot.calculatePositionFromMotorAngles();
|
||||
robot.sendCommand('G92');
|
||||
|
||||
Reference in New Issue
Block a user