mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 01:21:20 -04:00
dock bump protection improvements
This commit is contained in:
@@ -74,9 +74,8 @@ io.on('connection', (socket) => {
|
||||
const left = Number(driveDirect.left);
|
||||
const right = Number(driveDirect.right);
|
||||
const speed = Math.max(Math.abs(left), Math.abs(right));
|
||||
const isForward = Number.isFinite(left) && Number.isFinite(right) && left > 0 && right > 0;
|
||||
const blockedUntil = driveCooldowns.get(roverId);
|
||||
if (blockedUntil && Date.now() < blockedUntil && isForward) {
|
||||
if (blockedUntil && Date.now() < blockedUntil && speed > 0) {
|
||||
throw new Error('Drive blocked: dock protection cooldown');
|
||||
}
|
||||
if (speed > 0) {
|
||||
|
||||
@@ -13,7 +13,7 @@ const socketToRovers = new Map(); // socketId -> Set(roverId)
|
||||
const spectatorSockets = new Set();
|
||||
const turnService = require('./turnService');
|
||||
const managerEvents = new EventEmitter();
|
||||
const DOCK_GUARD_WINDOW_MS = 3 * 1000;
|
||||
const DOCK_GUARD_WINDOW_MS = 2 * 1000;
|
||||
const BACKOFF_MS = 500;
|
||||
const BACKOFF_SPEED = 300;
|
||||
const backoffTimers = new Map(); // roverId -> Timeout
|
||||
@@ -230,21 +230,24 @@ function handleIdleUndock(undockedRecord) {
|
||||
}
|
||||
setDriveCooldown(suspect.roverId, DOCK_GUARD_WINDOW_MS);
|
||||
if (bumpRecent) {
|
||||
backoffRover(suspect.roverId);
|
||||
nudgeRover(suspect.roverId, 'backward');
|
||||
} else {
|
||||
nudgeRover(suspect.roverId, 'forward');
|
||||
}
|
||||
}
|
||||
|
||||
function backoffRover(roverId) {
|
||||
function nudgeRover(roverId, direction = 'backward') {
|
||||
if (!roverId) return;
|
||||
const { issueCommand } = require('./commandService');
|
||||
clearTimeout(backoffTimers.get(roverId));
|
||||
const speed = direction === 'forward' ? BACKOFF_SPEED : -BACKOFF_SPEED;
|
||||
try {
|
||||
issueCommand(roverId, {
|
||||
type: 'drive',
|
||||
driveDirect: { left: -BACKOFF_SPEED, right: -BACKOFF_SPEED },
|
||||
driveDirect: { left: speed, right: speed },
|
||||
});
|
||||
} catch (err) {
|
||||
logger.warn('Dock protection backoff failed', roverId, err.message);
|
||||
logger.warn('Dock protection nudge failed', roverId, err.message);
|
||||
return;
|
||||
}
|
||||
backoffTimers.set(
|
||||
|
||||
Reference in New Issue
Block a user