Autonomous Vernie roaming example

This commit is contained in:
Nathan Kellenicki 2018-10-12 16:59:32 -07:00
parent caf2263ea0
commit 5a820c0532

View File

@ -19,6 +19,32 @@ const Modes = {
} }
const turnRight = async (vernie, multiplier = 1) => {
await vernie.wait([
vernie.setMotorAngle("A", 300 * multiplier, 50),
vernie.setMotorAngle("B", 300 * multiplier, -50)
]);
}
const turnHeadRight = async (vernie, multiplier = 1) => {
await vernie.setMotorAngle("D", 35 * 1, 20);
}
const turnLeft = async (vernie, multiplier = 1) => {
await vernie.wait([
vernie.setMotorAngle("A", 300 * multiplier, -50),
vernie.setMotorAngle("B", 300 * multiplier, 50)
]);
}
const turnHeadLeft = async (vernie, multiplier = 1) => {
await vernie.setMotorAngle("D", 35 * 1, -20);
}
const scan = (vernie) => { const scan = (vernie) => {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
let lastDistance = 0; let lastDistance = 0;
@ -26,23 +52,20 @@ const scan = (vernie) => {
lastDistance = distance; lastDistance = distance;
}); });
await vernie.wait([ await vernie.wait([
vernie.setMotorAngle("A", 300, 50), turnRight(vernie),
vernie.setMotorAngle("B", 300, -50), turnHeadRight(vernie)
vernie.setMotorAngle("D", 35, 20)
]); ]);
await vernie.sleep(1000); await vernie.sleep(1000);
const rightDistance = lastDistance; const rightDistance = lastDistance;
await vernie.wait([ await vernie.wait([
vernie.setMotorAngle("A", 600, -50), turnLeft(vernie, 2),
vernie.setMotorAngle("B", 600, 50), turnHeadLeft(vernie, 2)
vernie.setMotorAngle("D", 70, -20)
]); ]);
await vernie.sleep(1000); await vernie.sleep(1000);
const leftDistance = lastDistance; const leftDistance = lastDistance;
await vernie.wait([ await vernie.wait([
vernie.setMotorAngle("A", 300, 50), turnRight(vernie),
vernie.setMotorAngle("B", 300, -50), turnHeadRight(vernie)
vernie.setMotorAngle("D", 35, 20)
]); ]);
await vernie.sleep(1000); await vernie.sleep(1000);
const forwardDistance = lastDistance; const forwardDistance = lastDistance;
@ -60,9 +83,8 @@ poweredUP.on("discover", async (vernie) => { // Wait to discover Vernie
await vernie.connect(); await vernie.connect();
console.log("Connected to Vernie!"); console.log("Connected to Vernie!");
vernie.setLEDColor(PoweredUP.Consts.Colors.BLUE); vernie.setLEDColor(PoweredUP.Consts.Colors.BLUE);
vernie.setMotorSpeed("AB", 50); // Start moving!
await vernie.sleep(1000); await vernie.sleep(1000);
vernie.setMotorSpeed("AB", 50); // Start moving!
vernie.on("distance", async (port, distance) => { vernie.on("distance", async (port, distance) => {
if (distance < 150 && mode === Modes.ROAMING) { // If we're roaming around and we detect an object in front of us, stop and scan if (distance < 150 && mode === Modes.ROAMING) { // If we're roaming around and we detect an object in front of us, stop and scan
@ -76,26 +98,24 @@ poweredUP.on("discover", async (vernie) => { // Wait to discover Vernie
if (rightDistance >= forwardDistance && rightDistance >= leftDistance) { if (rightDistance >= forwardDistance && rightDistance >= leftDistance) {
// Go right // Go right
await vernie.wait([ await vernie.wait([
vernie.setMotorAngle("A", 300, 50), turnRight(vernie),
vernie.setMotorAngle("B", 300, -50), turnHeadRight(vernie)
vernie.setMotorAngle("D", 35, 20)
]); ]);
await vernie.sleep(1000); await vernie.sleep(1000);
await vernie.wait([ await vernie.wait([
vernie.setMotorSpeed("AB", 50), vernie.setMotorSpeed("AB", 50),
vernie.setMotorAngle("D", 35, -20) turnHeadLeft(vernie)
]); ]);
} else if (leftDistance >= forwardDistance && leftDistance >= rightDistance) { } else if (leftDistance >= forwardDistance && leftDistance >= rightDistance) {
// Go left // Go left
await vernie.wait([ await vernie.wait([
vernie.setMotorAngle("A", 300, -50), turnLeft(vernie),
vernie.setMotorAngle("B", 300, 50), turnHeadLeft(vernie)
vernie.setMotorAngle("D", 35, -20)
]); ]);
await vernie.sleep(1000); await vernie.sleep(1000);
await vernie.wait([ await vernie.wait([
vernie.setMotorSpeed("AB", 50), vernie.setMotorSpeed("AB", 50),
vernie.setMotorAngle("D", 35, 20) turnHeadRight(vernie)
]); ]);
} else { } else {
// Go forward // Go forward