Skocz do zawartości

Ogólnie o robotach MicroMouse


Pomocna odpowiedź

Jako filtr sprawdza się prosta funkcja uśredniająca kilka kolejnych pomiarów. Mówisz o widocznych oscylacjach podczas jazdy robota czy o oscylacjach widocznych tylko na wykresie prędkości?

  • 3 tygodnie później...

U mnie małe kroczki do przodu, ale ostatnie zwarcie spowodowało wariowanie enkoderów i nie działa to tak jak bym chciał. Poza tym, tego MM'a będę traktował jako platformę testową - dużo się na nim nauczyłem. Następny już w planach 🙂 w międzyczasie na tym będę rozwijał sofcik. To filmik sprzed tygodnia:

https://www.youtube.com/watch?v=4tFvjAZhlAs&feature=youtu.be

Obecnie jestem na etapipe rozwiązywania labiryntu i stopless run'a

Cieszę się, że robot jeździ już po labiryncie 😉 Na jakie zawody w tym roku się wybierasz?

Ja ostatnio siedzę nad kodem mojego MM, po niecałych 5 miesiącach przerwy 😉

Obiecałem kilka postów wcześniej, że sprawdzę w jakim czasie Rapid pokona labirynt z All Japan 2008. Teoretycznie zajmie mu to 8s, z prędkościami z którymi w miarę bezpiecznie porusza się po labiryncie testowym. Poniżej trasa którą wybrał Rapid 😉

Jazdy po skosie nie mam jeszcze do końca zaimplementowanej, mam nadzieję, że skończę do najbliższych zawodów. Wagi z którymi są wybierane trasy speedrun'ów są wymyślone, jedyne co można powiedzieć to preferowane są trasy z mniejszą ilością zakrętów.

Co nowego słychać u pozostałych konstruktorów MM? 😉

Obiecałem kilka postów wcześniej, że sprawdzę w jakim czasie Rapid pokona labirynt z All Japan 2008. Teoretycznie zajmie mu to 8s, z prędkościami z którymi w miarę bezpiecznie porusza się po labiryncie testowym. Poniżej trasa którą wybrał Rapid 😉

Obrazek

Jazdy po skosie nie mam jeszcze do końca zaimplementowanej, mam nadzieję, że skończę do najbliższych zawodów. Wagi z którymi są wybierane trasy speedrun'ów są wymyślone, jedyne co można powiedzieć to preferowane są trasy z mniejszą ilością zakrętów.

Co nowego słychać u pozostałych konstruktorów MM? 😉

Octave?🙂

Jak symulujesz że to właśnie rapid? Ja ciągle nie mam pomysłu jak model rozszerzyć o bezwładności związane z rozkładem masy robota(choćby przybliżonego). Jaki tam działa algorytm jazdy? profilowanie wrzuciłeś do octavy? Chciało Ci sie?😋 Zauważyłem że każdy zakręt 90' zamieniasz na diagonalę, podczas gdy w niektórych miejscach ewidentnie nie przejedziesz:P Ale chwała że Ci się chciało 😋

Ja z każdym dniem uczę się nowych rzeczy i patrzę jak błędy które popełniłem oddziałują na robota. Następny powinien już w miarę rozsądnie jeździć. Wiem że niektórych błędów nie uda mi się wyeliminować z tym robotem, ale co mogę to porobię 😉

Przez ostatnie dwa tygodnie wyodrębniłem kod związany czysto z prockiem (konfiguracja, timery, adc) i kod odpowiedzialny za jazdę robota - czyli na niższe i wyższe warstwy. Kod jest napisany w C, więc niskie warstwy symuluję i odpalam wyższe warstwy kodu na kompie. Do tego zapisuję pozycję w pliku i mogę wyświetlać dane w octave. Stwierdziłem, że na dłuższą metę opłaci mi się taki "symulator" do efektywniejszego rozwijania i debugowania algorytmu robota. Narazie nie symuluję żadnych szumów pomiarowych czy dynamiki robota, może kiedyś 😋 Teoretycznie Rapid powinien jechać po ścieżce którą wygenerowałem - dojdą tylko poślizgi, jakieś błędy związane z szumami na czujnikach. Czas powinien być bardzo zbliżony.

Wskaż mi proszę miejsca których robot nie przejedzie, nie widzę takich 😉 Robota testowałem już z jazdą po skosie, ale na mniejszych prędkościach i bez wyrównywania do ścian. Poniżej filmik.

mog123, nie rozumiem tej zamiany kątów 90 stopni na diagonale. Możesz wyjaśnić o co chodzi? 😉 Mówisz o błędach w mechanice czy elektronice robota?

Czy bardziej doświadczeni zawodnicy mogliby napisać jakich algorytmów używają do sterowania swoich myszy? Regulator PD, znajdywanie najkrótszej ścieżki, kalibracja prawo/lewo względem ścian mam zrobione, ale nie wiem za bardzo kiedy kazać myszy skręcać. Na razie mam zrobione to "na sztywno", czyli coś takiego:

while(aktualna_odległość_od_ściany!=żądana_odległość_od_ściany)jedź_dalej();
skręt = skręt (+/-) 90°;
while(akt_kąt!=żądany_kąt)skręcaj();
jedź_dalej();

Bardzo bym prosił o algorytmy w pseudokodzie i/lub krokach i/lub nazwy algorytmów z linkami i/lub książki, ponieważ nie wierzę, że w innych konstrukcjach jest to zrobione tak jak u mnie 😋.

W głównym kodzie programu jest coś podobnego jak napisałeś - czekamy aż dojedziemy do zadanej pozycji. Przez cały czas działa timer wywołujący cyklicznie przerwanie. W funkcji obsługi przerwania działa profil sterowania prędkością (w prostych konstrukcjach można go EWENTUALNIE pominąć) - [Programowanie] Sterowanie robotem mobilnym klasy (2,0). Z podstawowych funkcji w MM w przerwaniu są także pobierane dane z czujników, działa regulator silników oraz wyrównywanie do ścian (np. PD).

Pseudokod searchrun'a z zatrzymywaniem się na każdym polu:

jedz_do_przodu();
while (nie_znalazlem_srodka) {
 while (aktualna_pozycja != pozycja_do_wykrywania_scian)
   ;
 zapisz_wykryte_sciany();
 while (aktualna_pozycja != srodek_nastepnej_komorki)
   ;
 zatrzymaj_sie();
 wyszukaj_najkrotsza_sciezke_do_srodka();
 switch (wybrany_kierunek) {
   case LEWO: skrec_90_w_lewo(); break;
   case PRAWO: skrec_90_w_prawo(); break;
   case ZAWROC: skrec_180(); break;
   case PROSTO: break;
 }
 jedz_do_przodu();
}

Podany pseudokod można rozszerzyć do przeszukiwania bez zatrzymywania się. Należy uaktualniać pozycję do której dążymy i w odpowiednim miejscu w labiryncie wywoływać funkcję skrec_90_w_lewo/prawo.

  • Lubię! 1
  • 3 tygodnie później...

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