Skocz do zawartości

Robot z pamięcią.


samuraj22

Pomocna odpowiedź

Niestety to nie jest dobre rozwiązanie ponieważ musiałbyś mieć bardzo dokładny czujnik położenia powiązany z mapą toru zrobioną np w pierwszym przejeździe. Wierz mi, że najszybsze linefollowery nie mają żadnej pamięci do przechowywania informacji o torze z wcześniejszego przejazdu.

Link do komentarza
Share on other sites

Dodatkowe utrudnienie zamiast pomagać przeszkadzało by w pokonaniu toru..

1. O ile błędy w odczycie lini przez czujniki można przeboleć (jak 1 nie złapie to kolejny itd) to w Twoim rozwiązaniu nie masz 100% ze odczyt położenia robota jest poprawny .. (np poprzez zliczanie obrotów kół)

2. zawsze mógłbyś porównywać stan w pamięci z aktualnym stanem ( ten sam zakręt = podobnie czujniki wyłapują) ale skoro i tak jedziesz na czujnikach to po co dodatkowo męczyć uC pamięcią ?

... pomysł ciekawy ale nie praktyczny, choć każdy nawet najgorszy pomysł zasługuje na pochwałę ;] Myśl dalej.

Link do komentarza
Share on other sites

Niestety koledzy, ale nie zgadzam się z wami.

Istnieją algorytmy uczące się i co do efektywności, są nieporównanie szybsze od prostych algorytmów nadążnych (czyli takich które bazują na minimalizowaniu błędu).

Prosty przykład:

http://noolmusic.com/google_videos/fastest_line_follower.php

Algorytmy tego typu są dość trudne do pisania, ale bez wątpienia stanowią przyszłość linefollowera.

Inną ciekawą dziedziną algorytmów, które dobrze nadawałyby się do takiego celu, są algorytmy predykcyjne - również bazują na błędzie, ale starają się "przewidzieć" promień skrętu i nie trzymają się sztywno pomiarów w czujników, dopuszczają pewne błędy.

Zastosowałem w swoim prostym LF silniki które mają olbrzymi zapas prędkości, uwierzcie mi że na prostym regulatorze P (stosowany w większości obecnych robotów) wszystko było dobrze do 20% prędkości maksymalnej, potem już wężyk i w końcu utrata linii. Przy PID udało mi się dojść prawie do 40% prędkości, potem pojawiały się przeregulowania i koniec zabawy :]

Przy bardziej zaawansowanych algorytmach dałoby się wyciągnąć znacznie wyższe prędkości...

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

Twój pomysł jest kapitalny i nowatorski(jak na polskie realia), szczególnie interesująco dla mnie zapowiada się budowanie mapy trasy. Czy masz już jakieś pierwsze pomysły? Będe cię dopingował, nie odpuszczaj zbyt łatwo. Tak trzymać.

Link do komentarza
Share on other sites

Na wstępie chciałem wszystkich przywitać, jako że to mój pierwszy post na tym forum 🙂

Co do tematu wydaje mi się, że algorytm linefollowera pokazanego na filmiku nie musiał być wcale skomplikowany. Pewnie każdy zauważył znaczniki przed zakrętami oraz na końcu zakrętów i "pipkanie" robota w tych miejscach.

Ja bym ten algorytm spróbował zrobić tak:

przy przejeździe kiedy robot się uczy

1) ustaw licznik segmentów A na 0; ustaw licznik zmian kierunków B na 0

2) jazda ze zliczaniem zmian kierunków

3) Czy jest znacznik (piknięcie)?

TAK -> {

zwiększ licznik segmentów A o jeden;

Czy licznik zmian kierunku B < X?

{ TAK -> ustaw predkosc dla segmentu(A) na wysokąl jeżeli NIE -> ustaw prędkość dla segmentu(A) na niską }

ustaw licznik zmian kierunków B na 0 i idz do punktu 2)

}

