Skocz do zawartości

Robot balansujący "Trybik"


FlyingDutch

Pomocna odpowiedź

Jeśli to hc-sr04 to raczej powinien się zachowywać jak hc-sr04 a nie coś innego. Zresztą ostatnio udowadniałeś że lm298n jest lepszy od lm298n... nie zrozumiałem argumentacji ale może ja mało rozumiem?

Edytowano przez ethanak
Link do komentarza
Share on other sites

38 minut temu, ethanak napisał:

hc-sr04 to raczej powinien się zachowywać jak hc-sr04 a nie coś innego

Trzeba się przyzwyczaić do sposobu myślenia Chińczyków. Oni oferując nową wersję modułu często pozostawiają starą nazwę, aby nie "pogubić" potencjalnych klientów. I tak do nowego SR04 dodają tylko "2020", a ichsza nowa wersja  LM298N, o której wspominałem (przypominająca pierwowzór tylko funkcjonalnie) nazywa się na przykład "Mini Victory L298N". A u innego sprzedawcy inaczej, ale te 298N musi występować, choć sam układ scalony jest całkiem inny (MX1508).

  • Lubię! 2
Link do komentarza
Share on other sites

(edytowany)

Cześć chłopaki i dziewczyny,

miałbym jeszcze pytanie do bardziej ode mnie zaawansowanych w budowie robotów kolegów. Jak połączyć kontrolę jazdy z użyciem enkoderów z regulatorem PID służącym do stabilizacji pozycji robota (tym już istniejącym). Jaki algorytm zastosować i jak to zrobić w kodzie źródłowym?

Tutaj znalzłem projekt robota, który używa dwóch regulatorów PID połączonych kaskadowo (Velocity PID i Stabilisation PID). Czy to dobry pomysł, i czy są jakieś alternatywne metody?

https://github.com/simplefoc/Arduino-FOC-balancer?tab=readme-ov-file

Hej, czy mógłby mi ktoś wyjaśnić diagram   "Control algorithm" bo nie do końca rozumiem "PID Velocity" - nie rozumiem dlaczego dla tego regulatora wyjściową wielkością  jest target angle?

BTW: zastanawiam się nad prostym sterowaniem kierunkiem jazdy robota przez Bluetooth - używał może ktoś taniego modułu HC-05 do zdalnego sterowania:

https://pl.aliexpress.com/item/1005007411732801.html?spm=a2g0o.productlist.main.3.1cc95H1H5H1HGz&algo_pvid=f183e513-7c4d-45be-bd6b-fe7a2e4e7c7e&algo_exp_id=f183e513-7c4d-45be-bd6b-fe7a2e4e7c7e-1&pdp_npi=4%40dis!PLN!7.44!7.52!!!13.07!13.22!%40211b430817334849338047065e8d40!12000040642893504!sea!PL!2287185289!X&curPageLogUid=8JsOgdCFgMkA&utparam-url=scene%3Asearch|query_from%3A

Pozdrawiam

Edytowano przez FlyingDutch
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

5 godzin temu, FlyingDutch napisał:

używa dwóch regulatorów PID połączonych kaskadowo (Velocity PID i Stabilisation PID). Czy to dobry pomysł, i czy są jakieś alternatywne metody?

Moim zdaniem to dobry pomysł; innych, podobnych metod nie znam.

5 godzin temu, FlyingDutch napisał:

nie rozumiem dlaczego dla tego regulatora wyjściową wielkością  jest target angle?

Zauważ (na swoim robocie lub na licznych filmikach), że poruszający się robot nie znajduje się w pozycji pionowej, ale jest lekko pochylony w kierunku jazdy. Im szybciej się porusza, tym bardziej jest pochylony. Możemy tę sytuację odwrócić i wprowadzając do regulatora PID lekkie odchylenie od pionu spowodować ruch robota. A jak ma stać, to wymuszamy odchylenie zero stopni.

Czyli wygląda to tak:

  • Cyklicznie mierzymy prędkość robota (a w zasadzie prędkość wału silnika).
  • Pierwszy regulator PID porównuje ją z wartością zadaną i wyznacza niezbędny dla utrzymania danej prędkości kąt nachylenia 
  • Drugi regulator PID tak steruje silnikami, by robot utrzymywał nachylenie wyznaczone przez pierwszy regulator.
