diff --git a/examples/vernie_roaming.js b/examples/vernie_roaming.js index dee7579..576c07e 100644 --- a/examples/vernie_roaming.js +++ b/examples/vernie_roaming.js @@ -21,27 +21,27 @@ const Modes = { const turnRight = async (vernie, multiplier = 1) => { await vernie.wait([ - vernie.setMotorAngle("A", 300 * multiplier, 50), - vernie.setMotorAngle("B", 300 * multiplier, -50) + vernie.setMotorAngle("A", 270 * multiplier, 50), + vernie.setMotorAngle("B", 270 * multiplier, -50) ]); } 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) => { await vernie.wait([ - vernie.setMotorAngle("A", 300 * multiplier, -50), - vernie.setMotorAngle("B", 300 * multiplier, 50) + vernie.setMotorAngle("A", 270 * multiplier, -50), + vernie.setMotorAngle("B", 270 * multiplier, 50) ]); } 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) => { lastDistance = distance; }); - await vernie.wait([ - turnRight(vernie), - turnHeadRight(vernie) - ]); + await turnHeadRight(vernie); + await turnRight(vernie); + await turnHeadLeft(vernie); await vernie.sleep(1000); const rightDistance = lastDistance; - await vernie.wait([ - turnLeft(vernie, 2), - turnHeadLeft(vernie, 2) - ]); + await turnHeadLeft(vernie); + await turnLeft(vernie, 2); + await turnHeadRight(vernie); await vernie.sleep(1000); const leftDistance = lastDistance; - await vernie.wait([ - turnRight(vernie), - turnHeadRight(vernie) - ]); + await turnHeadRight(vernie); + await turnRight(vernie); + await turnHeadLeft(vernie); await vernie.sleep(1000); const forwardDistance = lastDistance; 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); - if (rightDistance >= forwardDistance && rightDistance >= leftDistance) { + if (rightDistance >= forwardDistance && rightDistance >= leftDistance && rightDistance > 200) { // Go right - await vernie.wait([ - turnRight(vernie), - turnHeadRight(vernie) - ]); + await turnHeadRight(vernie); + await turnRight(vernie); + await turnHeadLeft(vernie); await vernie.sleep(1000); - await vernie.wait([ - vernie.setMotorSpeed("AB", 50), - turnHeadLeft(vernie) - ]); - } else if (leftDistance >= forwardDistance && leftDistance >= rightDistance) { + await vernie.setMotorSpeed("AB", 50); + } else if (leftDistance >= forwardDistance && leftDistance >= rightDistance && leftDistance > 200) { // Go left - await vernie.wait([ - turnLeft(vernie), - turnHeadLeft(vernie) - ]); + await turnHeadLeft(vernie); + await turnLeft(vernie); + await turnHeadRight(vernie); await vernie.sleep(1000); - await vernie.wait([ - vernie.setMotorSpeed("AB", 50), - turnHeadRight(vernie) - ]); + await vernie.setMotorSpeed("AB", 50); } else { - // Go forward - vernie.setMotorSpeed("AB", 50); + // Turn around + await turnHeadRight(vernie); + await turnRight(vernie, 2); + await turnHeadLeft(vernie); + await vernie.sleep(1000); + await vernie.setMotorSpeed("AB", 50); } 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); + } }); \ No newline at end of file