Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję
Znalezionych wyników: 311
Forbot.pl Strona Główna
Autor Wiadomość
  Temat: [Micromouse] Legend
GAndaLF

Odpowiedzi: 3
Wyświetleń: 178

PostForum: Konstrukcje nieukończone   Wysłany: 23-12-2017, 09:38   Temat: [Micromouse] Legend
Enkodery też używam - IE16 do faulhaberów. Już nawet odczułem ból związany z ich za małą rozdzielczością. Przy usuwaniu dryftu żyroskopu drugi pomiar prędkości obrotowej jest właśnie na bazie enkoderów. I różnica 1 ticka przekłada się na dość dużą zmianę prędkości kątowej w stopniach na sekundę przez co musiałem się trochę nagimnastykować z usuwaniem dryftu.
  Temat: [Micromouse] Legend
GAndaLF

Odpowiedzi: 3
Wyświetleń: 178

PostForum: Konstrukcje nieukończone   Wysłany: 23-12-2017, 02:13   Temat: [Micromouse] Legend
Już od dłuższego czasu po godzinach pracuję nad robotem micromouse. Udało mi się osiągnąć już całkiem fajne rezultaty, więc w końcu przyszedł czas, żeby się pochwalić na Forbocie. Kiedyś bardzo wczesna wersja robota miała już tutaj swoje 5 minut grając kolendy na silnikach:



Z tym projektem zająłem również 12 miejsce w konkursie Daj Się Poznać 2017 polegającym na prowadzeniu bloga technicznego i rozwijaniu projektu IT Open Source.

Zamysł był taki, aby stworzyć robota Micromouse, który nie tylko wie w jakiej znajduje się komórce labiryntu, ale określa swoją pozycję co do milimetra używając Filtru Kalmana. Moim celem nie było jak najszybsze stworzenie konstrukcji biorącej udział w zawodach, tylko spokojne dopieszczanie algorytmów sterowania. Projekt rozwijam jako open source, na moim GitHubie można znaleźć aktualny kod źródłowy, schematy w Eagle, czy skrypty symulacji:

https://github.com/ucgosupl/mm_legend_v2

Przy aktualnej wersji robota coś już dłubię prawie od początku tego roku, ale różnie to bywa z czasem. Wcześniej robiłem jakieś prototypy na innym sprzęcie i nie bardzo to wtedy wychodziło. Więcej na ten temat można przeczytać tutaj: http://ucgosu.pl/2017/01/micromouse-podejscie-drugie/

No a teraz do rzeczy.

Mechanika

Robot jeździ na 4 kołach napędzanych dwoma silnikami. Nie ma dodatkowych punktów podparcia, a prześwit to 2mm. To trochę mało, ale nie udało się uzyskać większego przy posiadanych silnikach i oponach. Przy nierównym labiryncie robot może więc polec na łączeniach płyt.

    :arrow: 2 Silniki Faulhaber 1717T006 z enkoderami IE16
    :arrow: 4 koła na felgach z drukarki 3D z oponami Mini-Z
    :arrow: Mocowania silników z drukarki 3D
    :arrow: Zębatka na wale silnika metalowa 10 zębów
    :arrow: Zębatka na feldze plastikowa 40 zębów
    :arrow: PCB jako podwozie robota, wymiary 100x80 mm - daje możliwość jazdy po skosach


Więcej o częściach z drukarki 3D: http://ucgosu.pl/2017/02/mocowania-silnikow-drukarki-3d/

Koła obracają się na śrubach M3, które przechodzą przez mocowanie silników i są dokręcone nakrętką z drugiej strony. Śruba i nakrętka są zalane dużą ilością kleju do gwintów. Po długich walkach udało się w końcu osiągnąć fajne dopasowanie elementów. Koła obracają się bez oporów.







Elektronika

    :arrow: STM32F401RB - 128kB FLASH 64kB RAM
    :arrow: TB6612
    :arrow: moduł MinIMU v5 wpinany na goldpiny
    :arrow: moduł Bluetooth wpinany na goldpiny
    :arrow: ULN2003 do wzmacniania sygnałów na diody
    :arrow: 6 czujników ścian - pary dioda IR, fototranzystor (jeszcze nie wlutowane)
    :arrow: Bateria LiPo 2S 150mAh
    :arrow: Przetwornica ST1S10PHR 7.4V z baterii -> 5V na diody IR
    :arrow: Stabilizator LM1117 5V -> 3.3V na zasilanie logiki


Zastosowanie modułów wpinanych na goldpiny mocno uprościło tworzenie i lutowanie płytki. Na dłuższą metę też zmniejszyło koszty i ewentualne problemy z dostępnością czujników. Diody IR będą często przełączane i może przez nie płynąć dość spory prąd powodując zakłócenia. Dlatego odseparowałem je od zasilania logiki.

Schemat ideowy:


PCB:








Jak kogoś interesuje więcej szczegółów dotyczących schematu:
http://ucgosu.pl/2017/03/schemat-ideowy-robota/

Oprogramowanie

Jak wspomniałem wcześniej, cały kod programu udostępniam na GitHubie. Zaczynając pisanie kodu miałem taką koncepcję architektury:



A tutaj dodatkowy opis dla zainteresowanych: http://ucgosu.pl/2017/04/architektura-systemu/

Obsługę peryferiów piszę bezpośrednio na rejestrach, nie używam żadnych bibliotek STMowych typu StdPeriph, HAL, czy Cube. Nie używam również projektów w żadnym IDE, a build działa na własnych makefileach. W skład projektu wchodzi wiele targetów testowych, pozwalających mi odpalać na sprzęcie niezależne programy np. do strojenia PIDów na silniki. Mam też skonfigurowane unit testy, ale na razie robiłem rzeczy związane z hardware i jeszcze ich nie używałem.

Całość działa na FreeRTOSie, używam też biblioteki matematycznej libfixmatrix przerobionej na liczby float. Mam już zaimplementowane regulatory PD prędkości postępowej i obrotowej, oraz Rozszerzony Filtr Kalmana. Wszystko działa na floatach, procesor ma do nich wsparcie hardwareowe i na razie nie zaobserwowałem problemów z niewyrabianiem się.

Regulator prędkości postępowej: http://ucgosu.pl/2017/08/projekt-regulatora-obrotow-silnika/
Regulator prędkości obrotowej: http://ucgosu.pl/2017/11/regulator-predkosci-obrotowej/
EKF: http://ucgosu.pl/2017/12/ekf-rozszerzony-filtr-kalmana/

Zaimplementowany Filtr Kalmana działa bardzo ładnie. Po rozszerzeniu modelu stanowego o dryft symulacje dawały obiecujące rezultaty:



Działanie w rzeczywistości nie jest takie proste do zweryfikowania. Aktualnie używam miarki do sprawdzania, czy zebrane dane pokrywają się z rzeczywistą trajektorią robota. A samo oszacowanie trajektorii wygląda tak:



Przejazd testowy z zadaną prędkością postępową i obrotową:



W następnej kolejności będę chciał skalibrować czujniki ścian. W tym celu posłużę się testowym labiryntem, który dostałem od Trekera:



co ciekawe jestem trzecim forumowiczem, który jest właścicielem tego labiryntu, wcześniej należał on jeszcze do mog123.

Mając odczyty z czujników ścian będę chciał zmodyfikować EKF tak, aby je uwzględniał. Będzie to dosyć ciekawy problem, ponieważ nie zawsze ściany zostaną wykryte. Potem zostaną jeszcze rozwiązywanie labiryntu i zadawanie prędkości.
  Temat: Algorytm SLAM - pomysł na interfejs GUI dla robota mobilnego na komputerze PC
GAndaLF

Odpowiedzi: 4
Wyświetleń: 367

PostForum: PC   Wysłany: 29-10-2017, 12:45   Temat: Algorytm SLAM - pomysł na interfejs GUI dla robota mobilnego na komputerze PC
Kiedyś pisałem tutorial jak obsługiwać port COM pod C#: https://forbot.pl/blog/port-szeregowy-interfejs-usart-czyli-komunikacja-mikrokontrolera-z-komputerem-id1122

To było dawno, więc coś się mogło zmienić, ale obstawiam, że dalej jest podobnie. Bibliotekę do obsługi portu COM tak naprawdę znajdziesz w każdym popularnym języku. Więc to, czy wybierzesz C#, Javę, Pythona czy jeszcze coś innego zależy tylko od tego w którym języku czujesz się pewniej przy pisaniu reszty aplikacji.

