Pokazany w poprzednim wpisie filmik obrazował jak wyrobiły się otwory w mocowaniu silnika z drukarki 3D. W sumie można się było tego spodziewać, w końcu te tworzywa nie są super wytrzymałe, a ja używam je już od roku. W końcu postanowiłem je poprawić dodając na górze nakrętki na śruby. Powinienem to zrobić od razu po złożeniu i nie mieć problemów z luzowaniem się mocowań. Wpływały one między innymi na działanie regulatora silnika. W tym wpisie opiszę szczegóły prowadzące do poprawienia dokładności regulacji. Na początek jednak filmik pokazujący końcowy efekt (wartości zadane: 0.5m/s i 90°/s przez 2 sekundy):
Kategoria: Micromouse
Działający regulator i problem z mocowaniem silników
Wprowadziłem zmiany opisane w poprzednim wpisie i wyniki są wręcz niewiarygodne. Testy pokrywają się z obliczeniami teoretycznymi i symulacją! Działanie nowego regulatora ruchu obrotowego możecie obejrzeć na filmiku:
Program testowy po naciśnięciu przycisku przez 2 sekundy podaje wartość zadaną 360 stopni na sekundę, czyli spodziewamy się dwóch obrotów. W rzeczywistości jest trochę mniej, bo robot musi się rozpędzić przy starcie, a poza tym jest pewien problem mechaniczny..
Zmiany w regulatorze prędkości kątowej
Po wyeliminowaniu błędów w PID opisanych w poprzednim artykule, mogłem przejść do kolejnych poprawek w module silników. Moją uwagę przykuł regulator prędkości kątowej. Postanowiłem wprowadzić w nim zmiany, aby zwiększyć precyzję obrotu robota i zwiększyć jego stabilność. Do tej pory zdarzało mi się, że robot się wzbudzał i stojąc w miejscu wykonywał czasem niewielkie skręty.
Błędy w regulatorze silników
Dobry regulator prędkości silników jest niezbędny do nawigacji w labiryncie. Robot powinien być w stanie zarówno robić małe skręty podczas jazdy w celu korekty ustawienia oraz skręty o 45, 90 i 180 stopni podczas eksploracji labiryntu i speed runu. Mój regulator powstał już jakiś czas temu, co opisywałem tu, tu i tu. Strojenie zajęło mi sporo czasu w końcu uzyskałem jakieś sensowne wyniki, jednak miałem wrażenie, że powinno to działać lepiej. Postanowiłem więc jeszcze raz przejrzeć implementację i znalazłem kilka grubych baboli.
Orientacja mapy labiryntu
Dzisiaj opiszę problem orientacji mapy labiryntu, czyli odniesienie mapy do kierunków w przestrzeni i do numeracji pól. Co ciekawe, z początku w ogóle nie zdawałem sobie sprawy, że jest to ważna decyzja projektowa, która może ułatwić lub utrudnić dalsze prace. Po prostu myślałem, że numeracja jest prowadzona w jedyny słuszny sposób wykorzystywany we wszystkich innych dziedzinach. Dopiero później zdałem sobie sprawę, że moja mapa nie jest kompatybilna z narzędziami udostępnianymi w internecie. Dalej również okazało się, że nie jest ona optymalna nawet do moich zastosowań.
Wykrywanie ścian i dodawanie ich do mapy
W dzisiejszym wpisie prześledzimy całą drogę od pomiaru odległości przez czujnik ściany do ostatecznego dodania tej ściany do mapy labiryntu w pamięci robota. Na tej drodze znajduje się wiele akcji pośrednich takich, jak określenie współrzędnych wykrytej ściany, czy potwierdzenie wykrycia w kilku pomiarach.
Wykorzystanie SLAM do Micromouse
Ostatnio mocno pogłębiłem wiedzę dotyczącą algorytmów SLAM. Krótkoterminowym celem jest oczywiście inspiracja przy tworzeniu jak najlepszego sposobu lokalizacji i nawigacji w robocie Micromouse. W dzisiejszym wpisie przedstawię różnice między Micromouse, a typowym problemem SLAM oraz pomysły na implementację będące konsekwencją tych różnic.
Tworzenie mapy labiryntu i wyznaczanie trasy
Głównym zadaniem robota Micromouse jest znajdowanie drogi w labiryncie. Może więc wydawać się dziwne, że siadłem do tego tematu dopiero teraz – po roku od rozpoczęcia prac. Jednak do stworzenia mapy potrzebna jest dobrze działająca lokalizacja i czujniki ścian. Te zagadnienia mam już jako tako opanowane, można więc przejść do wyznaczania trasy. Zrobiłem już pierwszą implementację, która okazała się zaskakująco prosta. Kod oczywiście dostępny jest na GitHubie.
Nowy projekt płytki robota
Podczas próby zamontowania wszystkich czujników ścian okazało się, że aktualny projekt płytki nie przewidywał miejsca na uchwyty z drukarki 3D. Potrzebuję więc zmian w projekcie PCB i nowej wersji płytki. Decyzję ułatwił fakt, że wylała mi się woda na biurko i oczywiście zalała robota. Po osuszeniu nie chciał działać, ale poleżał jeszcze przez noc i teraz się uruchamia normalnie. W każdym razie nowa wersja płytki jest potrzebna. Tym bardziej, że mam jeszcze kilka mniejszych zmian do wprowadzenia. Dzisiaj opiszę planowane zmiany.
Kalibracja czujnika ściany
Czujnik ściany, którego zamontowanie i uruchomienie opisywałem poprzednio, daje pomiary w woltach wyrażonych w jednostkach ADC (zakres 0-4095 odpowiada 0 – 3.3 V). Taka wartość nie jest szczególnie przydatna, dopiero po konwersji na odległość w milimetrach może być wykorzystana do nawigacji w labiryncie.