V poslední době se k výuce programování čím dál častěji používají roboti. Různé podvozky pro Arduino jsou relativně levné a ani Lego Mindstorms nezatíží rozpočet přespříliš. Na ZŠ pochopitelně stačí jednoduchý kód pro dálkové ovládání, jde spíše o výuku základů algoritmizace (dokonalé „škola hrou“). Ale ani takové EV3 není jen hračka, na VŠ se často používá k experimentům s pokročilými algoritmy umělé inteligence (lokalizace, mapování apod.). Pojďme se podívat, jak lze takového robota naučit „inteligenci“.
Já jsem použil k výuce EV3 a následující rozhraní:
class Robot {
public:
Robot(float gauge, float wheelDiameter);
auto move(int speed, unsigned int distance);
auto turnLeft(int speed, unsigned int angle);
auto turnRight(int speed, unsigned int angle);
};
Pochopitelně lze stejným způsobem ovládat jakéhokoliv robota s nezávislým ovládáním pásů (parametry konstruktoru jsou rozchod kol a průměr kola). Později budeme potřebovat ještě senzory (infračervený, ultrazvukový, kompas a akcelerometr). V případě EV3 lze výše uvedené rozhraní implementovat například v Monobricku, což je knihovna fungující na všech OS. (U EV3 se řídící jednotka nazývá brick, česky kostka.)
Robota budeme ovládat pro jednoduchost z počítače, nicméně EV3 je plnohodnotný Linux a umí přímo vykonávat programy v C++, Javě i .NET. V praxi je autonomicita důležitá, například NASA se snaží mít na Marsu maximálně autonomní vozítka, protože dálkové ovládání je v tomto případě značně nepraktické (v nejhorším případě signál na Zemi „cestuje“ 21 minut, takže než vozítko pošle data ze senzorů a obdrží další instrukce, může uplynout i více než 40 minut). My budeme jezdit po místnosti, takže stačí zařízení s Bluetooth, a pokud by někdo chtěl experimentovat a jezdit po venku na větší vzdálenosti mimo dosah signálu, jednoduše si stejný program nahraje přímo na kostku.
Rozhraní Robot je poměrně hloupé, odborněji řečeno jde jen o rozhraní k senzorům a efektorům robota. Později si ukážeme, jak nad tímto základem naimplementovat třídu Agent s pokročilou inteligencí.
Pro začátek je dobré zkusit si jednoduchý program:
for (auto i = 0; i < 10; i++) {
for (auto j = 0; j < 4; j++) {
auto travelled = robot.move(10, 500); // move forwards by 50 cm
auto turned = robot.turnLeft(10, 90); // turn left by 90 deg
}
}
Uvedený kód názorně ukazuje, jak se při hýbání robotem akumuluje chyba. Robot má jezdit co čtverce a skončit na stejném místě, odkud vyjel. Ale i když zadáte velmi přesně rozchod kol a průměr kola, zjistíte, že startovní pozice se trochu liší od koncové. Jak se lze s chybovostí odometrie vyrovnat si ukážeme někdy příště.
Poznámka: Veškerý kód jsem pochopitelně vyzkoušel přímo v praxi. Zájemcům můžu poskytnout kód pro EV3 (vyzkoušený na OS X s Mono).
Na www.conrad.cz se dají koupit různé díly a něco poskládat. Jenže v EV3 je vše pohromadě, existují k tomu knihovny a také různé kurzy a materiály (třeba na stránkách Západočeské univerzity).
@4 Muzes to nejak rozvest?
Pokud vim, zarodek Mindstorms je http://brickset.com/sets/8094-1/Control-Centre
Od te doby uz je to jenom celkem jasne rozsireni toho konceptu. A od roku cca 1997 to slo s Technicem dost dolu - staci se podivat, co nabizeji dnes. A ty dilky, prijde mi, ze se z nich neda skoro nic postavit. Je to proste fakt zoufale, zvlast kdyz clovek uvazi, co opravdu mohli dokazat, kdyby pokracovali v ceste nastoupene nekdy v polovine 80. let.
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 200×
Přečteno 25 361×
Přečteno 23 795×
Přečteno 20 177×
Přečteno 17 874×