Skocz do zawartości
lubniewicz

Autonomiczy robot balansujący

Pomocna odpowiedź

Witam,

lubniewicz gratuluję wspaniałego robota!

Właśnie przymierzam się do budowy podobnego robota, czy ktoś z was byłby w stanie polecić mi jakieś konkretne modele silników? Z góry dziękuję za podpowiedź.

Udostępnij ten post


Link to post
Share on other sites

Dziękuję za ciepłe słowa. Ja mam silniki z tego co pamiętam to chyba 29:1 lub 30:1 pololu. Obecnie jeden z nich odmówił współpracy (zwarcie - wywaliło bezpiecznik ale nic się nie stało, mostek caly) kwalifikuje się raczej na wymianę. Mogę polecić te silniki, ale nie mowie ze to jedyny wybór, fajne są też roboty z krokowcami. Dobierz tak silniki aby łącznie z kołami dały robotowi jakaś sensowna prędkość.

Udostępnij ten post


Link to post
Share on other sites

Zadaj od razu pytanie ;)

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Zbudowałem ciało robota balansującego, ale chciałbym zobaczyć listing programu, jak zabrać się do programowania go.

Udostępnij ten post


Link to post
Share on other sites

Sorry, że dopiero teraz odpisuję. Napisz coś więcej o swoim robocie? Jakie silniki? Jak DC to czy przekładnia i jaka?  Czujniki? Napisz coś więcej. Na pewno pomogę. 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Zbudowałem robota balansującego z następujących podzespołów. 

1. Podwozie z silnikami:

https://botland.com.pl/pl/podwozia-robotow/3855-chassis-self-balancing-2wd-2-kolowe-podwozie-z-napedem-do-robota-balansujacego.html

silniki JGA25-371 - wersja 126 obr z enkoderami

2. Łączność do ustawiania PID i sterowania Bluetooth HC06

3. Sterowanie silnikami poprzez dwa (każdy osobny na silnik) sterowniki L298N Dual H-Bridge motor driver (sterowniki dla każdego silnika zmostkowany według karty katalogowej w celu podniesienia zdolności obciążalności prądowej - z 2A na 4A na pojedyńczy silnik)

4. Odczyt położenia robota poprzez MPU6050

5. Na płycie PCB zastosowano uC SAMD21 kierując się schematem dla ARDUINO ZERO, tak aby był 100% kompatybilny z tym środowiskiem. 

6. Zasilanie wykonałem poprzez 3 baterie 18650 3,7V

 

60346368_282899502659655_2719274246139281408_n (1).jpg

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Ok. Czyli rozumiem że nie masz jeszcze nic napisane? Proponuje na sam początek obsłużyć enkodery. Czyli stwórz "proces" który będzie uruchamiany co 20 milisekund. Będziemy tam wszystko wrzucać. Czyli wykorzystaj jeden z timerów sprzętowych, nie będziemy się bawić na razie w programowe. W kwestii enkoderów to możesz to zrobić na dwa sposoby, ale z przerwaniami albo za pomocą kodu Graya. to już zależy od Ciebie. Ja stosuje kod Graya bodaj w pętli głównej.  Podsumowując musisz napisać obsługę enkoderów na poszczególne koła. W jedną stroną inkrementacja, a w drugą dekrementacja. W ten "proces" 20ms wrzucasz funkcję, w ciele funkcji kopiujesz odczytane obroty ze zmiennej tymczasowej do zmiennej którą później wykorzystamy do PID, a następnie zerujesz zmienną tymczasową aby znowu się napełniła od obrotów. Najlepiej do tego celu stosować klasy. Chyba zrozumiałeś Dane sobie wysyłaj po uarcie aby zobaczyć czy wszystko działa. Jak będziesz miał już odczyt z kół to przejdziemy dalej. 

Edytowano przez lubniewicz
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Ok enkodery obsługuję timerem sprzętowym, za pomocą przerwań. Mam pętlę główną "proces" ustawiony na ten czas na 5ms. Impulsy są zliczane poprawnie. 

Przy tym wszystkim okazało się, że silniki które zamówiłem z sklepu, mają inne parametry. Mianowicie 360 impulsów z enkodera to jeden obrót silnika, 12240 impulsów to jeden obrót koła. Przekładnia 1:34. Obroty koła w stanie jałowym to 350 obrotów na minutę.

Edytowano przez Zbielu

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Dobrze może tak być, ale wydaje mi się ze 5 ms to za szybko. Zrób test obracaj powoli kołem i zobacz ile masz impulsów zliczanych przez te 5ms. Przy bardzo wolnym obracaniu dobrze miec minumum 10 impulsów. Ps. Żebyśmy sie zrozumieli masz już prędkość obrotowa dla 2 kół oddzielnie, jak obracasz w jedna to masz ze znakiem + a w druga ze znakiem -? Jak to sprawdzisz to przejdziemy dalej. 

