700 likes | 968 Views
Intelektikos pagrindai. P176B100 2012 m Robertas Damaševičius r obertas . damasevicius @ktu.lt. Klasikiniai robotų valdymo algoritmai. Klasikiniai algoritmai. Klasikiniai algoritmai Klajojimo algoritmai Kliūčių vengimo algoritmai Linijos sekimo algoritmai Sienos sekimo algoritmai
E N D
Intelektikos pagrindai P176B100 2012 m Robertas Damaševičius robertas.damasevicius@ktu.lt
Klasikiniai algoritmai • Klasikiniai algoritmai • Klajojimo algoritmai • Kliūčių vengimo algoritmai • Linijos sekimo algoritmai • Sienos sekimo algoritmai • Kelio planavimo algoritmai • „Bug“ algoritmų šeimyna • Labirinto praėjimo algoritmai
Kliūčių apėjimo algoritmas (1) • Priekyje kliūties nėra • M1 – į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Kliūčių apėjimo algoritmas (2) • Kliūtis iš dešinės • M1 – stop / lėtai į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Kliūčių apėjimo algoritmas (3) • Kliūtis iš kairės • M1 – į priekį • M2 – stop / lėtai į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Kliūčių apėjimo algoritmas (4) • Kliūtis tiesiai priešais robotą • M1 – į priekį • M2 – atgal Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Klasikiniai algoritmai • Klasikiniai algoritmai • Klajojimo algoritmai • Kliūčių vengimo algoritmai • Linijos sekimo algoritmai • Sienos sekimo algoritmai • Kelio planavimo algoritmai • „Bug“ algoritmų šeimyna • Labirinto praėjimo algoritmai
Klajojimo (roaming) algoritmai • Kad būtų autonomiškas, robotas turi sugebėti siekdamas savo tikslo (užduočių įvykdymo) pats nuspręsti, kaip aplenkti kliūtis: • vengti kliūčių arba • apeiti kliūtis autonomiškai • Kaip robotas gali išvengti kliūčių: • Apsisukti ir keliauti tolyn nuo kliūties • Pasukti toliau nuo kliūties, bet neapsisukti visiškai • Aplenkti kliūtį ir keliauti toliau ta pačia kryptimi • Jei kliūtis yra mobilus objektas, palaukti kol ji pasitrauks • Aukščiau aprašytų veiksmų kombinacija
Papr. roboto klajojimo algoritmas • Ar kelias roboto priekyje yra laisvas? • Jei laisvas, robotas pajuda į priekį per vieną poziciją • Jei užimtas, robotas pasuka į šoną atsitiktiniu kampu ir tęsia savo kelionę toliau, kol nesutinka kitos kliūties RoamAround: while true // roam forever // move forward until an object is found while rFeel( )=0 rForward 1 wend // turn 180 degrees plus or minus 30 degrees rTurn 150 + random (60) wend Return
Roboto klajojimo algoritmas su krypties patikrinimu • Trūkumas: robotas gali įstrigti tarp dviejų kliūčių • Patobulinimas: prieš posūkį patikrinti, ar naujoje roboto trajektorijoje nėra kliūčių ir sukti tik laisva kryptimi RoamAround: while true // forward until an object is found while rFeel( )=0 rForward 1 wend // try to intelligently turn away from the object if rFeel()&Right then Ta = -45 // object on right,turn left if rFeel()&Left then Ta = 45 // object on left,turn right if rFeel()&Front then Ta = 160 // object infront,turn around // turn Ta deg plus a random amount no more than 40 deg rTurn Ta+random(40)*sign(Ta) wend Return
Reaktyvioji klajojimo architektūra Šaltinis: RF Guedes, LP Reis, A Sousa. Efficient Robotics using the Lego NXT Platform and Net
Klasikiniai algoritmai • Klasikiniai algoritmai • Klajojimo algoritmai • Kliūčių vengimo algoritmai • Linijos sekimo algoritmai • Sienos sekimo algoritmai • Kelio planavimo algoritmai • „Bug“ algoritmų šeimyna • Labirinto praėjimo algoritmai
Linijos sekimo algoritmas (1) • Linija yra tiesiai po robotu • M1 – į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Linijos sekimo algoritmas (2) • Linija yra į dešinę nuo roboto • M1 – į priekį • M2 – nejuda / lėtai į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Linijos sekimo algoritmas (3) • Linija yra į kairę nuo roboto • M1 – nejuda / lėtai į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Linijos sekimo algoritmas (4) • Linija staigiai suka į dešinę • M1 – į priekį • M2 – atgal Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Linijos sekimo algoritmas (5) • Linija staigiai suka į kairę • M1 – atgal • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Linijos sekimo algoritmas • Linijos sekimas naudinga, kai robotui reikia pateikti iš vieno taško į kitą be jokių kliūčių savo kelyje • Galima išvengti sudėtingo kliūčių vengimo algoritmo programavimo • Robotas gali sekti ant grindų nupieštą liniją • Tarkime, kad robotas turi 3 jutiklius: • vienas yra sumontuotas tiesiogiai roboto priekyje • kiti 2 yra sumontuoti į kairę ir į dešinę nuo pirmojo jutiklio • Jutiklių gražinamos reikšmės yra išvardintos žemiau a = rSense( ) if a & 1 then right sensor sees the line if a = 4 then only the left sensor sees the line if a & 6 then left OR middle OR both sensors see the line if a true then any sensor sees the line if (a = 2) then only the middle sensor sees the line if a & 7 then any sensor sees the line if a = 7 then ALL the sensors see the line
Paprasčiausias linijos sekimo algoritmas • Sekama beveik tiesia linija FollowLine: while true if rSense() & 1 then rTurn 1 // right if rSense() & 4 then rTurn -1 // left rForward 1 wend Return
Patobulintas linijos sekimo algoritmas su jutiklių tikrinimu • Roboto jutikliai nuolat tikrina, ar robotas seka liniją • Tik jei jutikliai nemato linijos 50 kartų iš eilės, robotas sustoja FollowLine: c=0 while c<50 //exit loop if line is not seen for 50 tries if rSense() & 1 then rTurn 1 // right if rSense() & 4 then rTurn -1 // left rForward 1 if rSense() // if any sensor sees the line c = 0 // start the counter over else c = c + 1 // increment counter if no line is seen endif wend Return
Patobulintas linijos sekimo algoritmas • Tačiau ir pastarasis algoritmas veikia blogai, jei linijoje yra staigių posūkių, ty jei linija pasisuka staigiau negu gali suktis robotas • Tada robotas prašoka posūkį, juda toliau ir jau negali aptikti linijos • Galimi du sprendimai: • 1) toliau suktis tol, kol vėl bus aptikta linija; • 2) prisiminti kelią, kuriuo būtų galima grįžti atgal
Linijos sekimo algoritmas su posūkių kartojimu staigiuose linijos posūkiuose • Robotas toliau sukasi, kol vėl bus aptikta linija • Trūkumas: robotas staigiuose posūkiuose bus lėtesnis, nes turės atlikti daugiau posūkių FollowLine: while true rForward 1 while rSense() & 1 // right rTurn 1 wend while rSense() & 4 // left return -1 wend wend Return
Linijos sekimo algoritmas su grįžimu • Robotas judės greičiau, bet kartais (linijos pametimo atveju) turės sugrįžti atgal • Kadangi, jo jutikliai jau negali sekti linijos, robotas nežino, kur reikia sukti toliau, todėl jis grįžta keliu, kurį įsiminė • Tačiau, tai gali būti nesaugu, nes robotas judės nepažymėta trajektorija
Linijos sekimo algoritmas su grįžimu • Jei visi jutikliai neaptinka linijos, grįžtama kryptimi, priešingai paskutinio posūkio krypties reikšmei • Robotui kiekviename linijos posūkyje pakanka tik 1 posūkio, tačiau linijos pametimo atveju reikia atlikti 3 posūkius • Jei linija pasisuka > 90º, robotas vis tiek gali pamesti liniją FollowLine: while true if rSense() & 1 rTurn 1 LastTurn = 1 //remember which direction we WERE turning endif if rSense() & 4 rTurn -1 LastTurn = -1 // remember which direction we WERE turning endif rForward 2 // move forward twice if rSense()=0 rTurn 3*LastTurn // if we lose the line make a BIG endif // turn back towards it wend Return
Patobulintas linijos sekimo algoritmas staigiems linijos posūkiams įveikti FollowLine: while true rForward 1 if rSense() = 3 rForward 20 //move the centre over the corner while rSense() = 0 rTurn 1 //turn back to the line wend endif if rSense() = 6 rForward 20 //move the centre over the corner while rSense() = 0 rTurn -1 //turn back to the line wend endif //-- reposition over the line while rSense() & 1 rTurn 1 wend while rSense() & 4 return -1 wend wend Return
Linijos sekimo algoritmų palyginimas (1) • Algoritmas 1 – FOLLOW GRAY • Algoritmas 2 – ONE INSIDE • Algoritmas 3 – ONE BOUNCE • Algoritmas 4 – STRADDLE • Algoritmas 5 – TWO INSIDE • Algoritmas 6 – TWO BOUNCE Šaltinis: JA Gray Toeing the Line: Experiments with Line-following Algorithms
Linijos sekimo algoritmų palyginimas (2) • Algoritmas: FOLLOW GRAY • Robotas seka linijos kraštą: • Jei aptinka „pilka“, robotas važiuoja tiesiai • Jei aptinka „juoda“, suka į kairę • Jei aptinka „balta“, suka į dešinę • Jutikliai: 1 priekyje Šaltinis: JA Gray Toeing the Line: Experiments with Line-following Algorithms
Linijos sekimo algoritmų palyginimas (3) • Algoritmas: ONE INSIDE • Robotas juda zigzagu išilgai linijos ir kartoja: • Suka į kairę, kol aptinka „balta“ • Suka į dešinę, kol aptinka „juoda“ ir vėl „balta“ • Suka į kairę, kol aptinka „balta“ ir vėl „juoda“ • Jutikliai: 1 priekyje Šaltinis: JA Gray Toeing the Line: Experiments with Line-following Algorithms
Linijos sekimo algoritmų palyginimas (4) • Algoritmas: ONE BOUNCE • Robotas „atšoka“ nuo linijos krašto • Kartoja: • Suka į kairę, kol aptinka „balta“ • Suka į dešinę, kol aptinka „juoda“ • Jutikliai: 1 priekyje Šaltinis: JA Gray Toeing the Line: Experiments with Line-following Algorithms
Linijos sekimo algoritmų palyginimas (5) • Algoritmas: STRADDLE • Jutikliai išdėstomi linijos šonuose • Jei abu jutikliai rodo „balta“, robotas važiuoja tiesiai • Jei kairysis jutiklis rodo „juoda“, robotas suka į kairę • Jei dešinysis jutiklis rodo „juoda“, robotas suka į dešinę • Jutikliai: 2 priekyje Šaltinis: JA Gray Toeing the Line: Experiments with Line-following Algorithms
Linijos sekimo algoritmų palyginimas (6) • Algoritmas: TWO INSIDE • Jutikliai išdėstyti linijos viduje • Jei abu jutikliai rodo „juoda“, robotas važiuoja tiesiai • Jei kairysis jutiklis rodo „balta“, robotas suka į dešinę • Jei dešinysis jutiklis rodo „balta“, robotas suka į kairę • Jutikliai: 2 priekyje Šaltinis: JA Gray Toeing the Line: Experiments with Line-following Algorithms
Linijos sekimo algoritmų palyginimas (7) • Algoritmas: TWO BOUNCE • Robotas atšoko nuo linijos krašto • Suka į dešinę, kol priekinis jutiklis aptinka „balta“ • Suka į kairę stovėdamas vietoje, kol užpakalinis jutiklis aptinka „juoda“ • Suka į dešinę, kol priekinis jutiklis aptinka „juoda“ ir t.t. • Jutikliai: 2(1 – priekyje, 1 - gale) Šaltinis: JA Gray Toeing the Line: Experiments with Line-following Algorithms
Linijos sekimo algoritmų palyginimas (8) Šaltinis: JA Gray Toeing the Line: Experiments with Line-following Algorithms
Sudėtingesnė problema • Linijos sekimas, kai yra susikertančių linijų (t.y. sankryžos) • Reikia daugiau jutiklių
Klasikiniai algoritmai • Klasikiniai algoritmai • Klajojimo algoritmai • Kliūčių vengimo algoritmai • Linijos sekimo algoritmai • Sienos sekimo algoritmai • Kelio planavimo algoritmai • „Bug“ algoritmų šeimyna • Labirinto praėjimo algoritmai
Sienos sekimo algoritmas • Roboto užduotis yra sekti objekto kontūrą • Jei robotas aptinka savo judėjimo kelyje objektą, jis gali keliauti aplink objektą judėdamas jo perimetru
Sienos sekimas (1) • Robotas yra lygiagretus sienai • M1 – į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Sienos sekimas (2) • Robotas juda tolyn nuo sienos • M1 – į priekį • M2 – stop / lėtai į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Sienos sekimas (3) • Robotas artėja prie sienos • M1 – stop / lėtai į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Sienos sekimas (4) • Robotas yra per arti sienos • M1 – stop / lėtai į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/
Paprasčiausias sienos sekimo algoritmas • Trūkumai: • robotas juda lankais vietoje to, kad judėtų lygiagrečiai sienos • robotas atsitrenkia į sieną esant pirmam staigiam jos posūkiui FollowWall: while true // anything on right makes you turn left while rFeel() & 3 rTurn -1 wend rForward 1 rTurn 1 wend Return
Patobulintas sienos sekimo algoritmas FollowWall: if TurnDir > 0 FN = 6 else FN = 12 endif while true while (rFeel()&FN) or (rBumper()&4) // if bumper detects a wall rTurn -TurnDir wend rForward 1 rTurn TurnDir wend Return
Draudžiamų zonų vengimas • Tikslas: • robotas turi būti (arba vengti) tam tikroje zonoje, kuri neapribota sienomis arba kitokiais barjerais • Robotas gali judėti laisvai, turi sugebėti apeiti kliūtis • Galimi sprendimai: • nubrėžtos linijos, • infraraudonųjų spindulių barjeras, • palaidotas elektros laidas, kuriuos galėtų aptikti roboto jutikliai; • GPS koordinatės ir GPS imtuvas
Klasikiniai algoritmai • Klasikiniai algoritmai • Klajojimo algoritmai • Kliūčių vengimo algoritmai • Linijos sekimo algoritmai • Sienos sekimo algoritmai • Kelio planavimo algoritmai • „Bug“ algoritmų šeimyna • Labirinto praėjimo algoritmai
Kelio planavimo algoritmai • HD-I • Ave • VisBug-21 • VisBug-22 • WedgeBug • CautiousBug • 3DBug • Angulus • Optim-Bug • UncertainBug • SensBug • K-Bug • ABUG • T2 • Bug-0 • Bug1 • Bug2 • Alg1 • Alg2 • DistBug • TangentBug • Class1 • Rev1 • Rev2
Pradžia Pabaiga Problema Laisva erdvė kliūtis kelias kliūtis kliūtis
Lumelsky „Bug“algoritmai • Prielaidos: • Pasaulis yra dvimatė plokštuma • Žinoma kelio pradžia ir pabaiga • Kliūtys nežinomos • Robotas modeliuojamas kaip taškas plokštumoje • Robotas žino savo padėtį • Naudojami paprasti susidūrimo jutikliai • Robotas gali suktis bet kuria kryptimi • Motion is like an ant walking around: • In Bug 1 the robot goes all the way around each obstacle encountered, recording the point nearest the goal, then goes around again to leave the obstacle from that point • In Bug 2 the robot goes around each obstacle encountered until it can continue on its previous path toward the goal
Pabaiga Pradžia Bug-0 Algoritmas Kartoti: • Eiti link tikslo • Jei pasiektas tikslas, sustoti • Jei kliūtis – sekti kliūties kraštu į kairę tol, kol vėl galima eiti link tikslo 2 1 3 1 3 1