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) => {
return new Promise(async (resolve) => {
let lastDistance = 0;
@ -26,23 +52,20 @@ const scan = (vernie) => {
lastDistance = distance;
});
await vernie.wait([
vernie.setMotorAngle("A", 300, 50),
vernie.setMotorAngle("B", 300, -50),
vernie.setMotorAngle("D", 35, 20)
turnRight(vernie),
turnHeadRight(vernie)
]);
await vernie.sleep(1000);
const rightDistance = lastDistance;
await vernie.wait([
vernie.setMotorAngle("A", 600, -50),
vernie.setMotorAngle("B", 600, 50),
vernie.setMotorAngle("D", 70, -20)
turnLeft(vernie, 2),
turnHeadLeft(vernie, 2)
]);
await vernie.sleep(1000);
const leftDistance = lastDistance;
await vernie.wait([
vernie.setMotorAngle("A", 300, 50),
vernie.setMotorAngle("B", 300, -50),
vernie.setMotorAngle("D", 35, 20)
turnRight(vernie),
turnHeadRight(vernie)
]);
await vernie.sleep(1000);
const forwardDistance = lastDistance;
@ -60,9 +83,8 @@ poweredUP.on("discover", async (vernie) => { // Wait to discover Vernie
await vernie.connect();
console.log("Connected to Vernie!");
vernie.setLEDColor(PoweredUP.Consts.Colors.BLUE);
vernie.setMotorSpeed("AB", 50); // Start moving!
await vernie.sleep(1000);
vernie.setMotorSpeed("AB", 50); // Start moving!
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
@ -76,26 +98,24 @@ poweredUP.on("discover", async (vernie) => { // Wait to discover Vernie
if (rightDistance >= forwardDistance && rightDistance >= leftDistance) {
// Go right
await vernie.wait([
vernie.setMotorAngle("A", 300, 50),
vernie.setMotorAngle("B", 300, -50),
vernie.setMotorAngle("D", 35, 20)
turnRight(vernie),
turnHeadRight(vernie)
]);
await vernie.sleep(1000);
await vernie.wait([
vernie.setMotorSpeed("AB", 50),
vernie.setMotorAngle("D", 35, -20)
turnHeadLeft(vernie)
]);
} else if (leftDistance >= forwardDistance && leftDistance >= rightDistance) {
// Go left
await vernie.wait([
vernie.setMotorAngle("A", 300, -50),
vernie.setMotorAngle("B", 300, 50),
vernie.setMotorAngle("D", 35, -20)
turnLeft(vernie),
turnHeadLeft(vernie)
]);
await vernie.sleep(1000);
await vernie.wait([
vernie.setMotorSpeed("AB", 50),
vernie.setMotorAngle("D", 35, 20)
turnHeadRight(vernie)
]);
} else {
// Go forward