Skocz do zawartości

Line follower - problem z powrotem na trasę


Evgeniy

Pomocna odpowiedź

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

 

IMG_20200203_032318.jpg

Edytowano przez Gieneq
Link do komentarza
Share on other sites

@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

(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 przez Evgeniy
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

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.