Evgeniy Napisano Luty 3, 2020 Udostępnij Napisano Luty 3, 2020 (edytowany) Witam koledzy Natychmiast przepraszam za wszystkie błędy w tekście, ponieważ sam korzystam z tłumacza z Białorusi i pisząc tę publikację. Chcę cię poprosić o pomoc w tworzeniu algorytmu dla robota podążającego za linią. Jakiego algorytmu używasz, gdy robot traci linię (gdy czujnik pokazuje wszystkie wartości zerowe)? Jaki poprzedni błąd powinien zapamiętać robot? Dzięki;) Double scan() { sum_m = 0; X = 0; for (int i = 0; i < 8; i++) { m = k * analogRead(analog); if (m < WHITE) m = 1; else if (m > BLACK) m = 1000; sum_m += m; } for (int j = 0; j < 8; j++) { X += m[j] * x[j]; } X /= sum_m; return X; } void play() { play_pid(); play_motors(); } oid play_pid() { error = scan(); if (sum_m < 2 * WHITE) { error = last_error2; //max_speed = 70; } //else max_speed = last_max_speed2; if (abs(error) > 3.0) { last_error2 = error; } P = error; I += error; D = (error - last_error); PID = P * Kp + I * Ki + D * Kd; last_error = error; if (sum_m < 2 * WHITE) last_error = last_error2; } // integral = 0 Edytowano Luty 3, 2020 przez Gieneq Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Luty 3, 2020 Udostępnij Luty 3, 2020 @Evgeniy witam na forum 🙂 Najprościej robić to w taki sposób, że przy każdym obiegu zapamiętujesz, który czujnik widzi linię. W następnym obiegu pętli sprawdzasz czy jakiś czujnik widzi linię, jeśli nie to wiesz, który czujnik widział trasę ostatnio i obracasz się w daną stronę. Ważne jest tylko, aby informacje o aktualnej pozycji linii aktualizować tylko, gdy jakiś czujnik ją widzi. Link do komentarza Share on other sites More sharing options...
Evgeniy Luty 3, 2020 Autor tematu Udostępnij Luty 3, 2020 (edytowany) 2 godziny temu, Treker napisał: @Evgeniy witam na forum 🙂 Najprościej robić to w taki sposób, że przy każdym obiegu zapamiętujesz, który czujnik widzi linię. W następnym obiegu pętli sprawdzasz czy jakiś czujnik widzi linię, jeśli nie to wiesz, który czujnik widział trasę ostatnio i obracasz się w daną stronę. Ważne jest tylko, aby informacje o aktualnej pozycji linii aktualizować tylko, gdy jakiś czujnik ją widzi. Вялікі дзякуй, Treker 🙂 Potrzebujesz dodatkowej pomocy przy tworzeniu algorytmu kalibracji. W tej chwili używam następującego algorytmu: 1. Patrzę na czarne wartości na wszystkich 8 czujnikach; 2. Korzystając ze współczynnika proporcjonalności, doprowadzam je do bliskich wartości; 3. Kiedy wartość na czujniku jest mniejsza niż 100, zmieniam ją na 0; 4. Gdy wartość jest większa niż 400, zmieniam już na 1000; Jakie są wady mojego algorytmu lub co jeszcze polecasz? Dziękuję Edytowano Luty 3, 2020 przez Evgeniy Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Luty 3, 2020 Udostępnij Luty 3, 2020 @Evgeniy wydaje mi się, że w tego typu projekcie taki algorytm będzie wystarczający 🙂 Nie ma potrzeby robić w tym zakresie czegoś więcej. Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Pomocna odpowiedź
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ę »