Skocz do zawartości

Pomocna odpowiedź

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

54 minuty temu, Treker napisał:

@FlyingDutch dzięki za szczegółowy opis - bardzo dawno nie było tutaj takiego robota 🙂 

Cześć @Treker,

jeszcze trochę zostało do zrobienia - mówię tu o nie podłączonych elementach i ulepszenie oprogramowania. Postaram się to w najbliższym czasie dopracować.

Pozdrawiam

(edytowany)

Gratuluję - w szczególności tempa poskładania całości do kupy (jeden dzień).

Jednak w opisie zabrakło mi najciekawszego elementu - zastosowanej procedury strojenia regulatora PID.

Poza tym obecnie chyba nie warto kupować staruteńkiego L298N, ja bym zastosował raczej coś takiego

 

Edytowano przez jand
  • Lubię! 1
(edytowany)
18 godzin temu, jand napisał:

Jednak w opisie zabrakło mi najciekawszego elementu - zastosowanej procedury strojenia regulatora PID.

Cześć,

na razie w ogóle nie dostrajałem parametrów regulatora PID, a to z tego powodu, że parametry które były w kodzie szkicu pobranym z Githuba zadziałały poprawnie. Oczywiście nie jest to dobór optymaly i dlatego w najbliższej przyszłości mam zamiar (podczas ulepszania programu) zastosować jedną ze znanych metod doboru nastaw eregulatora PID - np. metodę Zieglera-Nicholsa:

https://home.agh.edu.pl/~romus/Podstawy Automatyki/Lab 6 Dostrajanie_PID.pdf

W najbliższych dniach będę miał na to czas najprędzej w sobotę - opiszę wtedy moje dziłania.

Co do sterownika silników to masz absolutną rację - wybrałem ten model, bo był on użyty w kodzie z Github'a i nie chciałem tego na początku zmieniać.

BTW: zastanawiam się, czy OpenCV na ESP32 z kamerą działa wystarczająco wydajnie, aby zastosować je do prostego podążania za obiektem np. człowiekiem?

Pozdrawiam

Edytowano przez FlyingDutch

Do planów rozwojowych dodałbym jeszcze:

  • Skalibrowanie MPU6050. W tej chwili ładujesz jako poprawki wartości, które nijak się mają do Twojego konkretnego egzemplarza. 
  • Wykorzystanie enkoderów, które masz przy silnikach. Taki robot zachowuje się bardziej stabilnie, gdy dodatkowy regulator PID steruje tak wartością zadaną pochylenia, by utrzymać stałą prędkość jazdy (w szczególności równą zeru dla robota mającego stać w miejscu).

 

Dnia 3.12.2024 o 08:30, FlyingDutch napisał:

Bez tej przeciw wagi robot nie potrafił utrzymywać równowagi

Jako wartość zadaną wychylenia przyjąłeś niezmienioną wielkość podaną w oryginalnym  programie:

double originalSetpoint = 175.8;

która jest dość odległa od teoretycznej wartości 180 stopni. Rozbieżności wynikają z niedokładności montażu robota (płaszczyzna czujnika nie jest idealnie prostopadła do osi robota) i w przypadku każdej konstrukcji optymalna wartość jest nieco inna.

Zastosuj tu na początku 180, a potem - obserwując zachowanie robota - dostosuj jej wartość tak, by osiągnąć najlepsze rezultaty.

Mam nadzieję że wtedy dodatkowe baterie jako obciążniki nie będą potrzebne.

(edytowany)
40 minut temu, jand napisał:

Jako wartość zadaną wychylenia przyjąłeś niezmienioną wielkość podaną w oryginalnym  programie:

double originalSetpoint = 175.8;

która jest dość odległa od teoretycznej wartości 180 stopni. Rozbieżności wynikają z niedokładności montażu robota (płaszczyzna czujnika nie jest idealnie prostopadła do osi robota) i w przypadku każdej konstrukcji optymalna wartość jest nieco inna.

Zastosuj tu na początku 180, a potem - obserwując zachowanie robota - dostosuj jej wartość tak, by osiągnąć najlepsze rezultaty.

Hej próbowałem wartości 178.9 ale nie pomogło to.

Próbowałem też dobrać parametry dla regulatora PID - metodą Zieglera-Nicholsa (jak w podanym dokumencie) i wyszły mi wartości:

Kp = 150

Ki = 135

Kd  = 180

ale były to za duże wartości bo w rzeczywistym układzie regulator dostawał oscylacji.

Pozdrawiam

Edytowano przez FlyingDutch

Rzeczywiście te teoretycznie dobrane wartości są całkiem inne od tych, przy których Twój robot zachowuje się w miarę poprawnie, ale wiem z doświadczenia, że dobranie odpowiednich parametrów jest żmudne.

Można też, aby uniknąć wielokrotnego kompilowania programu, zastosować potencjometry do regulowania wartości parametrów w trakcie pracy robota. Jest to niby dodatkowa fatyga, ale per saldo może sie opłacać.

  • Lubię! 1
(edytowany)

Cześć,

zrobiłem przeciwwagę - wystarczył kawałek pleksy z pojemnikiem na baterie. Ręcznie pozmieniałem trochę parametry PID i teraz robot zachowuje się całkiem poprawnie. Oto wartości parametrów PID'a :

//PID
double originalSetpoint = 180;
double setpoint = originalSetpoint;
double movingAngleOffset = 0.1;
double input, output;
int moveState=0; //0 = balance; 1 = back; 2 = forth
double Kp = 58.0;//50;
double Kd = 1.9;//1.4;
double Ki = 68;//60;
PID pid(&input, &output, &setpoint, Kp, Ki, Kd, DIRECT);

#define interruptPin  2
double motorSpeedFactorLeft = 0.85;
double motorSpeedFactorRight = 0.85;

Zrobiłem krótki filmik z jazdy robota:

Muszę wkomponować czujnik ultradźwiekowy do programu, aby robot omijał przeszkody i dodać jakieś proste sterowanie kierunkiem jazdy (zdalnie).

Pozdrawiam

Edytowano przez FlyingDutch

Ja bym dał ToF a nie ultradźwięk - pamiętaj że musisz wyłaczyć przewania na czas pomiaru, a to może być niespecjalnie dobre dla reszty robota zakładając, że to UNO.

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