Skocz do zawartości

Autonomiczy robot balansujący


lubniewicz

Pomocna odpowiedź

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

Ładna konstrukcja, PCB połączone na 'kanapkę' z mnóstwem przewodów ma w sumie swój urok.

Planujesz uzupełnić opis o dokładniejsze informacje na temat algorytmu sterującego? Opierałeś się o jakieś artykuły w Internecie/literaturze?

Link do komentarza
Share on other sites

Konstrukcja robota:

Robot składa się z 4 płytek z tworzywa sztucznego (dla tego opracowania przyjmiemy oznaczenia od 0 do 3, gdzie poziom 0 jest na samym dole).

-Poziom 0: Płytka tego poziomu jest grubości 6 mm. Od spodu znajdują się dwa kątowniki do których przykręcone są silniki 12v z przekładnią i enkoderami. Na górze znajduje się "koszyk" na akumulator żelowy 1.3 Ah, 12v. Akumulator przyklejony do koszyka poprzez dwa paski taśmy dwustronnej.

-Poziom 1: Płytka grubości 3 mm. Po prawej stronie znajduje się przełącznik bistabilny włączający zasilanie na resztę robota, a obok przełącznik dźwigniowy służący do odcięcia akumulatora. Po lewej stronie znajduje się gniazdo do ładowania akumulatora, oraz ewentualnego zasilania z zewnętrznego źródła, po wcześniejszym odłączeniu akumulatora przełącznikiem dźwigniowym (aby to źródło nie zagotowało aku 🙂 tylko zasiliło elektronikę ). Na tym poziome znajduje się płytka PCB z układem wykonawczym do silników w postaci mostków H z peryferiami, oraz mała płytka z układem - bramkę OR obsługującą 3 czujniki ultradźwiękowe (omówię to w dalszej części).

-Poziom 2: Główna płytka PCB. Na niej znajduje się AVR 1284P wraz z rezonatorem 20 MHz. Po lewej stronie znajduje się czujnik IR połączony z PCB. Pod płytką umieszczony jest moduł bluetooth 1 klasy.

-Poziom 3: Na tym poziomie mamy płytkę PCB - rozdzielającą zasilanie. Znajdują się 3 bezpieczniki (po jednym dla każdego silnika i jeden na resztę elektroniki), oraz wyjścia napięcia 12v, 5v i gnd dla całego robota. Do tej płytki mam podczepioną gotową przetwornice 5V (zrezygnowałem ze stabilizatora liniowego). Pod płytką znajduje się buzzer, dwa czujniki prądu (wyjście analogowe na ADC) dla każdego z silników, żyroskop z akcelerometrem, oraz konwerter poziomów logicznych wraz ze stabilizatorem 5v --> 3,3v. Na samej górze wyświetlacz 4 wierszowy SPI.

Elektronika:

Zasilanie z aku trafia na płytkę z bezpiecznikami, gdzie tam tworzymy także napięcie 5v. Z tego miejsca zasilamy całego robota. Płytka z AVR-em posiada wejścia: IR, enkodery, sygnały analogowe z czujników prądu, sygnał z czujników ultradźwiękowych (po przerobieniu przez bramkę OR), bluetooth, żyroskop i akcel. Wyjścia: wyświetlacz, bluetooth, buzzer, czujniki ultradźwiękowe, PWM na każdy silnik, oraz sygnał do sterowania mostkami H, żyroskop i akcel. Sygnał PWM i sterowanie trafia na płytkę z mostkami H, a dalej na silniki. Mostki posiadają radiatory, aby się nie zagotowały. Założenie miało być takie, aby te przewody spinające płytki tworzyły "elektroniczny kręgosłup" 🙂. Oczywiście można było spróbować wszystko upchać na jednej płytce lub spiąć je razem np golpinami, lecz tak chyba fajniej wygląda. Płytki wykonane metodą termotransferu, zabezpieczone kalafonią. Programowanie AVR za pomocą Bluetootha lub awaryjnie poprzez złącze Kanda na płytce. Elektronika jak elektronika w razie czego pytać.

Oprogramowanie: Program napisany w języku C. Główna pętla napisana bez delaya, wiec podczas pracy nie blokuje się. Zastosowałem technikę programowania pseudo wielowątkowego, tak aby wszystko mogło "prawie" jednocześnie zagrać (w czasie rzeczywistym). Ponadto umieściłem w kodzie programu algorytm sprawdzający czy każdy z "wątków" nie powoduje opóźnień w wykonaniu innych np. w krytycznym odpowiedzialnym za filtr komplementarny. Kąt wyznaczany przy pomocy filtra komplementarnego. Dodatkowo Regulatory PID na kąt, prędkość, oraz prędkość każdego z kół. Nastawy PID, oraz kalibracja ADC za pomocą pilota lub moich komend uart. Wszelkie informację wyświetlane są na wyświetlacz lub po wpisaniu komendy na terminalu. Algorytm jazdy autonomicznej opiera się na tzw "decyzjach CPU" a tak po prostu w większości na ifach. Mogę powiedzieć, że sporo jest tych "decyzji", nie jest to tak że jak jest przeszkoda to ma po prostu skręć. Wszystko jest uzależnione od tego ile jest miejsca z przodu z boku (odległość od przeszkód i ich umiejscowienie). Obserwowałem robota w różnych sytuacja, jak widziałem że sobie nie radzi odczytywałem loga z pomiarami i ustalałem co może zrobić aby pokonać przeszkodę, następnie wrzucałem to do procka i dalej testowałem. Zdaje sobie sprawę, że wszystkich sytuacji nie zaprogramowałem, ale mimo to jest ich sporo, może kiedyś się je dopisze.

Korzystałem z różnych źródeł, prac studentów, stron poświęconych robotą balansującym, arduino, a nawet wykładu prof Opalińskiego od reg. PID 😉, dużo szukałem. W razie pytań pomogę.

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

Ładnie dostrojony – gratuluję, bo to jest chyba najmniej wdzięczne w całym takim robocie 😉

Masz może jakieś filmiki gdzie jeździ po równi pochyłej?

Czy radzi sobie kiedy drastycznie mu zmienisz środek ciężkości? Na przykład postawisz coś na nim, ale nie na środku, albo coś doczepisz jak ktoś na tym filmie:

Link do komentarza
Share on other sites

Widziałem wcześniej ten filmik 🙂. Pochylenie robota to tylko kwestia członu całkującego w regulatorze, a w zasadzie suma uchybów. Zastosowałem Windup całkowania w taki sposób aby robot wychylał się w stanie równowagi do 30 stopni na + i -. Oczywiście w każdej chwili można pilotem zmienić granicę Windup-a, nie wiem czy zauważyłem ale gość z filmiku coś swoim "pilotem" zmienia, być może zmieniał granice Windup-a, aby podczepić tą szczotkę 😉. W czasie zwykłej jazdy taka granica jest mało istotna bo człon proporcjonalny może robota bardziej "położyć" przy ziemi. Nie mam filmiku z równią bo nie miałem deski przy sobie 🙂 ale bez problemu podjeżdża (i utrzymuje równowagę) na podjazdach dla wózków, oraz śpiących policjantach 😃. Postaram się kiedyś nagrać taki filmik.

ps. Nie ukrywam wyregulowanie kosztowało mnie sporo nerwów. Problemem są luzy na przekładniach, są dość spore. W sumie w pewnym momencie zastanawiałem się czy nie zmienić silników, a może nawet zastosować silniki krokowe. Udało się jednak wszystko ustawić. W sumie była ciekawa zależność jak robot stał dosłownie jak przyklejony to kiepsko jeździł, jak zmieniłem nastawy i troszkę pływał w stanie równowagi to bardzo stabilnie jeździł. W końcu udało mi się znaleźć nastaw taki "po środku" 😉.

Link do komentarza
Share on other sites

Silniki krokowe są rzeczywiście fajne, bo nie mają luzów i sterowanie nimi to czysta przyjemność (zwłaszcza jak masz jakiś gotowy sterownik), ale nie osiągają wysokich prędkości, więc łatwiej jest robota przewrócić. Zawsze można poszukać silników z mniejszymi luzami...

Ja w swoim robocie miałem praktycznie to samo, ale się poddałem i uznałem, że lepiej żeby ładnie stał, niż dobrze jeździł 😉 Teraz pracuję nad nową wersją, gdzie postaram się być bardziej bezwzględny.

Link do komentarza
Share on other sites

Akurat tworzę robota balansującego, z tym, że trochę mniejszy, na silnikach bezszczotkowych i w obecnej wersji bez enkoderów. PID + kalman, dosyć ładnie się utrzymuje, ale stoję obecnie na sterowaniu nim. Problemem są też trochę za słabe silniki, ale chyba nie tylko. W jaki sposób to realizujesz? Jazda przód - tył jeszcze jako tako, chociaż muszę sam kontrolować przechył, żeby się nie przewrócił, przy skrętach nie mogę go utrzymać.

Link do komentarza
Share on other sites

Równowaga i jazda zalezy od dwóch regulatorów. Jako operator 😉 wysyłam do robota tylko prędkość i wartość skrętu. Nastepnie to robot juz się martwi o to jaki ma być przechył. Pierwszy regulator ma na wejsciu prędkośći zadaną oraz prędkość aktualną z enkoderow. Liczymy uchyb mielimy to w PID gdzie na wyjsciu mamy zadany kat. Nastepnie drugi regulator otrzymuje zadany kat i kat aktualny z filtra komplementarnego, gdzie na jego wyjściu jest już gotowy PWM na silniki. Następnie jest trzeci regulator ktory ma na wejsciu prędkość jednego kola i prędkość drugiego koła, liczymy uchyb i na wyjściu mamy korekte dla PWM tak aby robot w czasie jazdy na wprost nie zakręcał sam. Ten regulator tez służy do zakręcania.

Link do komentarza
Share on other sites

Naprawdę świetny projekt. Z jakim momentem obrotowym dobrałeś silniki? Robię coś podobnego i zamierzam kupić nowe silniczki (te, które miałem w domu nawet nie ruszają pod obciążeniem). Nie chciałbym zainwestować w kolejne zbyt słabe, a Twoje chyba radzą sobie bez problemu 😉

Link do komentarza
Share on other sites

Jak dobrze pamiętam to silniki mają moment 0,79 Nm 🙂. Powiem Tobie jak się zabrałem za dobranie silników. Najważniejszym parametrem według mnie była prędkość poruszania się robota. Chciałem aby robot z "normalną prędkością" poruszał się około 8 km/h, więc trzeba było tak dobrać obwód kół i prędkość obrotową silników aby robot mógł poruszać się z troszkę większą prędkością niż 8 km/h, po prostu musiał być pewien zapas prędkości 😃. Prąd przy zwarciu tych silników dochodzi do 5A na silnik więc mocy jest aż za dużo. Jak robota dosyć ostro katuje mocnymi wychyleniami to napięcie na aku potrafi chwilo spaść nawet o 2V! Musiałem zrobić dodatkowy algorytm korekty mocy po spadku napięcia. Wiesz w zasadzie powinno być tak ze ostatni regulator powinien mierzyć uchyb nie po PWM ale po wartościach prądu. Czujniki takie umieściłem w robocie, lecz miały za dużą bezwładność i musiałem z tego pomysłu zrezygnować. Wadą tych silników są opory i luzy przekładni. Zrobiłem taki test. Mam PWM 8 bitowy, bez obciążenia silniki dopiero się kręcą przy około PWM=50, poniżej nawet nie drgną. Trochę mnie to zaskoczyło, bałem się ze nie ustawie tego robota, ostatecznie udało się, chociaż nastawy musiały być dosyć agresywne.

PS. Moment tych silników jest w praktyce dość duży bawiłem się robotem w przepychanie różnych przedmiotów po dywanie. Przy maksymalnej mocy koła ślizgały się po dywanie.

[ Dodano: 01-10-2016, 18:38 ]

Wrzucam kolejne dwa filmy z robotem. Drugi film przedstawia komunikację z robotem przez terminal (bluetooth) 😃

Link do komentarza
Share on other sites

Właśnie zamierzałem kupić silniki 0,78Nm przy 6V, 1,5Nm przy 12V. Jeśli chodzi o prędkość, to masz bardzo dużą :o ja brałem pod uwagę góra 1,5-2km/h, czyli przy średnicy kół 9cm wystarczyłoby mi 100obr/min ale może faktycznie jeszcze to przemyślę. Co do luzów, to chyba ciężko znaleźć coś, co by ich nie miało. Trzeba by zrobić samemu przekładnię, a i to nie gwarantuje jakiegoś sukcesu, więc chyba bezpieczniej jest kupić gotowy silnik z przekładnią. Dzięki za odpowiedź i gratuluję sukcesu 😃

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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