5 godzin temu, FlyingDutch napisał:

zastanawiam się nad prostym sterowaniem kierunkiem jazdy robota przez Bluetooth

Sugerował bym zrobić takie połączenie w pierwszej kolejności (HC05 jak najbardziej się nadaje).

I nie chodzi nawet o same kierowanie robotem, ale o przesyłanie danych - zmienianie nastaw regulatorów PID, czy śledzenie na bieżąco wartości nachylenia czy prędkości robota. Najbardziej uciążliwą rzeczą jest strojenie regulatorów, więc trzeba to sobie maksymalnie ułatwić.

A dobrze zestrojony robot potrafi pokonać różne trudności:

 

 

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

7 godzin temu, jand napisał:

poruszający się robot nie znajduje się w pozycji pionowej, ale jest lekko pochylony w kierunku jazdy. Im szybciej się porusza, tym bardziej jest pochylony.

Moim skromnym zdaniem, to nie prędkość decyduje o pochyleniu robota lecz moment obrotowy przenoszony z silnika na koła.

Pozycja pionowa robota jest niestabilna i musi być nieustanni korygowana przez działanie silników. Innymi słowy robot jest cały czas w ruchu. Ruchy są niewielkie i prawie niewidoczne. Aby rozpocząć jazdę robot musi pochylić ramę w kierunku, w którym zamierza jechać, wówczas silniki wytwarzają moment obrotowy M, który jest przenoszony na koła napędowe. Ten sam moment M (na zasadzie reakcji) jest przenoszony na ramę robota. Dodatkowo na ramę robota działa siła ciężkości ramy robota (którą można zaczepić w środku ciężkości SC) oraz bezwładności wynikająca z przyspieszenia jakiego doznaje robot rozpoczynając ruch lub opóźnienia podczas hamowania. Obie te siły wytwarzają momenty obrotowe względem osi obrotu kół. Mamy więc do czynienia z trzema momentami działającymi na ramę robota. W każdej chwili ruchu suma tych trzech momentów musi być równa zeru - inaczej rama by się  cały czas obracała. Zagadnienie z punktu widzenia mechaniki jest dość skomplikowane.

460156702_Robotbalansujcy_p.thumb.png.0df889781e5c1d62fdb68ef0b232fd68.png630024395_Robotbalansujcy-H.thumb.png.8392b321fa7d8bdd4f919fb7f5e9ddca.png

 

 

W internecie można znaleźć opis dynamiki takiego robota np. TU lub tu

Edytowano przez Sylba
  • Lubię! 2
Link do komentarza
Share on other sites

(edytowany)

Cześć,

dziekuję wszystkim za odpowiedzi - niestey nie wszystko jest dla mnie jasne, Czy mógłby ktoś omówić ze mną ten proces sterowania dokładniej bazując na diagramie ze strony WWW, którą wcześniej wspominałem. Oto ten diagram:

scheme.thumb.png.3916baf92993a999dd3e6f88146ea0df.png

1) I tak rozumiem, że "target velocity" to zadana prędkość robota - moje pytanie jak ją wprowadzać? Czy może to być watrość duty cycle dla silnika(uint8_t)? Jak określić kierunek, czy za pomocą znaku liczby. Jak zmieniać kierunek jazdy robota np. skręt w lewo, czy w prawo (sterowanie z modułu Bluetooth).

2) Czy "Motor velocity" - jest to prędkość wału sinika odczytywana z enkoderów? I czy jest ona jako "balancer velocity"podawana na układ odejmujący dla wejści pierwszego PID'a (PID Velocity). Czy na tej wielkości "motor velocity"  są robione jakieś przekształcenia (obliczenia) przed podaniem jej na wejście PID jako "balancer velocity"?

3) Jak są obliczane te prędkości i jak jest np. uwzględniany błąd z silników pobierany z sygnałów enkoderów, gdy silniki nie pracują identycznie.

4) Jak jest ustawiony "setpoint" dla tego pierwszego PID'A

