Spisu treści:

Dwukołowy samobalansujący robot: 7 kroków
Dwukołowy samobalansujący robot: 7 kroków

Wideo: Dwukołowy samobalansujący robot: 7 kroków

Wideo: Dwukołowy samobalansujący robot: 7 kroków
Wideo: Dwukołowiec - siostra nieźle śmiaga dwukołowcem czyli Łukasz testuje część 4. 2024, Listopad
Anonim
Dwukołowy samobalansujący robot
Dwukołowy samobalansujący robot

Ten instruktaż przejdzie przez proces projektowania i budowy samobalansującego robota. Dla przypomnienia, chcę tylko powiedzieć, że samobalansujące roboty nie są nową koncepcją i zostały zbudowane i udokumentowane przez innych. Chcę skorzystać z okazji, aby podzielić się z Wami moją interpretacją tego robota.

Co to jest samobalansujący robot?

Robot samobalansujący to system, który wykorzystuje dane pomiarowe bezwładności, zebrane z czujnika pokładowego, do ciągłego dostosowywania swojej pozycji w celu utrzymania pozycji pionowej.

Jak to działa?

Prostą analogią do rozważenia jest odwrócone wahadło. Gdzie środek masy znajduje się powyżej punktu obrotu. Jednak w naszym przypadku ograniczamy wahadło do 1 stopnia swobody, mając jedną oś obrotu, w naszym przypadku oś obrotu dwóch kół. Ponieważ każde zakłócenie spowoduje upadek robota, potrzebujemy metody aktywnego utrzymywania robota w równowadze. W tym miejscu w grę wchodzi nasz algorytm pętli zamkniętej (regulator PID), wiedząc, w którym kierunku opada nasz robot, możemy dostosować kierunek obrotów naszych silników, aby utrzymać równowagę systemu.

Jak działa algorytm pętli zamkniętej?

Podstawową zasadą utrzymania równowagi robota jest to, że jeśli robot upada do przodu, kompensuje to przesuwając dolną część robota do przodu, aby złapać się i utrzymać w pionie. Podobnie, jeśli robot spada do tyłu, zrekompensuje to przesuwając dolną część robota do tyłu, aby się złapać.

Musimy więc zrobić dwie rzeczy, po pierwsze, musimy obliczyć kąt nachylenia (Roll), którego doświadcza robot, a co za tym idzie, musimy kontrolować kierunek obrotów silników.

Jak zmierzymy kąt nachylenia?

Do pomiaru kąta nachylenia posłużymy się bezwładnościową jednostką miary. Moduły te zawierają akcelerometr i żyroskop.

  • Akcelerometr to urządzenie elektromagnetyczne, które mierzy właściwe przyspieszenie, czyli przyspieszenie ciała w ramce chwilowego spoczynku.
  • Żyroskop to urządzenie elektromechaniczne, które mierzy prędkość kątową i służy do określania orientacji urządzenia.

Jednak problem z użyciem takich czujników polega na tym, że:

  • Akcelerometr jest bardzo głośny, ale jest stały w czasie, kąt zmienia się wraz z nagłymi ruchami poziomymi
  • Z drugiej strony wartość żyroskopu będzie się zmieniać z czasem, ale początkowo jest dość dokładna

Z tego powodu nie zamierzam wdrażać filtra, zamiast tego będę używać wbudowanego cyfrowego przetwarzania ruchu (DMP). Inni używali filtra uzupełniającego, aby uzyskać płynny sygnał, możesz wybrać dowolną metodę. ponieważ robot równoważy się z którąkolwiek z implementacji.

Kieszonkowe dzieci

Części:

  1. Arduino Pro Mini 3.3V 8 z 8 MHz ATMEGA328
  2. FT232RL 3.3V 5.5V Moduł adaptera szeregowego FTDI USB na TTL
  3. Moduł GY-521 z MPU-6050
  4. Para mikromotoreduktorów N20 6V - 300rpm
  5. Sterownik silnika L298N
  6. LM2596S Konwerter DC na DC buck
  7. Bateria (akumulator litowo-jonowy 9,7 V)
  8. Pasek baterii
  9. Dwie prototypowe płytki drukowane PCB
  10. Przewody połączeniowe męskie i żeńskie nagłówka

