A robot felépítése elég egyszerű, egy háromkerekű robotról van szó, melyre egy kommunikációs egység van rakva, ennek segítségével kommunikál a robot a bázissal és a mentőrobottal.
A három kerék közük a két oldalsó nagy méretű kerék, mindkettőt egy-egy motor hajt meg. A robot tud előre és hátrafelé haladni, valamint helyben forogni a motorok megfelelő irányú forgatásával. A harmadik kerék egy kis kerék, amely a függőleges tengelye mentén el tud fordulni. Erre a megoldásra azért van szükség, mert a kerék rögzítése esetén a robot – a kereket hajtó motorok gyengesége miatt - nehezen tud fordulni álló helyzetben.
A kommunikációs egység a bázissal és a mentőrobottal is kommunikál, mindkettőtől fogad üzeneteket, a mentőrobotnak küld is.
A mentőrobot egy lánctalpas robot, melynek két hátsó kerekét egy-egy motor hajtja meg. A robot felső részén a kommunikációs egység foglal helyet, a robot első részén pedig ütközésérzékelő egységek vannak.
A mentőrobot a meghibásodott robothoz hasonlóan tud előre és hátra haladni, valamint helyben forogni.
A robot első részén lévő ütközésérzékelők a meghibásodott robot keresésénél használatosak: a kommunikáció a meghibásodott robottal akkor indul, amikor a robot nekiütközik az „elveszett” robotnak, tehát amikor megtalálja a másik robotot.
A kommunikációs egység a bázissal és a meghibásodott robottal is kommunikál, a bázissal nagy hatótávolságú kommunikációval, míg a meghibásodott robottal kis hatótávolságú kommunikációval.
Az 1. program elég egyszerű, a robotok kommunikációs képességeit teszteltük vele. Kézi irányítással a mentőrobotot a meghibásodott rövid távú kommunikációs hatósugarába vezettük. Ezután a mentőrobot utasításokat küldhetett a meghibásodottnak, amelyek alapján ez utóbbi elmozdult. Ha a meghibásodott robot kikerült a kommunikációs hatósugárból mozdulatlan maradt, mivel nem vette az üzeneteket. A meghibásodott robot addig nem fogta az üzeneteket , amíg kézi irányítással vissza nem vezettük a mentőrobotot a közelébe.
int vege = 0;
int m = 0, mm = 0;
sub waitmsg()
{ mm = m; while (mm == m) { m = Message(); } PlaySound(0);}
task main()
{ SetTxPower(TX_POWER_HI); Off(OUT_A + OUT_B + OUT_C); Set
Power(OUT_A + OUT_B + OUT_C, 3); ClearMessage(); while (vege == 0) { waitmsg(); if (m == 18) { OnFwd(OUT_A + OUT_C); } if (m == 12) { OnRev(OUT_A + OUT_C); } if (m == 14) { OnFwd(OUT_C); OnRev(OUT_A); } if (m == 16) { OnFwd(OUT_A); OnRev(OUT_C); } if (m == 20) {vege = 1;} Wait(50); Off(OUT_A + OUT_C); } Off(OUT_A + OUT_B + OUT_C);}
int vege = 0;
int m = 0, mm = 0;
int u = 0;
sub waitmsg()
{ mm = m; while (mm == m) { m = Message(); } PlaySound(0);}
task main()
{ SetTxPower(TX_POWER_LO); if (m == 6) { OnFwd(OUT_A); OnRev(OUT_C); } if (m == 9) { SendMessage(18); } if (m == 1) { SendMessage(12); } if (m == 7) { SendMessage(14); } if (m == 3) { SendMessage(16); } if (m == 10) { SendMessage(20); vege = 1;} if (m == 5) { SendMessage(42); } Wait(50); Off(OUT_A + OUT_C); } Off(OUT_A + OUT_B + OUT_C);}
A 2. program már a tényleges mentőakciót szimulálta. Kézi irányítással a mentőrobotot a meghibásodott robot irányába fordítottuk, majd a 8. üzenettel elindítottuk egyenesen. A mentőrobot egészen addig haladt előre amíg neki nem ütközött a meghibásodottnak. Ekkor rövid tolatás után 42. üzenettel tudatta a meghibásodottal, hogy rátalált (ezt még nagy hatótávolságú kommunikációval tette). Ezután a mentőrobot rövid hatótávolságú kommunikációra váltott és folyamatosan üzeneteket küldözgett. A meghibásodott robot addig fordult jobbra, amíg már nem tudta fogni a mentőrobot üzeneteit. Ezt követően a meghibásodott robot konstans ideig balra fodult (annyira, hogy a mentővel egy irányban álljanak), elküldte a mentőnek a 12. üzenetet, amely azt jelenti, hogy indulhatnak vissza, majd megindult előre. Kis idő múltán a mentő is elindult, és közösen érkeztek meg a kiinduló pontra.
int vege = 0;
int m = 0, mm = 0;
int i;
sub waitmsg()
{ mm = m; while (mm == m) { m = Message(); } PlaySound(0);}
task main()
{ SetTxPower(TX_POWER_LO); Off(OUT_A + OUT_B + OUT_C); SetPower(OUT_A + OUT_C, 4); ClearMessage(); while (vege == 0) { waitmsg(); if (m == 42) { ClearMessage(); Wait(200); ClearMessage();OnFwd(OUT_A); OnRev(OUT_C);
until (Message() != 0) ; m = Message();i = 5;if (m >= 100) i = m - 100;until (m == 0){Off(OUT_A + OUT_C);ClearMessage();Wait(100);OnFwd(OUT_A); OnRev(OUT_C);Wait(30);Off(OUT_A + OUT_C);Wait(70);m = Message();if (m >= 100) i = m - 100;}OnFwd(OUT_C); OnRev(OUT_A);Wait(130);Off(OUT_A + OUT_C);SendMessage(12);Wait(100);OnFwd(OUT_A + OUT_C);while (i >= 0) { i--; Wait(30); }Off(OUT_A + OUT_C);}if (m == 14) { Off(OUT_A + OUT_C); }if (m == 5) { Off(OUT_A + OUT_C); }if (m == 20) {vege = 1;}}Off(OUT_A + OUT_B + OUT_C);}Mentőrobot
int vege = 0;int m = 0, mm = 0;int u = 0;int i = 0;sub waitmsg(){mm = m;while (mm == m){m = Message();}PlaySound(0);}task main(){SetTxPower(TX_POWER_HI);Off(OUT_A + OUT_B + OUT_C);SetPower(OUT_A + OUT_C, 2);SetPower(OUT_B, 7);SetSensor(SENSOR_2, SENSOR_TOUCH);ClearMessage();while (vege == 0){waitmsg();if (m == 8){// OnRev(OUT_B);OnFwd(OUT_A + OUT_C);i = 0;until (SENSOR_2 == 1) { i++; Wait( };OnRev(OUT_A + OUT_C);Wait(40);Off(OUT_A + OUT_C);SendMessage(42);Wait(50);SendMessage(42);Wait(50);SetTxPower(TX_POWER_LO);Wait(100);while (m != 12){m = Message();SendMessage(100 + i);Wait(100);}Wait(100);SetTxPower(TX_POWER_HI);// Off(OUT_B);OnRev(OUT_A + OUT_C);i -= 4; // ugyanis a szenzorok miatt kesobb fekez, mint az elakadas miattuntil ( i <= 0 ) { i--; Wait(20); }SendMessage(14);Off(OUT_A + OUT_C);}if (m == 2) { OnRev(OUT_A + OUT_C); }if (m == 4) { OnFwd(OUT_C); OnRev(OUT_A); }if (m == 6) { OnFwd(OUT_A); OnRev(OUT_C); } pre>if (m == 5) { Off(OUT_A + OUT_C); }if (m == 10) { SendMessage(20); vege = 1;}}Off(OUT_A + OUT_B + OUT_C);}
Készült 2001. áprilisában