Jednoduché sledování čáry¤
Základní myšlenka¤
Na začátku předpokládáme, že se je čára mezi dvěma přednímy senzory. Na vstup ze senzorů budeme reagovat takto:
- Čára je uprostřed: Jedeme rovně
- Čára je vlevo: Jedeme doleva
- Čára je vpravo: Jedeme doprava
Program¤
Senzor nám barvu popíše jako číslo od 0 do 1023, nás ale nezajímá konkrétní číslo, ale zda se ta barva ještě dá považovat za bílou a nebo už je to černá. Zvolíme si tedy nějakou prahovou hodnotu (threshold) ve které se bude naše vnímání barvy lámat.
const thresh = 700; // Mez pod kterou se barva považuje za černou
Nastavíme, že motory mají jet:
robutek.leftMotor.move();
robutek.rightMotor.move();
Nakonec musíme napsat hlavní část programu. Ve while cyklu neustále kontrolujeme stav senzorů a nastavujeme výkon motorů. V cyklu nesmíme zapomenout na krátký await sleep() abychom se vyhnuli problémům s watchdogem.
while(true) {
const l = robutek.readSensor("LineFL");
const r = robutek.readSensor("LineFR");
if(l < thresh) {
robutek.leftMotor.setSpeed(100);
robutek.rightMotor.setSpeed(10);
} else if(r < thresh) {
robutek.leftMotor.setSpeed(10);
robutek.rightMotor.setSpeed(100);
} else {
robutek.leftMotor.setSpeed(100);
robutek.leftMotor.setSpeed(100);
}
await sleep(10);
}
Celý program pak může vypadat nějak takto:
import { createRobutek } from "./libs/robutek.js"
const robutek = createRobutek("V2");
const thresh = 700; // Mez pod kterou se barva považuje za černou
async function main() {
/*
Nastavíme nějakou rozumnou rychlost,
čím menší, tím snáze se robůtek na čáře
udrží
*/
//robutek.setSpeed(0);
robutek.leftMotor.move();
robutek.rightMotor.move();
while(true) {
const l = robutek.readSensor("LineFL");
const r = robutek.readSensor("LineFR");
if(l < thresh) {
robutek.leftMotor.setSpeed(100);
robutek.rightMotor.setSpeed(10);
} else if(r < thresh) {
robutek.leftMotor.setSpeed(10);
robutek.rightMotor.setSpeed(100);
} else {
robutek.leftMotor.setSpeed(100);
robutek.leftMotor.setSpeed(100);
}
await sleep(10);
}
}
main().catch(console.error);