NIE -> idz do punktu 2)

4) koniec przejazdu zapoznawczego

w kwestii uwag, jako "zliczanie zmian kierunków" można by liczyć bezwzględną różnicę między obrotami prawego i lewego koła napędu lub coś w tym rodzaju. Im większa liczba na końcu segmentu tym bardziej "zakrętaśny" kawałek trasy i trzeba wolniej jechać.

Nie uwzględniłem też sposobu w jai robot miałby stwierdzić, że zrobił już pełne okrążenie, ale to taki szablon bardzo poglądowy 🙂

przy przejeździe na szybko

1) ustaw licznik segmentów A na 1

2) ustaw aktualną prędkość na zapamiętaną prędkość dla segmentu (A)

3) jedz z zadaną prędkością

4) czy jest znacznik (piknięcie)?

TAK-> zwiększ licznik segmentów o jeden i sprawdz czy to nie ostatni segment?

TAK -> idz do punktu 5) jeżeli NIE -> idź do punktu 2)

NIE -> idz do punktu 3)

5) silniki stop 🙂

Wiem, że to duże uproszczenie ponieważ robot powinien zliczać jeszcze drogę i zwolnić przed samym zakrętem aby z niego nie wypaść. Myślę, że robot ustala swój kierunek jazdy podczas szybkiego przejazdu tradycyjnie za pomocą czujników a zapamiętaniu podlega jedynie informacja gdzie może się rozpędzić bez obawy o zgubienie ścieżki.

Nie znam się na robotyce jako takiej, to moje początki jednak kiedyś coś tam programowałem i algorytmy jako takie nie są mi obce, tak że chętnie posłucham jak inni z Was by to zrealizowali.

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

Taki algorytm można zrobić, bez żadnych znaczników na zakrętach. Robot mając zaznaczony punkt startowy przejeżdża trasę z niewielką prędkością zapisując informacje o zakrętach. Następnie po przejechaniu linii startu robot może sprawdzać jaki zakręt go czeka i dostosować maksymalną prędkość przed zakrętem. Ten algorytm na pewno pozwoli pokonać trasę znacznie szybciej niż na samych czujnikach.

Link do komentarza
Share on other sites

Znaczniki na pewno pomagają, niestety uślizg kól z pewnością występuje i nie da się pominąć błędu jaki z tego wynika... ale faktycznie robot może zapamiętać samą sekwencję zakrętów i na podstawie tego dostosowywać prędkość, choć będzie to pewnie już mniej optymelne roziązanie.

Link do komentarza
Share on other sites

Witam, to mój chyba pierwszy post na forum.

Temat widzę trochę już stary, ale też wpadłem niedawno na ten filmik kilka postó wyżej. Zastanawiam się czy da się zrobić takiego robocika używając samych czujników odbiciowych plus jakiś niezbyt skomplikowany program w C. Myślałem o umieszczeniu jakoś czujników żeby rozpoznać czy się jedzie po prostej czy po zakręcie, ale wszystkie pomysły udało mi sie obalić.... Myślałem o liczeniu przebytej drogi przez oba silniczki. W ten sposób że jeśli silnik się bedzie poruszał po zakręcie to jedno kółko przejedzie dłuższą drogę niż drugie, ale trzeba by to było liczyć chyba bardzo dokładnie. Czy ktoś ma może jakiś sprawdzony pomysł albo jakikolwiek inny pomysł ?

Link do komentarza
Share on other sites

Przerabiałem zliczanie odległości na podstawie danych z silników, niestety nie zdaje to egzaminu. Pomysł z predykcją jest bardzo fajny, wystarczy mieć tylko odpowiednio szybki mikrokontroler, który pozwoli na bardzo szybkie zbieranie informacji z czujnikow, do tego bardzo duża ilość czujników (czyjniki ściśle przylegające do siebie).

Niestety jeszcze dużo projektów bazuje na kopiowaniu istniejących rozwiązań.

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.