Wielowątkowa aplikacja konsolowa
Ostatnio zmodyfikowano 2017-03-21 22:35
Barol Temat założony przez niniejszego użytkownika |
Wielowątkowa aplikacja konsolowa » 2017-03-14 20:30:52 Witam wszystkich
Od kilku tyg pracuję na projektem na uczelnię: System autonomicznego sterowania robotem mobilnym Pioneer 3DX w środowisku biurowym. Krótko o docelowym działaniu programu: Laboratorium posiada kamerę typu "rybie oko" na środku podwieszone na suficie, za pomocą której rozpoznaje, lokalizuję i śledzę ruch robota. Robot posiada specjalny znacznik na sobie do identyfikacji. Na jego podstawie lokalizuję robota i orientuję(Pozycja x,y oraz kąt). Mam napisane wszystkie funkcje analizujące obraz, rozpoznanie robota, rozpoznanie przeszkód, maskowanie otoczenia, tworzenie grafu(siatka wolnego obszaru), 3 algorytmy szukające najkrótszej ścieżki w moim grafie(BFS, DFS, Dijktry), bezpośrednie sterowanie robotem w pętli zamkniętej ze sprzężeniem zwrotnym z kamery- jestem w trakcie pisania tego.
Mój problem polega na tym, że podczas ostatnich testów zorientowałem się, że potrzebuję w mojej aplikacji funkcjonalność wielowątkową dla obsługi: -prostego interfejsu użytkownika -ciągłej lokalizacji robota(do sprzężenia zwrotnego dla sterowania) -sterowania robotem
Jeżeli chodzi o interfejs to mogę jakoś obejść potrzebę oddzielnego wątku dla niego, ale lokalizacja robota i aktualizowanie pozycji (x,y,kąt) muszę mieć cały czas równolegle z sterowaniem robotem.
Niestety moja znajomość C++ i ogólnie programowania jest bardzo słaba i wątki już mnie przerosły. Utknąłem w tym punkcie a bez tego cała praca na marne.
Stąd moje pytanie do doświadczonych programistów:
Jak najlepiej rozwiązać to zagadnienie ?
Przeczytałem kilka tutoriali z wielowątkowości ale nie pojmuję tego, poza tym przykłady w tych tutorialach zajmują max 5 liniowe funkcje liczące jakieś pętle a moje wątki będą składać się z kilku bloków funkcji, z przetwarzaniem i analizą obrazu...
Bardzo proszę o pomoc Pozdrawiam |
|
pekfos |
» 2017-03-14 20:56:19 Nie ma znaczenia, czy wątek wykonuje naiwnego fibonacciego na 5 linii, czy jakąś większą masę kodu. Znaczenie mają punkty wspólne wątków, np jakiś wspólny zasób. Jeśli wątki są kompletnie od siebie niezależne, po prostu odpal ich funkcje przez jakieś std::thread i tyle, działa równolegle. Ale jeśli wątki są od siebie jakoś zależne, to może wystąpić cała gama różnych problemów i programowanie tego bez odpowiedniej wiedzy nie jest najlepszym pomysłem. |
|
Barol Temat założony przez niniejszego użytkownika |
» 2017-03-14 22:39:15 Niestety potrzebna jest niewielki obszar wymiany danych: Pozycja robota(x,y,kat), oraz obszar komend interfejsu. Widziałem że jest coś takiego jak Critical Section |
|
carlosmay |
» 2017-03-14 23:42:38 |
|
kmlkamilek |
» 2017-03-21 22:35:06 |
|
« 1 » |