Skocz do zawartości

[Linefollower] Trzewikodziób


Pomocna odpowiedź

Przyspieszyłem robota jeszcze troszkę, teraz dobrze sobie radzi z prędkością 0.75 m/s, potem zaczyna się ślizgać, co widać na filmie. Można go również zatrzymać pilotem, gorzej ze startem, bo nie wiem jakie kodowanie ma mój pilot, więc odbiornik wychwytuje tylko 36kHz i wysyła sygnał do mikrokontrolera 😋 . Zmieniłem jeszcze ledy pod spodem robota 😃 .

Do zrobienia:

Zamówiłem koła u Trekera i dorobię jakieś oponki z silikonu, żeby zwiększyć przyczepność.

Uruchomię czujnik do LF Enhanced i spróbuję zdążyć przygotować go do tej kategorii na Robomaticon.

Muszę zmniejszyć rozdzielczość enkoderów, bo procesor się zaczyna nie wyrabiać z przerwaniami 😋 . Próbowałem zamiast wywoływać przerwanie na zboczach opadających i rosnących robić tylko na rosnących. Powinno to działać mniej więcej tak samo: jak są przerwania naprzemiennie, to jedzie prosto, jak któreś wystąpi dwa razy to zmiana kierunku. Oczywiście odległość można liczyć tylko na podstawie jednego kanału np. A, bo drugie przerwanie nie występowałoby w połowie kąta (pomiędzy dwoma przerwaniami od A) tylko w 1/4. Niestety robot głupieje mi przy takich ustawieniach, w ogóle nie potrafi określić, w którą stroną się kręcą koła. Czy to jest dobre podejście i mam coś złego w kodzie, czy ten tok rozumowania jest zły?

Link do komentarza
Share on other sites

Ja tylko doradzę, abyś zmienił podłoże do testów. Parkiet nie jest równy i gładki. Wyregulujesz sobie robota, a na zawodach, gdy będą płyty/banner konstrukcja kompletnie sobie nie będzie radziła.

Link do komentarza
Share on other sites

Robot normalnym algorytmem potrafi już jechać dobrze z prędkością 1m/s. Jednak postanowiłem zrobić w nim coś, czego jeszcze nie widziałem na tym forum, mianowicie Trzewikodziób potrafi teraz samemu się nauczyć, jak optymalnie jeździć po linii 😃 . Wykorzystałem typ uczenia maszynowego o nazwie Reinforcement Learning. Ten typ uczenia opiera się mniej więcej na tym jak uczą się zwierzęta oraz człowiek: robot dostaje "nagrody" i "kary" za akcje, które wykonuje i stany, w jakich jest. Jego celem jest zmaksymalizowanie "nagrody" jaką dostanie przez cały czas trwania programu. Nagrodę dostaje tym większą, im szybciej jedzie i im bliżej jest środka linii, jeśli wypadnie dostaje cały czas taką samą karę. Ma 10 ustalonych prędkości na silnik, jedna do tył, jedna na zatrzymanie, 8 do przodu. Musi "wymyślić", jakie prędkości silników ustawiać, aby jechać jak najszybciej i jak najdokładniej po linii. Wychodzi mu to całkiem nieźle, jak widać na filmiku poniżej po kilku minutach potrafi utrzymać się na linii, gdyby uczył się dłużej powinien jechać lepiej. Na dzień dzisiejszy nie zwojuje niczego na zawodach, ale zrobiłem to głównie dlatego, żeby wykorzystać ten algorytm w praktyce i potrafić go użyć w innych konstrukcjach, które może za niedługo zrobię 🙂 .

  • Lubię! 1
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

Tak, ale należałoby go uczyć na jakiejś neutralnej z taką samą ilością zakrętów w lewo i prawo. Jeśli na zawodach miałoby się dowolną ilość przejazdów to mógłby się nauczyć na konkretną trasę i np. w lewo skręcałby szybciej niż w prawo.

Link do komentarza
Share on other sites

Wojcik98, bardzo ciekawa sprawa. Bazowałeś na jakiś gotowych algorytmach, czy pisałeś wszystko od zera? Rozumiem, że jest to tzw. uczenie z krytykiem, bo nie podajesz robotowi informacji o poprawnej odpowiedzi, gdy się pomyli (tak jak w uczeniu z nauczycielem), tak?

Link do komentarza
Share on other sites

Treker, tak, bazowałem na algorytmach z książki "Reinforcement Learning: An Introduction". Jak popatrzyłem na to uczenie z krytykiem, to to jest raczej to samo, po prostu nie wiedziałem, jak się to po polsku nazywa 😃 . Robot dostaje tylko nagrody, nie dowiaduje się bezpośrednio, jakie akcje powinien wykonywać.

Link do komentarza
Share on other sites

Wojcik98, masz jakieś plany na rozwijanie systemu? Kiedyś chciałem zrobić coś podobnego, ale ostatecznie zabrakło czasu. Planowałem wykonać łagodną, zamkniętą trasę z ręcznie dostrojonym PIDem.

"Uczenie" miało polegać na przekazywaniu do robota informacji o czasie jaki poświęcił na jedno okrążenie. Po każdym przejeździe mógłby regulować wyżej wspomniane nastawy PID. Oczywiście nagrody byłyby przyznawane za najszybsze przejazdy.

Link do komentarza
Share on other sites

Treker, rozwijania tego w sumie nie planowałem. Chciałem to uczenie przetestować, sprawdzić w praktyce, a że miałem linefollowera pod ręką to spróbowałem z tym 😃 . W przyszłości zrobię może jakiegoś robota balansującego, można by też było sprawdzić, jak to zadziała w *sumo. Ustawianie nastaw w PIDzie jest chyba nawet lepszym pomysłem od uczenia się prędkości dla każdej pozycji, spróbuję może kiedyś to zrobić. Nagrody mogłyby być dawane dla każdego przejazdu, proporcjonalnie do prędkości robota.

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.