Skocz do zawartości

Robot balansujący


Pomocna odpowiedź

Napisano

Witam, buduję pierwszego robota balansującego, i trochę utknąłem w miejscu przy implementacji. Chciałem bazować na gotowym kodzie, jednak nie mogę go skompilować po pobraniu ponieważ wyrzuca błędy bibliotek. Byłby ktoś na tyle miły, aby rzucić okiem i powiedzieć co było przyczyną? Z góry dzięki. 

robot.rar

(edytowany)

Wydaje mi się, że porywasz się trochę z motyką na słońce. Jeżeli nie potrafisz zrozumieć prostego output'u z kompilatora, który próbuję Ci przekazać, że niewłaściwie dołączasz biblioteki to dalej będzie już tylko gorzej. Na szybko przeleciałem po plikach i kod jest bardzo nieczytelny i ciężko będzie Ci z nim pracować. Może lepiej wystartować od zera ze swoim projektem, rozbić budowę robota balansującego na mniejsze części tj. obsługa silników, obsługa czujnika IMU, algorytm regulatora PID, fuzja danych z IMU itd. Przy takim podejściu będziesz miał jaśniejszy pogląd na całość projektu i na pewno będzie to dla Ciebie bardziej kształcące niż grzebanie w takim kodzie. Nie pisząc już o tym, że łatwiej będzie Ci pomagać, kiedy swoje problemy rozbijesz na mniejsze części i każdy z nich będziesz potrafił własnymi słowami opisać w sposób dla wszystkich zrozumiały. Ja jestem bardzo otwarty na pomoc, ale nie w takiej formie jaką zasugerowałeś. 🙂

Edytowano przez Alvedro
  • Lubię! 1

Błędy z MPU6050.

C:\Users\Patryk\Documents\Arduino\libraries\MPU6050/MPU6050.h:436:7: warning: type 'struct MPU6050' violates one definition rule [-Wodr]

 class MPU6050 {

       ^

C:\Users\Patryk\Documents\Arduino\libraries\MPU6050\MPU6050.h:436:7: note: a different type is defined in another translation unit

 class MPU6050 {

       ^

C:\Users\Patryk\Documents\Arduino\libraries\MPU6050/MPU6050.h:1026:18: note: the first difference of corresponding definitions is field 'dmpPacketBuffer'

         uint8_t *dmpPacketBuffer;

                  ^

C:\Users\Patryk\Documents\Arduino\libraries\MPU6050\MPU6050.h:436:7: note: a type with different number of fields is defined in another translation unit

 class MPU6050 {

       ^

@lewin94, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

13 godzin temu, lewin94 napisał:

Chciałem bazować na gotowym kodzie, jednak nie mogę go skompilować po pobraniu ponieważ wyrzuca błędy bibliotek. Byłby ktoś na tyle miły, aby rzucić okiem i powiedzieć co było przyczyną?

Możesz podać źródło tego programu? Tak chyba będzie łatwiej 😉 Na przyszłość pamiętaj, że kody programów należy umieszczać przez narzędzie KOD (znajdziesz je w edytorze pod ikonką "<>"). Dzięki niemu programy są odpowiednio formatowane i kolorowane, a wtedy wszystkim znacznie łatwiej analizować wklejone programy.

Ciężko jest Ci w to uwierzyć, ale będzie szybciej, jeżeli podzielisz to sobie na mniejsze części i wystartujesz z tym projektem od nowa. Podłącz do arduino samo mpu6050, znajdź działającą bibliotekę, zobacz czy potrafisz odbierać dane z akcelerometru, żyroskopu i tak krok po kroku buduj ten projekt. Masz rozrysowany jakiś schemat, opis, jak ten robot balansujący ma działać?

Super, na razie nie korzystaj z tamtego projektu. Wystartuj całkowicie na świeżo. Masz taki ogólny pogląd na przepływ danych wejściowych/wyjściowych z danych komponentów? Startując od najprostszej wersji: Arduino dostaje od MPU6050 dane o przyspieszeniach z akcelerometru i żyroskop, następnie są one w filtrze np. Kalmana przeliczane na kąt wychylenia robota. Kąt ten trafia do regulatora, np. PID, gdzie obliczany jest błąd pomiędzy wartością zadaną (czyli naszym kątem np. 0°, czyli robot jest w pozycji pionowej) a aktualnym kątem z filtru Kalmana, wyjściem z regulatora PID jest sygnał, który następnie po przeliczeniu, w postaci PWM i kilku sygnałów sterujących mówiących o kierunku trafi na mostek tb6612 a on wysteruje silniki. Napisałem to w takim lekkim uproszczeniu, żeby nadać temu taki ogólny na razie obraz.

Podłącz sobie teraz mpu6050, znajdź bibliotekę do obsługi tego czujnika, najlepiej taką z od razu zaimplementowanym filtrem Kalmana i doprowadź do momentu, kiedy będziesz miał pod jedną zmienną kąt przechyłu. Następnie znajdź lub napisz sam bibliotekę do obsługi mostka tb6612, podłącz do niego silnik i zobacz czy potrafisz sterować prędkością, kierunkiem, jednym, drugim silnikiem. Dawaj znać jak idzie i będziemy myśleli dalej. 😉

 

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