Skocz do zawartości

Algorytmy mapowania


devonport

Pomocna odpowiedź

Szukam jakichś prostych algorytmów mapowania, jakies proste programy poruszania się robota po szachownicy np. mała tablica 4X4 z wiadomym rozmieszczeniem przeszkód. Najbardziej interesują mnie proste przykłady kodów źródłowych na początek które mógłbym przeanalizować i pogłębić swoją wiedzę. Bo A* to narazie dla mnie zbyt trudne 🙁 . Jak macie coś takiego to podrzucie proszę.

Link do komentarza
Share on other sites

Jeżeli chcesz zastosować to w robocie mobilnym to najpierw trzeba zdać sobie sprawę z innych problemów. Algorytm A z gwiazdką jest jednym z najprostszych. Podobne algorytmy:

- algorytm propagacji fali

- metoda gradientowa

- metoda elastycznej wstęgi

- diagram woronoja

- metody grafu widoczności

- metoda sztucznych pól potencjałowych

Kod źródłowy niewiele da bez znajomości teoretycznej zagadnienia. W załączniku moja prezentacja odnośnie algorytmu A* - powinieneś wykumać o co chodzi.

Chcesz symulować robota na komputerze czy stworzyć fizyczny model? Generalnie o ile same algorytmy nie są trudne, to implementacja w rzeczywistym otoczeniu jest moim zdaniem dobrym tematem na pracę dyplomową...

new.pdf

  • Lubię! 1
Link do komentarza
Share on other sites

No tak przejrzałem sieć no jets tego trochę ale ja myślę żeby zmodyfikować algorytmy szukania drogi wykorzystywane w grach, podpiąć funkcje ruchu robota pod poszczególne kroki np: lewo, prawo, przód. Narazie to tak raczej sie przyglądam a jaki będzie efekt i czy w ogóle jakiś będzie zobaczymy?

Chcę to zastosować w robocie mobilnym, o jakich problemach mianowicie wspominasz?

Może ktoś już wykorzystuje te algorytmy w swoim robocie??

Link do komentarza
Share on other sites

Problem polega na konieczności lokalizacji robota w przestrzeni. Potrzebowałbyś robota który potrafi sam się zlokalizować, albo posiada czujniki umożliwiające dokładny pomiar drogi. Baaaardzo dokładny. No i znajomość sceny (robot musi mieć mapę otoczenia). Nie wiem jak chcesz rozwiązać tego typu problemy.

W grach (tych starszych typu civilization) w większości przypadków korzysta się z A*

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

[ Dodano: 30 Lis 08 10:45 ]

Oto po tygodniu pracy napisałem prosty program mapujący, coś już potrafi ale brakuje np: funkcji cofnij w przypadku dotarcia w ślepy zaułek. Ważne że odczyta z tablicy drogę i potrafi się zatrzymać na punkcie końcowym. Wszystko robione na NXT, z dokładnoscią jest tak sobie ale nie oto tu tak naprawdę chodziło.

Mapa jest podzielona na kwadraty 30x30 cm mniej-więcej tyle potrzeba aby robot swobodnie wykonał manewr na danym polu. Ważne, że robot jezdzi w realnym swiecie przechodzi plansze tak jak ma zapisane w tablicy. Postaram się wrzucić niebawem jakiś filmik z testu robota.

Trzon programu wygląda tak:

  int x; 
int i=5,j=2;// pozycja startowa robota robot powinien stac na srodku kwadratu  zawsze przodem

int tab[6][6]=   //tablica musi zawierac na krancach zera zeby robot nie wyszedl poza tablice
{{0,0,0,0,0,0}, //i=0 nr wiersza
  {0,1,2,1,0,0}, //cyfra 2 poz i=1,j=2 oznacza pole kocowe, robot sie zatrzyma na tym polu
  {0,1,0,1,0,0},//obszar manewrowy dla robota to wlasciwie tablica 4x4
  {0,1,1,1,0,0}, // zera oznaczaja przeszkody
 {0,0,1,0,0,0},
 {0,0,0,0,0,0}};//i=5 nr wiersza, tylko przy starcie robot moze stac na pozycji-"0" 
//j=0,1,2,3,4 5 nr kolumny
task main() 
               //petla 30 razy jak dojdzie do "2" szybciej to i tak sie zatrzyma
for(x=0;x<30;x++) // gorzej gdy nie wyrobi sie w 30 krokach
{ 
	if(tab[i-1][j]>0&&tab[i][j]!=2) {//jesli wolna droga"1" i nie jest to pole koncowe"2" wykonuje sie funkcja prosto
prosto();                  //wywolanie funkcji
i--;} 

else{ 
   if(tab[i][j+1]>0 && tab[i][j-1]>0&&tab[i][j]!=2){ 
    if(random(100) > 50 ){ 
     lewo(); 
     j--;} 
else{ prawo(); 
j++;} 
} 

 else{                            //ten warunek wykonuje sie gdy jest  mozliwosc w prawo
  if(tab[i][j+1]>0&&tab[i][j]!=2){ // robot najpierw czyta pozycje a dopiero skreca
  prawo(); 
j++;} 

else{ 
   if(tab[i][j-1]>0&&tab[i][j]!=2){ 
 lewo(); 
 j--; 
}}}}}}  

robot jezdzi tak

i tak

[ Dodano: 19 Gru 08 05:28 ]

[ Dodano: 19 Gru 08 05:51 ]

Mały programik

To nie jest symulacja komputerowa ruchu robota a wręcz odwrotnie ten program jest produktem ubocznym programu sterującego robotem. Powstał bo nie bardzo mogłem znalezć coś w sieci, są prace teoretyczne, symulacje komputerowe(nie przydatne zbytnio do zastosowania w realu), ale kodu zródłowego jakoś nikt nie udostępnia. Ja też nie udostępnię, ma słabe strony ale można się pobawić programem.

http://wrzutnik.pl/651labirynt.exe

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.