1 / 79

Robotų programavimo technologijos

Robotų programavimo technologijos. T125B114 2012 m Robertas Damaševičius r obertasdamasevicius @ktult. Klasikiniai robotų valdymo algoritmai. Klasikiniai algoritmai. Klasikiniai algoritmai Klajojimo algoritmai Kliūčių vengimo algoritmai Linijos sekimo algoritmai

carlow
Télécharger la présentation

Robotų programavimo technologijos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Robotų programavimo technologijos T125B114 2012 m Robertas Damaševičius robertasdamasevicius@ktult

  2. Klasikiniai robotų valdymo algoritmai

  3. 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

  4. 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

  5. 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

  6. 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()&3 then Ta = -45 // object on right,turn left if rFeel()&24 then Ta = 45 // object on left,turn right if rFeel()&4 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

  7. Reaktyvioji klajojimo architektūra Šaltinis: RF Guedes, LP Reis, A Sousa Efficient Robotics using the Lego NXT Platform and Net

  8. 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

  9. Kliūčių apėjimo algoritmas (1) • Priekyje kliūties nėra • M1 – į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/

  10. 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/

  11. 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/

  12. Kliūčių apėjimo algoritmas (4) • Kliūtis tiesiai priešais robotą • M1 – į priekį • M2 – atgal Šaltinis: http://www.mlees-robotronics.in/home/robotics/

  13. 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

  14. Linijos sekimo algoritmas (1) • Linija yra tiesiai po robotu • M1 – į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/

  15. 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/

  16. Linijos sekimo algoritmas (3) • Linija yra į kairę nuo roboto • M1 – nejuda / lėtai į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/

  17. Linijos sekimo algoritmas (4) • Linija staigiai suka į dešinę • M1 – į priekį • M2 – atgal Šaltinis: http://www.mlees-robotronics.in/home/robotics/

  18. Linijos sekimo algoritmas (5) • Linija staigiai suka į kairę • M1 – atgal • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/

  19. 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

  20. Paprasčiausias linijos sekimo algoritmas • Sekama beveik tiesia linija FollowLine: while true if rSense() & 1 then rTurn 1 if rSense() & 4 then rTurn -1 rForward 1 wend Return

  21. 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 if rSense() & 4 then rTurn -1 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

  22. 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

  23. 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 rTurn 1 wend while rSense() & 4 return -1 wend wend Return

  24. 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

  25. 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

  26. 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

  27. 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

  28. 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

  29. 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

  30. 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

  31. 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

  32. 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

  33. 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

  34. Linijos sekimo algoritmų palyginimas (8) Šaltinis: JA Gray Toeing the Line: Experiments with Line-following Algorithms

  35. Sudėtingesnė problema • Linijos sekimas, kai yra susikertančių linijų (t.y. sankryžos) • Reikia daugiau jutiklių

  36. 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

  37. 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

  38. Sienos sekimas (1) • Robotas yra lygiagretus sienai • M1 – į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/

  39. Sienos sekimas (2) • Robotas juda tolyn nuo sienos • M1 – į priekį • M2 – stop / lėtai į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/

  40. Sienos sekimas (3) • Robotas artėja prie sienos • M1 – stop / lėtai į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/

  41. Sienos sekimas (4) • Robotas yra per arti sienos • M1 – stop / lėtai į priekį • M2 – į priekį Šaltinis: http://www.mlees-robotronics.in/home/robotics/

  42. Realizacija P valdikliu

  43. 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

  44. 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

  45. 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

  46. 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

  47. 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

  48. Pradžia Pabaiga Problema Laisva erdvė kliūtis kelias kliūtis kliūtis

  49. 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

  50. 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

More Related