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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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