Narzędzia:

  1. Lutownica i lut
  2. Dystans dystansowy z nylonu sześciokątnego
  3. Zestaw wkrętaków precyzyjnych
  4. drukarka 3d

Krok 1: Budowa

Ponieważ miałem dostęp do drukarki 3D, postanowiłem wydrukować obudowę w 3D i połączyć wszystko ze sobą za pomocą łączników.

Robot składa się z 4 warstw

  1. Dolna warstwa łączy silniki i posiada punkty mocowania modułu sterownika silnika L298N
  2. Kolejna warstwa zawiera płytkę prototypową z Arduino pro mini i przylutowanymi do niej nagłówkami
  3. Trzecia warstwa montuje IMU
  4. Górna warstwa, którą nazywam „warstwą zderzakową”, zawiera baterię, konwerter buck i przełącznik monetarny

Moją główną zasadą projektowania było zachowanie modułowości. Powodem tego było to, że jeśli coś poszło nie tak z jednym z komponentów, mogłem go łatwo wymienić lub jeśli potrzebowałem komponentu do innego projektu, mogłem go łatwo wziąć, nie martwiąc się, że nie będę mógł ponownie korzystać z systemu.

Krok 2: Okablowanie

Okablowanie
Okablowanie

Przylutowałem kilka żeńskich pinów do płytki perforowanej, aby pasowały do pinów Arduino pro mini. Następnie przylutowałem na płytce piny męskiego nagłówka, aby umożliwić dostęp do wejść/wyjść. Pozostałe elementy zostały zamontowane na wydrukowanej w 3D ramie i połączone za pomocą przewodów połączeniowych.

Krok 3: Teoria kontroli

Teraz przechodzimy do sedna projektu. Aby utrzymać robota w równowadze, musimy wygenerować odpowiedni sygnał sterujący, aby napędzać silniki we właściwym kierunku i z odpowiednią prędkością, aby robot był zrównoważony i stabilny. W tym celu wykorzystamy popularny algorytm pętli sterowania znany jako regulator PID. Jak sugeruje akronim, w tym regulatorze są trzy wyrazy, są to wyrazy proporcjonalne, całkowe i pochodne. Każdej z nich towarzyszą współczynniki określające ich wpływ na system. Często najbardziej czasochłonną częścią implementacji sterownika jest dostrojenie wzmocnienia dla każdego unikalnego systemu w celu uzyskania najbardziej optymalnej odpowiedzi.

  • Składnik proporcjonalny bezpośrednio mnoży błąd, aby dać wynik, więc im większy błąd, tym większa odpowiedź
  • Składnik całkowy generuje odpowiedź opartą na akumulacji błędu w celu zmniejszenia błędu stanu ustalonego. Im dłużej system jest niezrównoważony, tym szybciej zareagują silniki
  • Termin pochodny jest pochodną błędu, który jest używany do przewidywania przyszłej odpowiedzi, a tym samym zmniejsza oscylacje spowodowane przekroczeniem stanu ustalonego.

Podstawową zasadą tego algorytmu jest ciągłe obliczanie kąta nachylenia, który jest różnicą między żądaną pozycją a bieżącą pozycją, co nazywa się błędem. Następnie wykorzystuje te wartości błędów i oblicza sumę odpowiedzi proporcjonalnych, całkujących i różniczkujących w celu uzyskania wyjścia, którym są sygnały sterujące wysyłane do silników. W rezultacie, jeśli błąd jest duży, sygnał sterujący wysyłany do silników będzie obracał silniki z dużą prędkością, aby uzyskać zrównoważony stan. Podobnie, jeśli błąd jest mały, sygnał sterujący obróci silniki z małą prędkością, aby utrzymać równowagę robota.

Krok 4: Korzystanie z MPU 6050

Biblioteka MPU6050

github.com/jrowberg/i2cdevlib/tree/master/…

Kalibracja offsetów Nie wszystkie czujniki są dokładnymi replikami siebie. W rezultacie, jeśli testujesz dwa MPU 6050, możesz uzyskać różne wartości dla akcelerometru i żyroskopu, gdy są umieszczone nadal na tej samej powierzchni. Aby przezwyciężyć to stałe przesunięcie kąta, musimy uczcić każdy używany przez nas czujnik. Uruchamianie tego skryptu:

www.i2cdevlib.com/forums/topic/96-arduino-…