Odradził bym tylko WinApi bo jest dużo bardziej skomplikowane.
  Temat: Filtr Kalmana - model stanowy dla pomiaru żyroskop + magnetometr
GAndaLF

Odpowiedzi: 3
Wyświetleń: 457

PostForum: Algorytmy   Wysłany: 18-10-2017, 17:57   Temat: Filtr Kalmana - model stanowy dla pomiaru żyroskop + magnetometr
Właśnie w wyznaczaniu tych macierzy V - szumu modelu stanowego - i W - szumu wyjścia - jest cała zabawa. Musisz to zrobić doświadczalnie sprawdzając różne wartości w symulacjach. Przepisanie na sztywno wartości z neta prawie nigdy nie da dobrych rezultatów.
  Temat: Filtr Kalmana - model stanowy dla pomiaru żyroskop + magnetometr
GAndaLF

Odpowiedzi: 3
Wyświetleń: 457

PostForum: Algorytmy   Wysłany: 23-09-2017, 19:30   Temat: Filtr Kalmana - model stanowy dla pomiaru żyroskop + magnetometr
Ja bym to zrobił tak:

ax - kąt w osi x obliczony na bazie odczytów z magnetometru
wx - prędkość kątowa w osi x z żyroskopu
dt - okres próbkowania

Równania stanu
ax(t + 1) = ax(t) + wx(t)*dt
yx(t) = ax(t)

ax jest twoją zmienną stanu, wx jest twoim pobudzeniem. Dostajesz wtedy macierze:
A = 1
B = dt
C = 1
  Temat: STM32F103 Nucleo + HC-06 brak komunikacji w RealTerm
GAndaLF

Odpowiedzi: 5
Wyświetleń: 376

PostForum: Mikrokontrolery   Wysłany: 16-09-2017, 01:53   Temat: STM32F103 Nucleo + HC-06 brak komunikacji w RealTerm
Prawdopodobnie HC-06 masz ustawiony na inny baudrate niż 9600. Musisz wysyłać komendę AT na kolejnych wspieranych baudratach i zobaczyć na którym dostajesz odpowiedź. Ja u siebie wysyłałem komendy AT z PC przy użyciu konwertera USB-UART
  Temat: STM32 BluePill
GAndaLF

Odpowiedzi: 2
Wyświetleń: 127

PostForum: Programowanie   Wysłany: 16-09-2017, 01:14   Temat: STM32 BluePill
Jeżeli jesteś początkujący - zacznij od dedykowanego IDE np OpenSTM32:
http://www.openstm32.org/HomePage
OpenSTM32 jest oparte na pluginach do Eclipse i w sumie też jest dosyć trudne na początek. Możesz spróbwać innego dedykowanego IDE np. CooCox, Atollic. Nie wiem jakie teraz są na topie, bo nie używam :P

Gołe Eclipse i makefile dają pewne korzyści względem takich IDE, ale docenisz je dopiero jak będziesz już oblatany w temacie. Na początku jedynie mogą podbić ciśnienie bo są dosyć ciężkie do skonfigurowania.

Jeżeli jednak bardzo chcesz Eclipse to polecam poczytać:
http://www.freddiechopin.info/pl/artykuly/35-arm/59-arm-toolchain-tutorial
http://ucgosu.pl/2017/02/uruchomienie-szablonu-projektu-stm32-eclipse/
http://ucgosu.pl/2017/02/stm32-eclipse-neon/
  Temat: Filtr Kalmana od teorii do praktyki - #3 - Testy na STM32
GAndaLF

Odpowiedzi: 7
Wyświetleń: 1789

PostForum: Komentarze do artykułów   Wysłany: 06-08-2017, 23:12   Temat: Filtr Kalmana od teorii do praktyki - #3 - Testy na STM32
Konfigurację Eclipse na STM32 opisałem kiedyś na swoim blogu:

http://ucgosu.pl/2017/02/uruchomienie-szablonu-projektu-stm32-eclipse/
http://ucgosu.pl/2017/02/szablon-projektu-stm32/
  Temat: Jak zaimplementować regulator PID dla silnika z enkoderem?
GAndaLF

Odpowiedzi: 11
Wyświetleń: 2572

PostForum: Komentarze do artykułów   Wysłany: 01-06-2017, 22:41   Temat: Jak zaimplementować regulator PID dla silnika z enkoderem?
Masz rację, w kodzie brakuje aktualizacji zmiennej pid_params.err_last. Dzięki za wyłapanie.
  Temat: [Micromouse] Minotaur
