Jakiego algorytmu należy użyć do wyważenia robota dwukołowego za pomocą żyroskopu?

25

Czy istnieje dobry, popularny i niezawodny algorytm, którego mogę użyć, pobierając dane z żyroskopu i używając go do sterowania dwoma niezależnymi kołami, aby utrzymać wyważonego robota w pozycji pionowej? Szukam algorytmu, który pozwoli mi używać go do kierowania robotem, a także utrzymywać go w pozycji pionowej podczas postoju. Umiejętność radzenia sobie z pochyłościami i ludźmi, którzy ją szturchają , byłaby również dodatkowa, ale nie niezbędna.

berry120
źródło
Będę nad tym również pracował. Musisz użyć filtru Kalmana, aby odfiltrować swoje surowe dane. I użyj algorytmu PID, aby go dostroić.
Huzo

Odpowiedzi:

16

Najprostszym sterownikiem jest liniowy kontroler stanu zwrotnego. Istnieją zasadniczo 4 różne stany, dla których potrzebujesz zysku. Są to kąt pochylenia, szybkość pochylania, prędkość i pozycja.


LQR (liniowy regulator kwadratowy) to metoda zaprojektowania tych korzyści (po uzyskaniu zlinearyzowanej reprezentacji przestrzeni stanu w twoim systemie). Jeśli nie masz reprezentacji przestrzeni stanów (prawdopodobnie nie masz), możesz uzyskać równania ruchu i zmierzyć parametry. Jeśli nie masz reprezentacji w przestrzeni stanów, powinieneś po prostu dostroić wzmocnienia ręcznie (bez LQR lub innych metod, takich jak umieszczanie biegunów ).


Ręczne strojenie:

Zakładając, że kąt pochylenia, pozycja / prędkość i momenty obrotowe kół są skierowane do przodu (jeśli są dodatnie), chcesz uzyskać dodatni przyrost kąta pochylenia i prędkości pochylania, a także dodatni przyrost pozycji i prędkości.

Zacznij od wzmocnienia kąta pochylenia i prędkości pochylenia. Pozwoli to początkowo zrównoważyć. Gdy pozostanie zrównoważony, możesz kontrolować pozycję i prędkość, dodając do nich wzmocnienie. Jeśli jest niestabilny, zwiększ współczynnik przechyłu (co pomaga wytłumić system).

Kontrola pozycji / prędkości będzie kontrolować oba stany do zera. Aby kontrolować jakąś inną wartość, potrzebujesz kontrolera śledzenia odniesienia, zastępując stany błędami przed wprowadzeniem ich do kontrolera (np. Bieżąca prędkość - prędkość odniesienia).

Kontrola odchylenia może odbywać się niezależnie (z różnicami momentów obrotowych kół dodanymi do głównego regulatora wyważenia / prędkości / położenia).

ronalchn
źródło
9

Uważam, że najpopularniejszym rozwiązaniem tego problemu jest kontroler LQR . Problem, który próbujesz rozwiązać, to problem odwróconego wahadła . Używając tych słów kluczowych, powinieneś być w stanie wyszukać czyjś kod open source. Kolejnym problemem będzie mapowanie większości istotnych wielkości fizycznych do twojej aplikacji (waga, moment obrotowy silnika itp.)

Chris Mansley
źródło
5

Ponieważ nie znam twoich umiejętności inżynierii / teorii sterowania, polecam zacząć od regulatora PID . Jest to prosty kontroler i znajdziesz wiele jego implementacji kodu. Wadą PID jest to, że prawdopodobnie skończy się to na ręcznym dostrajaniu parametrów.

Kilka lat temu użyłem go do sterowania dwukołowym robotem Lego Mindstorm na podstawie jego odometrii i działał wystarczająco dobrze. Aby się poruszać, musisz grać z ustawionymi punktami.

Oczywiście później można poprawić jakość kontrolera (stabilność, niezawodność itp.), Stosując bardziej zaawansowane prawa kontroli, takie jak wspomniany wcześniej LQR.

Powodzenia!

bit-pirat
źródło