Jelen labormérés célja, hogy a hallgatók játékos formában és minimális programozási teher mellett ismerkedjenek meg a kooperatív autonóm ágenseket tartalmazó rendszerek fejlesztésének gyakorlati aspektusaival.
A méréshez egy teljes grafikus keretrendszert biztosítunk. A célunk ezzel az, hogy a hallgatók a hatékony ágens vezérlési stratégiák kitalálásában, majd e stratégiák többágenses együttműködés esetére történő kiterjesztésében gyakorlati tapasztalatokat szerezhessenek.
A MIT3 és MIT4 labormérések lebonyolítása a hagyományostól eltérő módon történik úgy, hogy a hivatalosan az órarendben ütemezett laboralkalmak során mindössze konzultációs lehetőséget nyújtunk, mely konzultáción a részvétel nem kötelező. A labor teljesítéséhez a laborfeladatok megfelelő szinten történő kidolgozása és a kapcsolódó elektronikus jegyzőkönyv határidőre történő beadása a követelmény a https://hf.mit.bme.hu portálon keresztül, a konzultáción történő személyes megjelenés nem.
A mérés során a hallgatók önállóan dolgoznak, a feladat teljesítése és értékelése is egyénileg (nem mérőpárokban) történik. A mérés tervezett időigénye: 1 óra felkészülés, 1 óra ismerkedés a keretrendszerrel valamint 3 óra ágens fejlesztés, kísérletezés és dokumentálás.
Utóbbi években az informatikai technológiák elé tornyosuló egyik legkomolyabb kihívás a katasztrófahelyzetek elhárításának hatékony támogatása vált. Informatikai/robotikus megoldások számos előnnyel rendelkeznek: működőképesek maradnak az ember számára adverz körülmények között, döntési és kooperativítási képességeiben kevésbé érzékenyek az embereket lebénítő streszhatásokra, miniaturizálás révén képesek ott is szolgálni, ahol az emberi, vagy az állati mentők testméretei ezt lehetetlenné teszik, végül, de nem utolsósorban a gépi intelligencia, a gépi tanulás beépítése révén komoly partnerséget jelenthetnek az emberi mentőcsapatok számára.
Az ilyen informatikai alkalmazások alapvető problémája, hogy a megtervezett szoftver (és hardver) helyessége formálisan érdemben nem verifikálható, hiszen ehhez rendelkezni kellene a feladat részletes formális specifikációjával. Egyetlen kiút a megfelelő pontosságú és komplexitású szimulációk és ebből a körből merít a jelen mérési feladat.
Jelen labor során a feladat egy szimulált környezetben olyan autonóm robotok vezérlésének megtervezése, melyek földrengés után a megrongálódott épületekben kutatnak túlélők után. Az ilyen robotok fejlesztése napjainkban komoly hangsúlyt kapott, ugyanis egy épületeket összedönteni képes földrengés általában olyan nagy területet érinti, hogy a mentéshez sosem áll rendelkezésre kellő létszámú emberi személyzet. Ilyen helyzetben óriási segítség lehet, ha az áldozatok felkutatásában olyan autonóm robotok is segítséget tudnak nyújtani, melyek emberi távfelügyelet nélkül képesek nagy területet bejárni, illetve a szűk réseken bejutva olyan helyeket felderíteni ahova például csak mentőkutyák juthatnának be.
Jelen laborfeladat során ebben a környezetben működő robotoknak kell a vezérlő programját elkészíteni. A feladat során a laborra rendelkezésre álló korlátos időkeret miatt az alábbi egyszerűsítésekkel élünk a valósághoz képest:
Az RescueFramework keretrendszer egy Java alkalmazás, mely teljes forráskóddal innen tölthető le. Az alkalmazás RescueFramework főosztályának main() metódusával futtatható és önálló grafikus felülettel rendelkezik. A feladat megoldása során a keretrendszer rescueagents package-ében található RobotControl osztályban kell implementálni a robotok vezérlését.
A keretrendszer grafikus felületének főablakát az alábbi ábra szemlélteti.
A felhasználói felületen a következő beállítások végezhetők el:
A szimuláció a következő eszközökkel vezérelhető:
A keretrendszer bármikor lehetőséget biztosít tesztelési céllal beavatkozni és kézzel vezérelni az első robotot:
A szimulátorban az alábbi objektumokkal találkozhatnak a robotok:
A pályán kétféle speciális mező található:
A szimulátor működése során segítségül mindig megjeleníti a legközelebbi kijárathoz (zöld), a legközelebbi sérülthöz (piros) és a legközelebbi elérhető de felderítetlen mezőhöz (szürke) vezető utakat (lásd az alábbi ábrát).
A fentiek alapján a feladat úgy foglalható össze, hogy a robotoknak fel kell kutatniuk a pályán található sérülteket és azokat egy exit mezőre kell szállítaniuk lehetőleg még élve. A szimuláció akkor ér véget, ha minden sérült (élve vagy holtan) egy exit mezőre került, ekkor értékeli a keretrendszer a robotok teljesítményét az élve megmentett sérültek százalékos arányának kiszámításával.
A sérültek kezdő életereje és pozíciója fixen rögzített a pályán, azonban a robotok számának növelésével a sérültek életereje arányosan csökken (tehát az egy robot esetén 300 egység életerővel rendelkező sérült három robot esetén már csak 100 egység életerővel rendelkezik). Minden körben minden robot tehet egy lépést további minden megmentésre váró sérült életereje is egy egységgel csökken.
A robotok egyszerre egy sérültet tudnak szállítani, akinek a felvétele automatikus a cellájára lépve. A sérült leadása is automatikusan történik akkor, ha egy sérültet szállító robot egy exit mezőre lép. A szimuláció automatikus léptetése megáll, ha minden sérült (vagy elhunyt) kimentésre kerül, vagy ha egyetlen robot se kíván további lépést tenni.
A keretrendszer egy hagyományos Java alkalmazás formájában került megvalósításra. Az alkalmazáson belül három package található: az rescueagents tartalmazza a robotokat vezérlő ágens osztályt, a rescueframework a keretrendszer forrásfájljait, míg a world package a világot leíró fájlokat tárolja.
Az rescueagents package RobotControl osztályában van lehetőség az ágensek intelligenciájának implementálására. A RobotControl osztály az AbstractRobotControl leszármazottja, ahol a robotok egyedi számmal történő ellátása került implementálásra.
Szükség esetén használható az world package AStarSearch statikus osztálya, mellyel A* keresést lehet megvalósítani két cella között a robotok által ismert cellákat figyelembe véve:
Path AStarSearch.search(Cell start, Cell target, int maxDistance)
Ezzel a függvénnyel a start cellából a target cellába kereshetünk utat, mely maximum maxDistance lépés hosszú. A maxDistance értékét -1-re állítva nincs korlátozás a megtalált út hosszára. Ha nem található út a két cella között, akkor a függvény NULL értékkel tér vissza.
A visszakapott Path objektum getFirstCell() függvénye adja a cél felé vezető út első lépését. Az úton történő elinduláshoz a directionFrom(robot.getLocation()) függvény használható.
A robot a RobotPercepcion interfészen keresztül az alábbi függvényekkel fér hozzá a világ állapotához:
public int getTime();
Visszaadja a szimulációs idő értékét.
public ArrayList
Visszaadja az exit cellák listáját.
public ArrayList
Visszaadja a robotok által még fel nem derített cellák listáját.
public ArrayList
Visszaadja a már felderített sérültek listáját.
public ArrayList
Visszaadja a robotok cellák listáját.
public Path getShortestExitPath(Cell start);
Kiszámítja a legközelebbi kijárathoz vezető utat.
public Path getShortestUnknownPath(Cell start);
Kiszámítja a legközelebbi felderítetlen cellához vezető utat.
public Path getShortestInjuredPath(Cell start);
Kiszámítja a legközelebbi sérülthöz vezető utat.
Az ágensek implementálása során az itt bemutatott érzékelésekre kell támaszkodni, tehát a világot direktben reprezentáló world.Map osztályhoz nem fordulhatnak az ágensek információért!
A RobotControl osztály step() függvénye egy Integer objektummal tér vissza, melynek jelentése az alábbi lehet:
A visszaadott érték alapján a szimulátor ellenőrzi, hogy az adott irányba lehet-e lépni (nincs-e ott bútor vagy törmelék kupac) és végrehajtja a lépést. Ha a célcellán sérült tartózkodik és a robot nem szállít még sérültet, akkor automatikusan felveszi azt. Ha a célcella exit cella és a robot sérültet szállít, akkor a robot automatikusan leadja a sérültet.
A mérés során a feladat a fentiekben ismertetett RescueFramework keretrendszerrel kell megismerkedni, majd egy önállóan hatékony és csapatban dolgozni is képes ágens kifejlesztése a cél.
A keretrendszer innen tölthető le. A feladatok megoldása során használja a „Default.txt” térképet!
Ismerkedjen meg a szimulátor grafikus felületével és a pályával! Kézi vezérlés módban (a billentyűzet fel-le-jobbra-balra gombjaival vezérelve a robotot) járja be a pályát és juttassa ki a sérülteket!
1. kérdés
Készítsen képernyőképet az összes sérült kézi megmentése után a szimulátor ablakról!
Ehhez a válaszhoz kép csatolása szükséges.
Készítsen egy egyszerű autonóm vezérlést egyetlen robot számára! A RobotControl osztály step() függvényében implementálja a megoldást!
Egy lehetséges megoldás: A robot működhet egy olyan egyszerű stratégia szerint, hogy először felderíti a teljes pályát, majd szépen sorban mindig a hozzá legközelebbi sérültet szállítja a legközelebbi exit cellára. Ehhez használhatja a percepcion objektum getShortestUnknownPath, getShortestInjuredPath és getShortestExitPath függvényeit, melyek mindegyike egy p Path objektumot ad vissza. Forráskód példa a legközelebbi még fel nem fedezett mező irányába mozgásra:
Path path = percepcion.getShortestUnknownPath(robot.getLocation());
if (path != null) {
return path.getFirstCell().directionFrom(robot.getLocation());
}
Használhatja az előbbiekben ismertetett stratégiát vagy implementálhat más hasonlóan egyszerű működést (például hogy a robot minden felfedezett sérültet azonnal kivisz, stb.).
2. kérdés
Ismertesse röviden szövegesen az elsőnek megvalósított működést!
3. kérdés
Másolja be ide a RobotControl.java fájl tartalmát!
4. kérdés
Készítsen egy képernyőképet az első stratégiát követő robotról működés közben!
Ehhez a válaszhoz kép csatolása szükséges.
5. kérdés
Értékelje a robot teljesítményét! Milyen helyzeteket old meg jól az implementált stratégia, hol lehetne javítani a működésen?
Tervezzen megoldást az előző válaszban megfogalmazott gyengeségekre! Nem szükséges globálisan optimális stratégiát létrehozni, de mindenképpen javítson a robot teljesítményén az előző verzióhoz képest úgy, hogy valamilyen további információt (például a páciensek állapotát, a sérültek elhelyezkedését, stb.) figyelembe veszi! Kizárólag olyan információkra támaszkodjon, amelyek a robot számára ismertek (tehát a percepcion objektumon keresztül elérhetők)!
6. kérdés
Ismertesse röviden szövegesen az továbbfejlesztett robot működést!
7. kérdés
Másolja be ide a RobotControl.java fájl tartalmát!
8. kérdés
Készítsen egy képernyőképet a második stratégiát követő robotról működés közben!
Ehhez a válaszhoz kép csatolása szükséges.
9. kérdés
Értékelje a robot teljesítményét! Milyen helyzeteket old meg jól az implementált stratégia, hol lehetne javítani a működésen?
Végezzen kísérleteket az előző feladatban implementált robottal úgy, hogy most már 2-5 példány is részt vesz a működésben!
10. kérdés
Értékelje a robotok működését! Hogyan változik az önállóan hatékony robotok teljesítménye akkor, ha koordináció nélkül működnek együtt a feladat megoldásában?
11. kérdés
Hogyan lehetne javítani együttműködéssel a csoport teljesítményén?
Ne feledje, hogy a pálya a robotok indulásakor továbbra is ismeretlen és minden robot fixen egy helyről indul! A robotok már eddig is is együttműködtek tudásmegosztás szintjén, hiszen a térképpel kapcsolatos információkat automatikusan megosztották egymással, vagyis minden cellát elég volt egy robotnak felderítenie ahhoz, hogy annak tartalma mindenki által ismert legyen!
Az előző kérdésben megfogalmazott javítási lehetőségek közül implementáljon néhányat, vagyis tegye együttműködés által hatékonyabbá a robotok működését! A robotok közötti kommunikációhoz javasoljuk, hogy a RobotControl osztályban statikus változókat használjon, de természetesen bármilyen ettől eltérő megoldás (üzenetsorok, stb.) is elfogadható.
12. kérdés
Milyen változtatásokat hajtott végre az ágensek vezérlésén?
13. kérdés
Másolja be ide a RobotControl.java fájl tartalmát!
14. kérdés
Készítsen egy képernyőképet a több ágenses működésről!
Ehhez a válaszhoz kép csatolása szükséges.
15. kérdés
Értékelje az elkészült ágensek működését, tegyen javaslatot esetleges továbbfejlesztésekre!
A laborfeladatokat a benyújtott elektronikus jegyzőkönyv alapján értékeljük. Minden részfeladat megoldásával a feladatnál megadott pontszám szerezhető, melyek összegeként áll elő a mérésre kapott jegy.
A mérési feladat megoldható mérnöki józan ész alapon, különös rávezető irodalomra nincs szükség. Azonban a mérési feladat által mintázott probléma óriási fontosságú és az informatikai és robotikus megoldása még csak gyerekcipőben jár.
Az ajánlott irodalom gyanánt, az érdeklődéskeltés érdekében, így néhány olvasmányt mutatunk a SAR (Search And Rescue), ill. katasztrófaelhárító informatikai rendszerek témaköréből.
A mérési feladattal rokon amerikai oktatási probléma, ötletmerítés céljából:
E. Eaton, Gridworld Search and Rescue: A Project Framework for a Course in Artificial Intelligence, Proc. of the AAAI-08 AI Education Colloquium, July 13, 2008, Chicago,
https://www.seas.upenn.edu/~eeaton/papers/Eaton2008Gridworld.pdf
Mivel SAR feladatnak nemigen létezik formális megfogalmazása, a SAR céljából megtervezett informatikai/robotikus rendszerek validációja elvi alapon lehetetlen. Egyetlen lehetőség a kísérleti validáció, ehhez viszont a tényleges katasztrófákat mellőzve, ki kell alakítani „katasztrófa-szagú” valódi tesztkörnyezeteket. Foglalkozik ezzel az Amerikai Szabványügyi Hivatal:
A.S. Jacoff, E.R. Messina, J. Evans, A Standard Test Course for Urban Search and Rescue Robots, Aug 1, 2000,
https://www.nist.gov/publications/standard-test-course-urban-search-and-rescue-robots
Egy áttekíntése a SAR problémára jellemző és megoldandó problémáknak:
G. Kruijff, F. Colas, T. Svoboda, J. Van Diggelen, P. Balmer, F. Pirri, R. Worst, Designing Intelligent Robots for Human-Robot Teaming in Urban Search & Rescue, AAAI 2012 Spring Symposium on Designing Intelligent Robots, 2012, Stanford,
https://hal.archives-ouvertes.fr/hal-01143096/file/2012_Kruijff_AAAISS_Designing.pdf
Rendszeres SAR versenyekről.
H. Kitano and S. Tadokoro, RoboCup Rescue. A Grand Challenge for Multiagent and Intelligent Systems, AI Magazine, Vol 22, Number 1, 2001, pp. 39-52,
http://www.aistudy.co.kr/paper/aaai_journal/AIMag22-01-002.pdf