Skocz do zawartości

Line follower - problem z powrotem na trasę


Pomocna odpowiedź

Napisano (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

 

IMG_20200203_032318.jpg

Edytowano przez Gieneq

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

(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

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

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