Skocz do zawartości

Robot balansujący - odwrócone wahadło


Pomocna odpowiedź

Czujniki (szczególnie acc) najlepiej w osi obrotu kół lub możliwie jak najbliżej jej.

Jak będzie tak wysoko to przy pochylaniu acc będzie wskazywał przyspieszenie mimo że platforma będzie stała. Oczywiście da się to wyliczyć i wyeliminować ale to niepotrzebne zajmowanie procka

chciałem zaprojektować jednostronną płytkę ale nie mam nerwów:( zrobię dwustronną i wykonam w firmie...

dwustronną też możesz wykonać w domu

  • 2 tygodnie później...
  • 2 tygodnie później...

Nie lepiej zrobić transmisje USART na przerwaniach? Sprawdzanie w pętli czy jest coś do odebrania to trochę lipny sposób..

  • 1 miesiąc później...

slawko_k w jaki sposób podajesz dane z akcelerometru i żyroskopu do filtru Kalmana. Przeliczasz dane z czujników na przyspieszenie i prędkość kątowa i do tego atan(), atan2() czy arcsin()?

co_pat to zależy od utworzonych równań filtru Kalmana (czy uwzględniasz błędy dryfu, offsetu, etc.)

Swego czasu zajmowałem się bardzo intensywnie nieliniowym filtrem Kalmana właśnie do pracy z pomiarami z akcel. i żyro. do estymacji trajektorii ruchu:

  • 2 tygodnie później...

Wow niciki widzę, że dość mocno opracowałeś ten filtr 🙂

Na razie chcę uzyskać tylko odchylenie od jednej osi, liczę atan2 z przyspieszeń x i y co zdaje egzamin ale tylko gdy na czujnik nie działają inne przyspieszenia. Jeżeli zaczynam poruszać czujnikiem bez zmiany kąta zmienia się też obliczony kąt. Wiecie jak to uwzględnić w obliczeniach?

  • 1 miesiąc później...

Witam wszystkich!

Mam pytanie do Juras5... Rozumiem, że ostatecznie zamówił kolega płytkę z ADXL345 + ITG3200 na pokładzie. Nie znalazł kolega nic tańszego (ale cyfrowego)? Przecież wystarczy tylko jednoosiowy gyro i dwuosiowy acc. Może warto samemu zrobić jakąś płytkę, co by dawało nam więcej możliwości. Czemu kolega zdecydował się na I2C a nie np. na SPI?

slawko_k w jaki sposób podajesz dane z akcelerometru i żyroskopu do filtru Kalmana. Przeliczasz dane z czujników na przyspieszenie i prędkość kątowa i do tego atan(), atan2() czy arcsin()?

co_pat,

Nie przyszło mi żadne powiadomienie i dopiero dziś zobaczyłem że coś się w wątku dzieje.

Wprowadzam żywcem kąt obliczony z akcelermetru (arctg(x/g)) oraz prędkość z żyroskopu. Potem tylko dobrałem doświadczalnie ich wzajemne współczynniki bo jak sygnał z acc był za duży względem żyra to obliczony z kalmana kąt zmienił się dość wolno a jak odwrotnie to był zbyt duże przesterowania i potem powolny powrót do prawidłowej wartości.

Długo nic nie robiłem ze swoją platformą bo utknałem nad brakiem pomysłu jak to prawidłowo zrobić.

Otóż założyłem że ruch będę zadawał poprzez zadanie jakiegoś kąta pochylenia i to działa co pokazywałem na filmiku.

Tyle ze jak platforma odchyli sie o np 3stopnie to musi ciągle przyspieszać zeby to pochylenie utrzymać. W ten sposób rozpędzała się do kresu mocy silników.

Próbowałem jakoś zmodyfikować kod że im szybciej jedzie tym kąt automatycznie jest zmniejszany ale mimo że w mojej głowie to działało to w przypadku platformy nie przyniosło oczekiwanych rezultatów. Albo nie było żadnej poprawy albo pojawiały sie oscylacje.

Drugi pomysł miałem aby zadawać moc silników anie kąt pochylenia. Ale tu jest problem bo żeby jechać w przód to wypadało by żeby platforma cofnęła się żeby pochylić się do przodu i dopiero wtedy jechać. Podobnie jakby jechać do przodu i chcieć zapodać wsteczny. To silniki muszą jeszcze przyspieszyć a potem zawrócić. Nie byłem wstanie tego ogarnąć.

Bez jakiegoś pomysłu lub pomocy na pewno nie pchnę tego dalej.

Jeśli może ktoś mi coś podpowiedzieć to bardzo proszę o pomoc.

Filmik tego co mam chyba umieszczałem w inny wątku ale sam już nie pamiętam więc wkleję go również tutaj

Wprowadzam żywcem kąt obliczony z akcelermetru (arctg(x/g)) oraz prędkość z żyroskopu. Potem tylko dobrałem doświadczalnie ich wzajemne współczynniki bo jak sygnał z acc był za duży względem żyra to obliczony z kalmana kąt zmienił się dość wolno a jak odwrotnie to był zbyt duże przesterowania i potem powolny powrót do prawidłowej wartości.

Miałem ten sam problem na początku, ale ja poradziłem sobie poprzez sprowadzenie odczytanych danych do jednostek g i stopni/s. Poza tym atan() zwraca wynik w radianach więc musisz je przeliczyć na stopnie - to może być przyczyną błędów.

Odnośnie samej jazdy problem może jeszcze leżeć w tym, że korzystasz tylko z atan(). Dokładniej chodzi o to, że jak robot się porusza to na akcelerometr działa przyspieszenie całego robota co całkowicie psuje wyniki otrzymane za pomocą atan().

Później zrobiłem wersję z dokładnym obliczeniem kąta z uwzględnieniem przyspieszeń ale wyniki były prawie identyczne bo przyspieszenia są znikome a obliczeń było od groma.

  • 1 miesiąc później...

Wprowadzam żywcem kąt obliczony z akcelermetru (arctg(x/g)) oraz prędkość z żyroskopu. Potem tylko dobrałem doświadczalnie ich wzajemne współczynniki bo jak sygnał z acc był za duży względem żyra to obliczony z kalmana kąt zmienił się dość wolno a jak odwrotnie to był zbyt duże przesterowania i potem powolny powrót do prawidłowej wartości.

witam, też programuję w Bascom'ie i nie mogę sobie poradzić z obliczeniami z gyro i akcelerometru. czy jest możliwość żebyś wspomógł częścią kodu ?

  • 5 tygodnie później...

Witam

Jako, że to mój pierwszy post chciałbym się przywitać ze wszystkimi userami tego forum 🙂.

Zbudowałem wraz z dwoma kolegami robota balansującego. Ze względu na brak wystarczających środków finansowych zmuszeni byliśmy do zastosowania podzespołów, które aktualnie mieliśmy na stanie. Nie posiadaliśmy żadnych silników DC z odpowiednimi przekładniami ani enkoderów więc zdecydowaliśmy się na sterowanie w torze otwartym z zastosowaniem silników krokowych. Użyty w projekcie procesor to produkt firmy Texas Instruments mikroprocesor sygnałowy z rodziny c2000 model f28027 Piccolo. System mikroprocesorowy występuje pod postacią zestawu startowego, który za pośrednictwem JTAGA komunikuje się z komputerem PC za pośrednictwem portu USB. Sensory wykorzystane w robocie to akcelerometr i żyroskop. Kod programu zawiera filtr Kalmana i regulator PID. Jeżeli ktoś będzie zainteresowany "głębszymi" szczegółami chętnie podzielę się doświadczeniami zdobytymi w projekcie. Mam pewne pytanie. Czy istnieje urządzenie do bezprzewodowej komunikacji USB? Wiem, że to dziwnie brzmi ale idealnie w moim wypadku nadawałoby się do zadawania robotowi trajektorii, a ponadto umożliwiłoby mi wykorzystanie środowiska programistycznego do wyrysowywania różnorakich przebiegów występujących w układzie. Same trajektorie mógłbym zadawać przy użyciu zwykłego modułu radiowego (który zresztą kupiłem 🙂 ) ale z tymi przebiegami to już gorzej. Z góry dziękuję za ewentualną pomoc. Umieszczam film pokazujący zachowanie robota.

Pozdrawiam

Mateusz

kris_po,

Teraz dopiero zobaczyłem twoje pytanie.

W czym problem?

crash1990,

super stoi.

też o krokowcach myślałem ale stwierdziłem ze za wolne

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...