GAndaLF

Odpowiedzi: 12
Wyświetleń: 5416

PostForum: Nasze roboty   Wysłany: 02-04-2016, 15:29   Temat: [Micromouse] Minotaur
wn2001, szerokość MM mniejsza niż 11cm umożliwia robotowi jazdę po skosie. Żeby robot jechał po skosie bez zmiany kierunku jego szerokość nie może przekraczać połowy przekątnej jednej komórki labiryntu czyli (180 - 12) * sqrt(2) / 2 co daje w przybliżeniu 119 mm. W praktyce musi być jeszcze trochę węższy, żeby zostawić sobie margines błędu.
  Temat: [Konkurs] GŁOSOWANIE - Proxxon FBS 240/E - #10 - Wyzwanie świąteczne
GAndaLF

Odpowiedzi: 4
Wyświetleń: 1984

PostForum: Zawody/Konkursy/Wydarzenia   Wysłany: 17-01-2016, 19:34   Temat: [Konkurs] GŁOSOWANIE - Proxxon FBS 240/E - #10 - Wyzwanie świąteczne
Dziękuję za oddane głosy! Aktualnie robot odmówił posłuszeństwa, ale jak doprowadzę go do ładu to nagranie covera Queen będzie jego pierwszym zadaniem :D
  Temat: Chytre serwo
GAndaLF

Odpowiedzi: 11
Wyświetleń: 2839

PostForum: Projekty   Wysłany: 03-01-2016, 00:24   Temat: Chytre serwo
Fajny projekt. Do debugowania powinieneś zrobić logi po I2C. Z tego co pamiętam AVRów i tak się po JTAGu nie debugowało więc to najlepsze co możesz mieć.
  Temat: Zdobądź Proxxona FBS 240/E - #10 - Wyzwanie świąteczne
GAndaLF

Odpowiedzi: 7
Wyświetleń: 2557

PostForum: Zawody/Konkursy/Wydarzenia   Wysłany: 20-12-2015, 11:57   Temat: Zdobądź Proxxona FBS 240/E - #10 - Wyzwanie świąteczne
Silniki nie ucierpiały, bardziej procesor od zakłóceń, dlatego te puszki są dolutowane :D
  Temat: Zdobądź Proxxona FBS 240/E - #10 - Wyzwanie świąteczne
GAndaLF

Odpowiedzi: 7
Wyświetleń: 2557

PostForum: Zawody/Konkursy/Wydarzenia   Wysłany: 20-12-2015, 02:02   Temat: Zdobądź Proxxona FBS 240/E - #10 - Wyzwanie świąteczne
Jestem w trakcie tworzenia robota micromouse i musiałem przetestować silniki. Postanowiłem więc połączyć przyjemne z pożytecznym i wystartować w konkursie. Mój robot gra kolędy na silnikach przy pomocy PWM. Oto "Wśród nocnej ciszy" w jego wykonaniu:


Dodatkowo bonus z okazji premiery nowych Star Warsów :D
  Temat: Jak zaimplementować regulator PID dla silnika z enkoderem?
GAndaLF

Odpowiedzi: 11
Wyświetleń: 2572

PostForum: Komentarze do artykułów   Wysłany: 17-08-2015, 08:27   Temat: Jak zaimplementować regulator PID dla silnika z enkoderem?
Regulator może mieć na wejściu i wyjściu wartości w obojętnie jakich jednostkach. Jego zasada działania pozostaje taka sama. Dlatego nic nie stoi na przeszkodzie, żeby zwracał wypełnienie PWM. Należy tylko pamiętać, że regulator może zwracać wartości spoza zakresu -100-100%.

Wartości jakie regulator przyjmuje na wejściu i wyjściu określamy w fazie projektowania. Ja jako wejście obiektu (czyli wyjście regulatora) przyjąłem PWM i w takich jednostkach zebrałem odpowiedź skokową.

W przypadku drona, wahadła, albo jakiegokolwiek innego układu również możesz zaprojektować regulator tak, żeby wyjściem regulatora był PWM.

[ Dodano: 17-08-2015, 23:18 ]
W załączniku brakujący plik out001.txt
 
Strona 1 z 21
Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki