Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

[Inny] Autonomiczy robot balansujący

Autor Wiadomość
lubniewicz 



Posty: 27
Wysłany: 02-08-2016, 23:16   [Inny] Autonomiczy robot balansujący

Witam, przedstawiam autonomicznego robota balansującego. Robot balansujący na Atmega 1284P 20MHz. Obsługuje komunikację oraz zmianę wsadu za pomocą bluetooth. Ponadto istnieje możliwość sterowania robotem za pomocą pilota IR, oraz zmiany nastawów regulatorów. Posiada system autonomicznej jazdy z wykorzystaniem 3 sensorów ultradźwiękowych. Delikatne ruchy robota w stanie spoczynku spowodowane są dużymi luzami w przekładniach silników. Robot radzi sobie bez problemów ze średniej wielkości nachyleniami podłoża. Sterowanie odbywa się poprzez aplikację na system android, która to wyświetla także podstawowe informacje o robocie (napięcie baterii, wielkość całki w regulatorze pochylenia itp). Tryb autonomicznej jazdy opiera się o trzy ultradźwiękowe czujniki odległości. W oparciu o ich wskazania, robot samoistnie podejmuje decyzje co do dalszej drogi. Jest to ostateczna wersja robota która posiada także prócz trybu autonomicznego, tryb zdalnego sterowania na odległość do 100 metrów. Zaimplementowany moduł auto diagnozy potrafi wykryć 32 ostrzeżenia i błędy, np od niskiego napięcia 12v 5v, po jego niestabilność, uślizg kół, luzy na piastach, opory toczenia i przekładni... itp.... itd... Uruchomienie poszczególnych funkcji robota odbywa się poprzez komendy terminala uart, lub wygodniej pilot ir. Wszystkie parametry robota wyświetlane są na 5 pulpitach 4 wierszowego wyświetlacza lub uproszczone w dedykowanej aplikacji na system android.






__________
Komentarz dodany przez: Treker
Witam na forum, następnym razem proszę pamiętać o zdjęciu w formie załącznika, które widoczne będzie później w katalogu robotów oraz na stronie głównej. W tym przypadku już poprawiłem :)
Zobacz inne roboty w naszym katalogu
Polecany artykuł z FORBOT.PL:
Filtr Kalmana - Teoria i Praktyka

W artykule postaram się opisać w prosty sposób filtr kalmana. Zostanie tutaj podana minimalna dawka teorii, kt... Czytaj całość

Polecany artykuł » AVR&ARM7. Programowanie mikrokontrolerów dla każdego




robot_miniaturka.jpg
Plik ściągnięto 268 raz(y) 623.95 KB

Postaw piwo autorowi tego posta
 
 
Lukaszm 



Posty: 394
Pomógł: 15 razy
Otrzymał 13 piw(a)
Skąd: Warszawa
Programuję w:
C, C++
Należę do:
Sekcja Rakietowa SKA
Wysłany: 03-08-2016, 16:03   

Ł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?

Postaw piwo autorowi tego posta
 
 
lubniewicz 



Posty: 27
Wysłany: 03-08-2016, 18:19   

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

Ostatnio zmieniony przez lubniewicz 03-08-2016, 19:24, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
r_bot 



Posty: 48
Skąd: Polska
Programuję w:
C
Wysłany: 03-08-2016, 19:21   

Bardzo ciekawy projekt. Jestem w trakcie realizacji bardzo podobnego robota.

Polecany artykuł » EAGLE: przydatne ULP - grubsze zakończenia ścieżek


Postaw piwo autorowi tego posta
 
 
lubniewicz 



Posty: 27
Wysłany: 04-08-2016, 22:09   

Wrzucam kolejny film, tym razem sterowanie za pomocą aplikacji na androida

Ostatnio zmieniony przez lubniewicz 04-08-2016, 22:11, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
Artu 




Posty: 107
Pomógł: 3 razy
Otrzymał 12 piw(a)
Skąd: WINNICA k/Pułtuska
Programuję w:
Żadnym:)
Wysłany: 07-08-2016, 10:36   

Fajowy A gdzie uchwyty na butelkę i kieliszki & szklaneczki :roll: :mrgreen:

Postaw piwo autorowi tego posta
 
 
lubniewicz 



Posty: 27
Wysłany: 07-08-2016, 18:14   

Dobry pomysl z ta tacka, do tego kamera ip po wifi i mozna jezdzic po dostawe do drugiego pokoju :mrgreen:

Postaw piwo autorowi tego posta
 
 
Sztef 



Posty: 6
Wysłany: 23-08-2016, 18:34   

Ł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: https://youtu.be/poWP-RpPa3g

Postaw piwo autorowi tego posta
 
 
lubniewicz 



Posty: 27
Wysłany: 23-08-2016, 23:33   

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 :D . 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" ;) .

Ostatnio zmieniony przez lubniewicz 23-08-2016, 23:41, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
Sztef 



Posty: 6
Wysłany: 24-08-2016, 09:49   

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.

Postaw piwo autorowi tego posta
 
 
Alvedro 




Posty: 104
Otrzymał 3 piw(a)
Skąd: Warszawa
Programuję w:
Bascom, C
Moje roboty:
[MS]Rush,[LF]Fibon

Wysłany: 24-08-2016, 16:41   

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


Rush Minisumo, Fibon Linefollower
Postaw piwo autorowi tego posta
 
 
lubniewicz 



Posty: 27
Wysłany: 25-08-2016, 08:13   

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.

Ostatnio zmieniony przez lubniewicz 25-08-2016, 09:06, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
dawid_s 



Posty: 14
Wysłany: 25-09-2016, 20:09   

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 ;)

Postaw piwo autorowi tego posta
 
 
lubniewicz 



Posty: 27
Wysłany: 30-09-2016, 23:07   

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 :-D . 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) :-D





Ostatnio zmieniony przez lubniewicz 30-09-2016, 23:20, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
dawid_s 



Posty: 14
Wysłany: 02-10-2016, 13:45   

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 :D

Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: [Inny] Robot żółw.... [Kroczący] Robot kro... [Kroczący] Robot kro... [Inny] Roboty mietki...
lub przeszukaj forum po wybranych tagach: autonomiczy, avr, balansujacy, czujnik, robot


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