Stall detection in vernie roaming
This commit is contained in:
parent
ea89771c9a
commit
d8689b2a46
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
Loading…
x
Reference in New Issue
Block a user