Stall detection in vernie roaming

This commit is contained in:
Nathan Kellenicki 2018-10-15 18:49:45 -07:00
parent ea89771c9a
commit d8689b2a46

View File

@ -21,27 +21,27 @@ const Modes = {
const turnRight = async (vernie, multiplier = 1) => { const turnRight = async (vernie, multiplier = 1) => {
await vernie.wait([ await vernie.wait([
vernie.setMotorAngle("A", 300 * multiplier, 50), vernie.setMotorAngle("A", 270 * multiplier, 50),
vernie.setMotorAngle("B", 300 * multiplier, -50) vernie.setMotorAngle("B", 270 * multiplier, -50)
]); ]);
} }
const turnHeadRight = async (vernie, multiplier = 1) => { const turnHeadRight = async (vernie, multiplier = 1) => {
await vernie.setMotorAngle("D", 35 * 1, 20); await vernie.setMotorAngle("D", 25 * multiplier, 20);
} }
const turnLeft = async (vernie, multiplier = 1) => { const turnLeft = async (vernie, multiplier = 1) => {
await vernie.wait([ await vernie.wait([
vernie.setMotorAngle("A", 300 * multiplier, -50), vernie.setMotorAngle("A", 270 * multiplier, -50),
vernie.setMotorAngle("B", 300 * multiplier, 50) vernie.setMotorAngle("B", 270 * multiplier, 50)
]); ]);
} }
const turnHeadLeft = async (vernie, multiplier = 1) => { const turnHeadLeft = async (vernie, multiplier = 1) => {
await vernie.setMotorAngle("D", 35 * 1, -20); await vernie.setMotorAngle("D", 25 * multiplier, -20);
} }
@ -51,22 +51,19 @@ const scan = (vernie) => {
vernie.on("distance", async (port, distance) => { vernie.on("distance", async (port, distance) => {
lastDistance = distance; lastDistance = distance;
}); });
await vernie.wait([ await turnHeadRight(vernie);
turnRight(vernie), await turnRight(vernie);
turnHeadRight(vernie) await turnHeadLeft(vernie);
]);
await vernie.sleep(1000); await vernie.sleep(1000);
const rightDistance = lastDistance; const rightDistance = lastDistance;
await vernie.wait([ await turnHeadLeft(vernie);
turnLeft(vernie, 2), await turnLeft(vernie, 2);
turnHeadLeft(vernie, 2) await turnHeadRight(vernie);
]);
await vernie.sleep(1000); await vernie.sleep(1000);
const leftDistance = lastDistance; const leftDistance = lastDistance;
await vernie.wait([ await turnHeadRight(vernie);
turnRight(vernie), await turnRight(vernie);
turnHeadRight(vernie) await turnHeadLeft(vernie);
]);
await vernie.sleep(1000); await vernie.sleep(1000);
const forwardDistance = lastDistance; const forwardDistance = lastDistance;
return resolve({ leftDistance, forwardDistance, rightDistance }); return resolve({ leftDistance, forwardDistance, rightDistance });
@ -95,31 +92,27 @@ poweredUP.on("discover", async (vernie) => { // Wait to discover Vernie
const { leftDistance, forwardDistance, rightDistance } = await scan(vernie); const { leftDistance, forwardDistance, rightDistance } = await scan(vernie);
if (rightDistance >= forwardDistance && rightDistance >= leftDistance) { if (rightDistance >= forwardDistance && rightDistance >= leftDistance && rightDistance > 200) {
// Go right // Go right
await vernie.wait([ await turnHeadRight(vernie);
turnRight(vernie), await turnRight(vernie);
turnHeadRight(vernie) await turnHeadLeft(vernie);
]);
await vernie.sleep(1000); await vernie.sleep(1000);
await vernie.wait([ await vernie.setMotorSpeed("AB", 50);
vernie.setMotorSpeed("AB", 50), } else if (leftDistance >= forwardDistance && leftDistance >= rightDistance && leftDistance > 200) {
turnHeadLeft(vernie)
]);
} else if (leftDistance >= forwardDistance && leftDistance >= rightDistance) {
// Go left // Go left
await vernie.wait([ await turnHeadLeft(vernie);
turnLeft(vernie), await turnLeft(vernie);
turnHeadLeft(vernie) await turnHeadRight(vernie);
]);
await vernie.sleep(1000); await vernie.sleep(1000);
await vernie.wait([ await vernie.setMotorSpeed("AB", 50);
vernie.setMotorSpeed("AB", 50),
turnHeadRight(vernie)
]);
} else { } else {
// Go forward // Turn around
vernie.setMotorSpeed("AB", 50); await turnHeadRight(vernie);
await turnRight(vernie, 2);
await turnHeadLeft(vernie);
await vernie.sleep(1000);
await vernie.setMotorSpeed("AB", 50);
} }
mode = Modes.ROAMING; mode = Modes.ROAMING;
@ -127,6 +120,42 @@ poweredUP.on("discover", async (vernie) => { // Wait to discover Vernie
} }
}); });
setInterval(async () => {
if (vernie.current > 20 && mode === Modes.ROAMING) { // If we're roaming around and we detect an object in front of us, stop and scan
mode = Modes.AVOIDING;
await vernie.setMotorSpeed("AB", -30, 1500);
const { leftDistance, forwardDistance, rightDistance } = await scan(vernie);
if (rightDistance >= forwardDistance && rightDistance >= leftDistance && rightDistance > 200) {
// Go right
await turnHeadRight(vernie);
await turnRight(vernie);
await turnHeadLeft(vernie);
await vernie.sleep(1000);
await vernie.setMotorSpeed("AB", 50);
} else if (leftDistance >= forwardDistance && leftDistance >= rightDistance && leftDistance > 200) {
// Go left
await turnHeadLeft(vernie);
await turnLeft(vernie);
await turnHeadRight(vernie);
await vernie.sleep(1000);
await vernie.setMotorSpeed("AB", 50);
} else {
// Turn around
await turnHeadRight(vernie);
await turnRight(vernie, 2);
await turnHeadLeft(vernie);
await vernie.sleep(1000);
await vernie.setMotorSpeed("AB", 50);
}
mode = Modes.ROAMING;
}
}, 2000);
} }
}); });