Skocz do zawartości

[Bascom] Line Follower algorytm


Pomocna odpowiedź

Wygląda dobrze. Jednak czegoś Ci jeszcze brakuje, pochodna po czasie, więc zastanów się, czy taki algorytm powinien wykonywać się w nieskończonej pętli najszybciej jak to możliwe.

Co do aplikacji, brzmi podobnie do moich poczynań: https://www.forbot.pl/forum/topics7/line-follower-feniks2-vt5933.htm (końcówka 1 posta)

Bardo przydatne podczas debugowania.

Jednak czegoś Ci jeszcze brakuje, pochodna po czasie, więc zastanów się, czy taki algorytm powinien wykonywać się w nieskończonej pętli najszybciej jak to możliwe.

Cytat z Wikipedii: "Regulator PD (ang. proportional-derivative controller) – w automatyce, regulator składający się z członu proporcjonalnego P o wzmocnieniu k_p, oraz różniczkującego D (fizycznie nierealizowalnego) o czasie różniczkowania T_d." To co jest napisane pogrubioną czcionką to jest właśnie ta pochodna? Szczerze to nie wiem o co z nią chodzi. Czy algorytm powinien wykonywać się w nieskończonej pętli najszybciej jak to możliwe? Chyba nie, bo potrzebuje czas na wyrównanie względem linii? Nie wiem dokładnie - to są moje gdybania/przemyślenia.

Co do aplikacji, brzmi podobnie do moich poczynań: https://www.forbot.pl/forum/topics7/line-follower-feniks2-vt5933.htm (końcówka 1 posta)

Nie ukrywam, że trochę patrzyłem na Twoją apkę 🙂 Skąd wziąłeś ten wykres? Bo fajnie byłoby go użyć właśnie do 16 czujników, gdzie jak jest logiczne 0 to wykres nic nie pokazuje, a jak jest logiczne 1, to wykres podnosi się do wartości 1.

Skąd wziąłeś ten wykres?

Sam już nie pamiętam - jednak mogę Ci zdradzić, bazując na moim doświadczeniu, że Delphi to zła droga 😉 Zmuś się lepiej od razu do C# lub Javy. Jest na forum artykuł jak stworzyć w C# aplikację do komunikacji przez RS232.

To co jest napisane pogrubioną czcionką to jest właśnie ta pochodna? Szczerze to nie wiem o co z nią chodzi. Czy algorytm powinien wykonywać się w nieskończonej pętli najszybciej jak to możliwe? Chyba nie, bo potrzebuje czas na wyrównanie względem linii? Nie wiem dokładnie - to są moje gdybania/przemyślenia.

Ogólnie mówiąc, człon różniczkujący reaguje na zmiany w czasie. Jeśli porównamy pozycję aktualną i poprzednią w kolejnym obiegu pętli, to robot nie zdąży zareagować i człon D wyniesie 0. Dlatego musisz "dać mu czas" na reakcję. Najprościej zrealizować to przez dodanie opóźnienia w pętli. Ile? 1,2,15, 50ms? Sprawdź sam 😉

  • Lubię! 1
Ogólnie mówiąc, człon różniczkujący reaguje na zmiany w czasie. Jeśli porównamy pozycję aktualną i poprzednią w kolejnym obiegu pętli, to robot nie zdąży zareagować i człon D wyniesie 0. Dlatego musisz "dać mu czas" na reakcję. Najprościej zrealizować to przez dodanie opóźnienia w pętli. Ile? 1,2,15, 50ms? Sprawdź sam 😉

Acha! Czyli muszę sobie sprawdzić ile tych ms opóźnienia dać na końcu pętli Do...Loop.

Sam już nie pamiętam - jednak mogę Ci zdradzić, bazując na moim doświadczeniu, że Delphi to zła droga 😉 Zmuś się lepiej od razu do C# lub Javy. Jest na forum artykuł jak stworzyć w C# aplikację do komunikacji przez RS232.

Kurczę, trochę szkoda, bo się trochę nakręciłem na Delphi 😃 i na taki debuger.

Acha! Czyli muszę sobie sprawdzić ile tych ms opóźnienia dać na końcu pętli Do...Loop.

Tak.

Kurczę, trochę szkoda, bo się trochę nakręciłem na Delphi i na taki debuger.

To zrób podobny w C#, edytor okienek w Visualu jest równie prosty.

Acha! Czyli muszę sobie sprawdzić ile tych ms opóźnienia dać na końcu pętli Do...Loop.

Tak.

No muszę się z Tobą nie zgodzić Treker. Zdecydowanie aixI powinien to zrobić na timerze, zwłaszcza jeśli robot ma robić coś więcej niż jeżdżenie po linii, a ma przesyłać dane po RSie.

(...) jednak mogę Ci zdradzić, bazując na moim doświadczeniu, że Delphi to zła droga Zmuś się lepiej od razu do C# lub Javy.

Delphi może nie jest idealne, ale do komunikacji po RSie się nadaje. Wystarczy zrobić dodatkowy wątek, który będzie odpowiedzialny za odbieranie ramek danych.

No muszę się z Tobą nie zgodzić Treker.

Ja napisałem, że to najłatwiejsze rozwiązanie. Chodzi o samą zasadę działania. Zresztą sam używałem kiedyś takiego rozwiązanie i nie narzekałem.

Delphi może nie jest idealne, ale do komunikacji po RSie się nadaje.

Zgadza się, tylko nie jest to prężnie rozwijający się język, skoro ktoś zaczyna, to lepiej od czegoś lepszego (jeśli jest taka możliwość). Tutaj, przy samym RSie, przeskok na C# nie będzie trudny.

Jak chodzi i Visual C# 2010 Express, to zrobiłem sobie podobny jak w Delphi szablon mojej apki - wygląda tak:

Na razie (tak jak w Delphi) działa tylko "Exit" 😃

Jak mam, np. "Suma wag z czujników:" to po dwukropku dać "Label'a", aby w nim wyświetlana była suma wag?, czy jakiegoś "Edit'a"? (pytam tak, gdyż nie wiem dokładnie jak by to miało wyglądać i działać).

Edit: Jak mam projekt w Visual'u już zapisany (i w ogóle), to czy jest możliwość (tak jak w Delphi) aby otworzyć tylko aplikacje, a nie zaraz cały projekt, w raz z edytorem i kodem?

Jak mam, np. "Suma wag z czujników:" to po dwukropku dać "Label'a", aby w nim wyświetlana była suma wag?, czy jakiegoś "Edit'a"? (pytam tak, gdyż nie wiem dokładnie jak by to miało wyglądać i działać).

To zależy tylko od Ciebie. Najrozsądniej, skoro nie będziesz edytował tych danych, umieścić tam "Labele".

Jak mam projekt w Visual'u już zapisany (i w ogóle), to czy jest możliwość (tak jak w Delphi) aby otworzyć tylko aplikacje, a nie zaraz cały projekt, w raz z edytorem i kodem?

Podczas kompilacji tworzy się program wykonywalny, znajdziesz go w katalogu "Relase" lub "Debug", zależy w jakim trybie budujesz program.

  • Lubię! 1

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