5) "Low pass filter" - rozumiem, że jest to cyfrowy filtr dolno-przepustowy, jakie powinien on mieć parametery?

6) Rozumiem, że "target angle" jest sygnałem wyjściowym z "PID Velocity" - jak powinna wyglądać funkcja mapująca wejściową prędkość dla PID'a na kąt. W jakim zakresie powinna się zmieniać wartośc wyjściowego kąta.

7) Czy "balancer pitch angle" to "IMU angle" - kąt obliczany jak w moim robocie za pomocą MPU6050?

8 "PID Stabilisation" - to już istniejący w moim robocie PID stabilizujący pozycję robota?

Gdyby ktoś mógłby wyjaśnić mi te wątpliwości to bardzo by mi pomogło.

Pozdrawiam

 

 

Edytowano przez FlyingDutch
Link do komentarza
Share on other sites

1 godzinę temu, FlyingDutch napisał:

rozumiem, że "target velocity" to zadana prędkość robota - moje pytanie jak ją wprowadzać?

Tak. wprowadzasz ją tworząc instancję regulatora od prędkości jako setpoint

PID pid(&input, &output, &setpoint, Kp, Ki, Kd, DIRECT);

 

1 godzinę temu, FlyingDutch napisał:

Czy może to być watrość duty cycle dla silnika(uint8_t)?

Nie. Silnikiem steruje regulator równowagi.

Kierunek jazdy możemy określać znakiem liczby, ale trzeba zadbać by było to tak interpretowane przez program sterujący silnika. Stosowana przez Ciebie biblioteka to zapewnia. Posiada ona również funkcje turnRight(), turnLeft(), które umożliwią Ci wykonywanie skrętów na podstawie danych otrzymanych przez Bluetooth.

1 godzinę temu, FlyingDutch napisał:

Czy "Motor velocity" - jest to prędkość wału sinika odczytywana z enkoderów?

Jest to prędkość wału, ale musisz ją wpierw obliczyć na podstawie impulsów enkodera. Jest ona podawana na wejście pierwszego PID jako wartość bieżąca (zmienna input). 

1 godzinę temu, FlyingDutch napisał:

jak jest np. uwzględniany błąd z silników pobierany z sygnałów enkoderów, gdy silniki nie pracują identycznie.

Różnice nie powinny być duże, można przyjąć, że oba silniki pracują identycznie, najwyżej robot nie będzie jechał dokładnie po linii prostej. Można ewentualnie korygować duty cycle jednego silnika współczynnikiem dobranym doświadczalnie. Lub zrobić osobny tor sterowania dla każdego z silników.

1 godzinę temu, FlyingDutch napisał:

Jak jest ustawiony "setpoint" dla tego pierwszego PID'A

Prędkość zadaną przesyłasz przez Bluetooth i zapamiętujesz w zmiennej setpoint regulatora prędkości

1 godzinę temu, FlyingDutch napisał:

"Low pass filter" - rozumiem, że jest to cyfrowy filtr dolno-przepustowy, jakie powinien on mieć parametery?

Dużo zależy od sposobu obliczania prędkości robota i od tego czy mogą się tam pojawiać jakieś niespodziewane piki. Na początek bym ten filtr olał.

1 godzinę temu, FlyingDutch napisał:

- jak powinna wyglądać funkcja mapująca wejściową prędkość dla PID'a na kąt.

Wartość wyliczy regulator PID. Jest to właśnie jego rola, by tak dobrać kąt, żeby utrzymać zadaną prędkość.

 

Odpowiedzi na 7) i 8).   Tak.  Tak.

 

 

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Hej. Powodzenia.

W międzyczasie spróbuję sobie przypomnieć szczegóły mojej podobnej konstrukcji sprzed kilku lat.

Edytowano przez jand
  • Lubię! 1
Link do komentarza
Share on other sites

6 minut temu, jand napisał:

Hej. Powodzenia.

W międzyczasie spróbuję sobie przypomnieć szczegóły mojej podobnej konstrukcji sprzed kilku lat.

Hej @jand,

czy twój robot był opisany na Forbocie - jeśli tak,czy mógłbyś podać link?

Pozdrawiam

Link do komentarza
Share on other sites

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

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.