Jako parametr do PID proponuje zastosować właśnie ilość impulsów w tych 5ms. Podaj mi ile masz impulsów w 5 ms przy maksymalnych obrotach i bardzo bardzo minimalnych. Musimy poznać dolny próg. Często robot balansuje i wykonuje bardzo małe ruchy musimy to wykryć. 

Edytowano przez lubniewicz
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Mam rozdzielczość PWM na 12000 ... silniki startują od wartości PWM 2200, wcześniej tylko piszczą, czyli offset ustawiłem na 2000, (PWM działa od -12000 do -2000 potem od 2000 do 12000). Wartość 5ms w każdej chwili mogę zmienić, zatem od teraz będę testował na 20ms. Przy 5ms mamy około 125 impulsów na najwolniejszych obrotach, przy maksymalnych 350 impulsów. Na ten czas nie mam prędkości obrotowej tylko zliczam same impulsy z enkoderów. Te impulsy są z znakiem + i -.

 

 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Zmień na 10ms. I podaj mi ile masz impulsów na tą jednostkę czasu przy tym jak delikatnie i powoli ręką obracasz koło. To jest bardzo ważny moment i trzeba to dobrze dobrać, bo inaczej bedzie potem flustracja i nerwy przy regulacji. Ponadto moim zdaniem niepotrzebnie zastosowałes timer chyba 24 bitowy, na spokojnie pójdzie na 8 bitach. Zwiększenie rozdzielczości powoduje ze masz gigantyczny offset. Nie wprowadzaj offsetu, według mnie to jest błąd. Wyobraź sobie taką sytuację, że regulator ustalił pwm na tak małą wartość że silnik nie pracuje ale jednak okazuje się że koło może sie obracać z mniejszym oporem bo silnik delikatnie je napędza. Chodzi mi o to, że nieraz potrzebne jest takie subtelne sterownie pwm, a w przypadku offsetu silnik ma obcinana taka charakterystykę, to znaczy regulator steruję ale pwm jest obcinany offsetem. Jak to zrobisz polecimy dalej. 

Edytowano przez lubniewicz
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Ps. Z tymi 24bit oczywiście przesadziłem... 

Zobacz jakie drobne ruchy musisz wykryć. O to mi właśnie chodzi. 

 

Edytowano przez lubniewicz
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Po bluetooth co 10ms zliczałem impulsy z enkodera i wysyłałem na lapka. Przy bardzo wolnym obracaniu kołem (skokowym bo silniki mają taki skok od magnesu), w czasie tych lekkich uskoków wartości były 10-13 impulsów.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

To bardzo dobrze powinno wystarczyć. Zrób tak abyś miał trzy zmienne z prędkością obrotowa to jest impulsy dla lewego koła, prawego i średnia. Następnie kolejna rzeczą do zrobienia to odczyt kąta. Mianowicie musisz połączyć prędkość kątowa i kąt obliczony z akcelerometru. Mozesz to zrobić poprzez filtr kalmana lub komplementarny. Ma to na celu aby przy szybkich ruchach robotem nie dochodziło do przeklamania kąta pochylenia. Jest to druga najważniejsza rzecz po tych enkoderach. Jak to będzie zrobione źle to nic nie wyregulujesz. Ja to zrobiłem na komplementarnym. Poniżej to testowałem w twn sposób ze wysyłałem dane po uarcie do programu który rysował mi wykres. To jest najlepsza metoda w według mnie. Skąd bedzie wiadomo ze filtr działa? Jak bedziesz wolno zmieniał kąt to wykres musi być gładki, jak szybko - wręcz szarpał to także kąt ma być gładki, nie może być tak ze jak robot przechylasz ze 100 na 80 to nagle po drodze masz 120, a jak zatrzymujesz to powiedzmy 50 stopni. Mam tutaj na myśli to że ma być dokładnie odwzorowany ruch robota. Bez przeklamania. Dla robota enkodery i kąt to są "oczy" . Zapomniałem dodać ze pomiar i obliczenia wrzuć do tego samego procesu 10 ms ale pod funkcja enkoderow. Tak więc w procesie będziesz mial, odczyt prędkości z enkoderow, obliczenie kąta, a potem zrobimy regulator. Jak bedziesz mial problemy i wątpliwości to pisz. 

 

Ps. Dla lepszego rozrachunku możesz w programie przyjąć 90 stopni za pionową postawe robota. 

Edytowano przez lubniewicz
  • Lubię! 1

Udostępnij ten post


Link to post
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!

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