more kinematics

This commit is contained in:
PROFERIS - Mi³osz Stocki
2026-07-08 12:32:57 +02:00
parent f898883ff2
commit 61b4a0f185
5 changed files with 71 additions and 66 deletions
+45 -34
View File
@@ -77,6 +77,20 @@ void performHomingAll();
void performHoming1(); void performHoming1();
void performHoming2(); void performHoming2();
// ─── Homing Routines ──────────────────────────────────────────────
void runSteppersWithNotify() {
stepper1.run();
stepper2.run();
if (bleConnected) {
unsigned long now = millis();
if (now - lastNotify >= NOTIFY_INTERVAL_MS) {
lastNotify = now;
sendPosition();
}
}
}
// ─── BLE Server Callbacks ───────────────────────────────────────── // ─── BLE Server Callbacks ─────────────────────────────────────────
class ServerCallbacks : public BLEServerCallbacks { class ServerCallbacks : public BLEServerCallbacks {
void onConnect(BLEServer *) override { void onConnect(BLEServer *) override {
@@ -247,34 +261,31 @@ void loop() {
void performHomingAll() { void performHomingAll() {
// 1. Move against limits (M1 CCW, M2 CCW) // 1. Move against limits (M1 CCW, M2 CCW)
stepper2.moveTo(1024); stepper1.moveTo(1024);
stepper1.moveTo(2048); stepper2.moveTo(2048);
while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) { while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) {
stepper1.run(); runSteppersWithNotify();
stepper2.run();
}
stepper1.setCurrentPosition(0);
// 2. Move to negative limits (CW)
stepper2.moveTo(-1050);
stepper1.move(-1300); // equivalent to moveTo(-1300) since pos is 0
while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) {
stepper1.run();
stepper2.run();
} }
stepper2.setCurrentPosition(0); stepper2.setCurrentPosition(0);
// 3. Move to final home position // 2. Move to negative limits (CW)
stepper2.moveTo(550); stepper1.moveTo(-1050);
stepper1.moveTo(-530); stepper2.move(-1300);
while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) { while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) {
stepper1.run(); runSteppersWithNotify();
stepper2.run(); }
stepper1.setCurrentPosition(0);
// 3. Move to final home position
stepper1.moveTo(550);
stepper2.moveTo(-530);
while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) {
runSteppersWithNotify();
} }
// 4. Set origin relative to this final position // 4. Set origin relative to this final position
stepper2.setCurrentPosition(-1024); stepper1.setCurrentPosition(-1024);
stepper1.setCurrentPosition(0); stepper2.setCurrentPosition(0);
stepper1.disableOutputs(); stepper1.disableOutputs();
stepper2.disableOutputs(); stepper2.disableOutputs();
@@ -282,37 +293,37 @@ void performHomingAll() {
} }
void performHoming1() { void performHoming1() {
// M1 (Right) stalls going positive (CCW) // M1 (Left) stalls going negative (CW)
stepper1.move(2048); stepper1.move(-2048);
while (stepper1.distanceToGo() != 0) { while (stepper1.distanceToGo() != 0) {
stepper1.run(); runSteppersWithNotify();
} }
stepper1.setCurrentPosition(0); stepper1.setCurrentPosition(0);
// Move to final home position (CW) // Move to final home position (CCW)
stepper1.moveTo(-530); stepper1.moveTo(550);
while (stepper1.distanceToGo() != 0) { while (stepper1.distanceToGo() != 0) {
stepper1.run(); runSteppersWithNotify();
} }
stepper1.setCurrentPosition(0); stepper1.setCurrentPosition(-1024);
stepper1.disableOutputs(); stepper1.disableOutputs();
Serial.println("[S1] Homing complete."); Serial.println("[S1] Homing complete.");
} }
void performHoming2() { void performHoming2() {
// M2 (Left) stalls going negative (CW) // M2 (Right) stalls going positive (CCW)
stepper2.move(-2048); stepper2.move(2048);
while (stepper2.distanceToGo() != 0) { while (stepper2.distanceToGo() != 0) {
stepper2.run(); runSteppersWithNotify();
} }
stepper2.setCurrentPosition(0); stepper2.setCurrentPosition(0);
// Move to final home position (CCW) // Move to final home position (CW)
stepper2.moveTo(550); stepper2.moveTo(-530);
while (stepper2.distanceToGo() != 0) { while (stepper2.distanceToGo() != 0) {
stepper2.run(); runSteppersWithNotify();
} }
stepper2.setCurrentPosition(-1024); stepper2.setCurrentPosition(0);
stepper2.disableOutputs(); stepper2.disableOutputs();
Serial.println("[S2] Homing complete."); Serial.println("[S2] Homing complete.");
} }
+8 -10
View File
@@ -282,11 +282,6 @@ async function executeMove(spot) {
const delta1 = newSteps1 - steps1; const delta1 = newSteps1 - steps1;
const delta2 = newSteps2 - steps2; const delta2 = newSteps2 - steps2;
steps1 = newSteps1;
steps2 = newSteps2;
saveSteps();
updatePositionReadout();
const cmd1 = `S1${delta1 >= 0 ? '+' : ''}${delta1}`; const cmd1 = `S1${delta1 >= 0 ? '+' : ''}${delta1}`;
const cmd2 = `S2${delta2 >= 0 ? '+' : ''}${delta2}`; const cmd2 = `S2${delta2 >= 0 ? '+' : ''}${delta2}`;
@@ -300,6 +295,10 @@ async function executeMove(spot) {
UI.log(`BLE error: ${e.message}`, 'error'); UI.log(`BLE error: ${e.message}`, 'error');
} }
} else { } else {
steps1 = newSteps1;
steps2 = newSteps2;
saveSteps();
updatePositionReadout();
const simMsg = `[sim] ${cmd1} ${cmd2}`; const simMsg = `[sim] ${cmd1} ${cmd2}`;
console.log(simMsg); console.log(simMsg);
UI.log(simMsg, 'info'); UI.log(simMsg, 'info');
@@ -359,11 +358,6 @@ export default {
isHomed = true; isHomed = true;
localStorage.setItem('wiji_homed', 'true'); localStorage.setItem('wiji_homed', 'true');
updateHomingUI(); updateHomingUI();
steps1 = IK.ARM.HOME_STEPS.m1;
steps2 = IK.ARM.HOME_STEPS.m2;
saveSteps();
updatePositionReadout();
UI.log('Homing all motors...', 'info'); UI.log('Homing all motors...', 'info');
if (BLE.isConnected()) { if (BLE.isConnected()) {
@@ -373,6 +367,10 @@ export default {
UI.log(e.message, 'error'); UI.log(e.message, 'error');
} }
} else { } else {
steps1 = IK.ARM.HOME_STEPS.m1;
steps2 = IK.ARM.HOME_STEPS.m2;
saveSteps();
updatePositionReadout();
UI.log('[sim] HOMEALL', 'info'); UI.log('[sim] HOMEALL', 'info');
} }
}); });
+8 -10
View File
@@ -280,11 +280,6 @@ async function executeMove(spot) {
const delta1 = newSteps1 - steps1; const delta1 = newSteps1 - steps1;
const delta2 = newSteps2 - steps2; const delta2 = newSteps2 - steps2;
steps1 = newSteps1;
steps2 = newSteps2;
saveSteps();
updatePosMarker();
const cmd1 = `S1${delta1 >= 0 ? '+' : ''}${delta1}`; const cmd1 = `S1${delta1 >= 0 ? '+' : ''}${delta1}`;
const cmd2 = `S2${delta2 >= 0 ? '+' : ''}${delta2}`; const cmd2 = `S2${delta2 >= 0 ? '+' : ''}${delta2}`;
@@ -299,6 +294,10 @@ async function executeMove(spot) {
return false; return false;
} }
} else { } else {
steps1 = newSteps1;
steps2 = newSteps2;
saveSteps();
updatePosMarker();
console.log(`[sim] ${cmd1} ${cmd2}`); console.log(`[sim] ${cmd1} ${cmd2}`);
} }
return true; return true;
@@ -404,11 +403,6 @@ export default {
isHomed = true; isHomed = true;
localStorage.setItem('wiji_homed', 'true'); localStorage.setItem('wiji_homed', 'true');
updateHomingUI(); updateHomingUI();
steps1 = IK.ARM.HOME_STEPS.m1;
steps2 = IK.ARM.HOME_STEPS.m2;
saveSteps();
updatePosMarker();
UI.log('Homing all motors...', 'info'); UI.log('Homing all motors...', 'info');
if (BLE.isConnected()) { if (BLE.isConnected()) {
@@ -418,6 +412,10 @@ export default {
UI.log(e.message, 'error'); UI.log(e.message, 'error');
} }
} else { } else {
steps1 = IK.ARM.HOME_STEPS.m1;
steps2 = IK.ARM.HOME_STEPS.m2;
saveSteps();
updatePosMarker();
UI.log('[sim] HOMEALL', 'info'); UI.log('[sim] HOMEALL', 'info');
} }
}); });
+4 -5
View File
@@ -690,11 +690,6 @@ export default {
isHomed = true; isHomed = true;
localStorage.setItem('wiji_homed', 'true'); localStorage.setItem('wiji_homed', 'true');
updateHomingUI(); updateHomingUI();
steps1 = IK.ARM.HOME_STEPS.m1;
steps2 = IK.ARM.HOME_STEPS.m2;
saveSteps();
updatePositionReadout();
UI.log('Homing all motors...', 'info'); UI.log('Homing all motors...', 'info');
if (BLE.isConnected()) { if (BLE.isConnected()) {
@@ -704,6 +699,10 @@ export default {
UI.log(e.message, 'error'); UI.log(e.message, 'error');
} }
} else { } else {
steps1 = IK.ARM.HOME_STEPS.m1;
steps2 = IK.ARM.HOME_STEPS.m2;
saveSteps();
updatePositionReadout();
UI.log('[sim] HOMEALL', 'info'); UI.log('[sim] HOMEALL', 'info');
} }
}); });
+6 -7
View File
@@ -69,13 +69,6 @@ export default {
const delta1 = newSteps1 - steps1; const delta1 = newSteps1 - steps1;
const delta2 = newSteps2 - steps2; const delta2 = newSteps2 - steps2;
steps1 = newSteps1;
steps2 = newSteps2;
if (onStepComplete) {
onStepComplete(steps1, steps2);
}
const cmd1 = `S1${delta1 >= 0 ? '+' : ''}${delta1}`; const cmd1 = `S1${delta1 >= 0 ? '+' : ''}${delta1}`;
const cmd2 = `S2${delta2 >= 0 ? '+' : ''}${delta2}`; const cmd2 = `S2${delta2 >= 0 ? '+' : ''}${delta2}`;
@@ -91,6 +84,12 @@ export default {
return false; return false;
} }
} else { } else {
steps1 = newSteps1;
steps2 = newSteps2;
if (onStepComplete) {
onStepComplete(steps1, steps2);
}
console.log(`[sim] ${cmd1} ${cmd2}`); console.log(`[sim] ${cmd1} ${cmd2}`);
} }