napisany przez Luisa Rodenasa, otrzymamy offsety. Błędy przesunięcia można wyeliminować, definiując wartości przesunięcia w procedurze setup().

Korzystanie z cyfrowego procesora ruchu

MPU6050 zawiera DMP (Digital Motion Processor).

Co to jest DMP? Możesz myśleć o DMP jako o wbudowanym mikrokontrolerze, który przetwarza złożony ruch z 3-osiowego żyroskopu i 3-osiowego akcelerometru na pokładzie mpu6050, używając własnych algorytmów fuzji ruchu. Odciążenie przetwarzania, które w przeciwnym razie zostałoby wykonane przez Arduino

Jak tego użyć? Aby dowiedzieć się, jak korzystać z DMP, przejrzyj przykładowy szkic MPU6050_DMP6 dołączony do biblioteki MPU6050 (w Arduino IDE: File->Example->MPU6050->MPU6050_DMP6). Jest to również dobra okazja, aby sprawdzić, czy czujnik działa, a okablowanie jest prawidłowe

Krok 5: Kodowanie

Do programowania Arduino pro mini użyłem Arduino IDE i interfejsu FTDI.

Korzystając z przykładowego szkicu (MPU6050_DMP6), który jest dostarczany z biblioteką MPU6050 jako mój kod bazowy, dodałem funkcje PID() i MotorDriver().

Dodaj bibliotekę

  • MPU6050: Aby korzystać z czujnika MPU6050, musimy pobrać bibliotekę programistyczną I2C od Jeffa Rowberga i dodać ją do folderu „biblioteki” Arduino w plikach programu na komputerze.
  • Wire: Potrzebujemy również biblioteki Wire, aby umożliwić nam komunikację z urządzeniami I2C.

Pseudo kod

Uwzględnij biblioteki:

  • Drut.h
  • MPU6050
  • I2Cdev.h

Inicjalizuj zmienne, stałe i obiekty

Ustawiać ()

  • Ustaw tryb pin do sterowania silnikami
  • Ustaw tryb pin dla diody LED stanu
  • Zainicjuj MPU6050 i ustaw wartości przesunięcia

PID ()

Oblicz wartość PID

MotorDriver (odpowiedź PID)

Użyj wartości PID do sterowania prędkością i kierunkiem silników

Pętla ()

  • Pobierz dane z DMP
  • Wywołaj PID() funkcje MotorDriver()

Krok 6: Procedura strojenia PID

To najbardziej żmudna część projektu i wymaga odrobiny cierpliwości, chyba że masz dużo szczęścia. Oto kroki:

  1. Ustaw termin I i D na 0
  2. Trzymając robota, wyreguluj P tak, aby robot po prostu zaczął oscylować wokół pozycji równowagi
  3. Przy ustawieniu P zwiększ I, aby robot przyspieszał szybciej, gdy jest wytrącony z równowagi. Gdy P i I są odpowiednio dostrojone, robot powinien być w stanie samobalansować przez co najmniej kilka sekund, z pewnymi oscylacjami
  4. Na koniec zwiększ D, aby zmniejszyć oscylacje

Jeśli pierwsza próba nie przyniesie zadowalających rezultatów, powtórz kroki z inną wartością P. Pamiętaj również, że możesz później dostroić wartości PID, aby jeszcze bardziej zwiększyć wydajność. Wartości tutaj zależą od sprzętu, nie zdziw się, jeśli uzyskasz bardzo duże lub bardzo małe wartości PID.

Krok 7: Podsumowanie

Zastosowane mikromotoreduktory miały powoli reagować na duże zakłócenia, a biorąc pod uwagę, że system był zbyt lekki, nie było wystarczającej bezwładności, aby uzyskać pożądany efekt wahadła, więc jeśli robot pochyli się do przodu, po prostu przechyli się pod kątem i pędzi do przodu. Wreszcie, koła drukowane w 3D były złym wyborem, ponieważ ciągle się ślizgają.

Propozycje ulepszeń:

  • Szybsze silniki o wyższym momencie obrotowym, tj. dla silników prądu stałego im wyższe napięcie znamionowe, tym wyższy moment obrotowy
  • zdobądź cięższą baterię lub po prostu przesuń masę nieco wyżej
  • Wymień koła drukowane w 3D na gumowe, aby uzyskać lepszą przyczepność

Zalecana: