Buduję automatyczny solver labiryntowy i używam kamery internetowej do kontrolowania mojego labiryntu.
W oparciu o sugestie z innych forów staram się obecnie kontrolować ruch kuli labiryntu przynajmniej w jednym kierunku. Próbuję więc kontrolować mój ruch piłki między dwiema współrzędnymi 466,288 i 466,152. Dane wejściowe na płytce sterownika silnika krokowego to czas, liczba kroków do obrotu dla każdej osi, tj. Xiy.
Płytka kontrolera silnika krokowego, której używam, to płyta kontrolna silnika krokowego egg bot: http://www.sparkfun.com/products/10025
Więc aby poruszać się między dwoma punktami, czy powinienem utworzyć kilka punktów pośrednich między dwoma punktami, mianowicie 288 i 152 (powiedzmy 260 240 230 ... 150) i poprawić mój ruch piłki?
Mój algorytm przetwarzania obrazu nie jest wystarczająco szybki, aby wyśledzić piłkę, którą po prostu zakręci się i wpadnie do dziury.
Niektórzy sugerowali, że używam standardowego szablonu, jak pokazano w poniższym filmie i koryguję ruchy piłki pod kątem odchyleń na ścieżce:
http://www.youtube.com/watch?v=Prq78ctJ2Rk&feature=player_embedded
Natknąłem się również na narzędzie do przetwarzania obrazu, w którym rozwiązali ten sam problem, wykorzystując punkty orientacyjne do ruchu piłki. Widząc zbyt wiele rozwiązań tego samego problemu, jestem całkowicie zagubiony w rozwiązaniu problemu. Wiem, że powinienem wdrożyć sterownik PID. Ale jak powinienem rozwiązywać problemy etapami? Utknąłem i po prostu sfrustrowałem się, gdy znalazłem przewagę w rozwiązaniu problemu.
Moja konfiguracja wygląda następująco:
... a oto zrzut ekranu mojego oprogramowania:
Wersja 2: Mam teraz do czynienia z nowym problemem: wcześniej kontrolowałem silniki krokowe za pośrednictwem apletu Java portu szeregowego Arduino. Jestem w stanie prowadzić steppery za pomocą apletu.
Muszę zresetować płytę za każdym razem, gdy próbuję komunikować się przez port szeregowy. Ponadto silnik krokowy zasila się w krótkich odstępach czasu, gdy nie jest do niego wysyłane żadne polecenie. Kiedy silnik krokowy wchodzi w ten tryb, nie mogę sterować moją płytą bez resetu płyty. Każda pomoc będzie mile widziana.
Wersja 3:
Poczyniłem pewne postępy, gdy wdrożyłem algorytm PID. Poniżej znajduje się wideo: http://www.youtube.com/watch?v=MEfp7RqPmqY
Teraz mam problem z prędkością, z jaką implementowany jest algorytm PID. Właściwie moje przetwarzanie obrazu kończy cykl w 200 ms, identyfikuje piłkę i wysyła polecenia na płytkę kontrolera silnika krokowego. Mimo że do mojego portu szeregowego wysyłane są polecenia zmiany kierunku, mój silnik krokowy obraca się w tym samym kierunku. Dziwne zachowanie można znaleźć na powyższym filmie.
Myślę, że powinienem ograniczyć wartości PID do pułapu, w przypadku gdy obliczona wartość PID jest większa niż 100, powinienem po prostu wysłać 100. Nie mogę się doczekać, aby usłyszeć wasze przemyślenia na ten temat.
Sposób, w jaki zaimplementowałem kontroler PID, polega na tym, że zidentyfikowałem punkt początkowy szablonu za pomocą algorytmu dopasowania szablonu i zidentyfikowałem piłkę za pomocą innego algorytmu dopasowania szablonu. Teraz przesunąłem piłkę do środka ciężkości szablonu punktu początkowego. Jak zmusić go do podążania po linii prostej za pomocą algorytmu PID?
Wersja 4:
Wyizolowałem trajektorię, ale nie jestem w stanie znaleźć właściwej funkcji do wydrukowania prawidłowych współrzędnych pikseli od punktu początkowego. jakieś pomysły?
Odpowiedzi:
Po pierwsze, ponieważ steppery są świetne w pozycjonowaniu (nie ma potrzeby uzyskiwania informacji zwrotnej o pozycji), z pewnością powinieneś ograniczyć ich ruch, jak sam powiedziałeś. Nie jestem pewien, jak w tej chwili zaprojektowano wał silnika, ale gdyby był on przymocowany do silnika, kontynuowanie wirowania groziłoby uszkodzeniem sprzętu.
Następnie opóźnienie transportu czujnika o 200 ms będzie prawdopodobnie zbyt wolne, w przeciwnym razie trzeba będzie znacznie spowolnić, aby spowolnić samą piłkę. Podobnie jak powiedział Rocket Surgeon , należy uprościć algorytm przetwarzania obrazu, aby obliczyć ścieżkę tylko raz , a następnie szybko obliczyć tylko położenie piłki w każdej klatce. Jeśli chcesz szybko pominąć ten krok, znajdź czerwoną kulkę zamiast tej, a następnie zaznacz tylko czerwony składnik na obrazie RGB, dopóki nie znajdziesz lepszego algorytmu.
W przypadku sterowania PID zacznij od tego, że tak naprawdę potrzebujesz dwóch oddzielnych sterowników PID, jednego dla silnika wschód-zachód, drugiego dla silnika północ-południe. Jeśli masz dwa dokładne silniki, ich parametry muszą być równe.
Aby regulator PID zadziałał, musi znać błąd : różnicę między pożądaną pozycją a rzeczywistą pozycją piłki. Składniki X i Y tego przesunięcia będą wejściami dla dwóch sterowników PID (po jednym dla każdego silnika). Aby uzyskać błąd, musisz najpierw mieć żądaną pozycję na swojej ścieżce: trajektorię .
Aby uzyskać trajektorię, musisz przetworzyć obraz i uzyskać ścieżkę , a także punkt początkowy i końcowy. Nie jestem pewien, czy twój algorytm jest teraz w stanie odróżnić ścieżkę od reszty planszy, ale jeśli nie, pamiętaj, że jest to własny algorytm do obsługi przed kontynuowaniem. Ponownie możesz pominąć tę część, ręcznie wprowadzając punkty połączenia, jeśli chcesz szybko zobaczyć niektóre wyniki. W każdym razie powinieneś być w stanie zdefiniować prędkość zadaną i pozwolić oprogramowaniu przesunąć pożądane położenie współrzędnych na ścieżce, od początku do końca. Oczywiście zaczniesz od niskiej pożądanej prędkości.
Dlatego przed rozpoczęciem kontroli należy najpierw przejrzeć następującą listę kontrolną:
Może się okazać, że lepiej jest utworzyć trajektorię po jednym segmencie na raz i przejść do następnego segmentu, gdy ta piłka zakończy poprzedni. W przeciwnym razie musisz uważać, aby piłka nie przekroczyła pożądanej trajektorii (co może być trudne do osiągnięcia)
źródło
Jeśli masz ustaloną pozycję dla odczytu kamery i mometarnego dla obu osi, nie musisz rozpoznawać pomalowanej ścieżki, otworów i ścian w ramkach. Można to zrobić jednym strzałem w czasie konfiguracji. W czasie wykonywania może być konieczne jedynie dokładne zlokalizowanie pojedynczej błyszczącej metalowej kuli.
Aby zlokalizować piłkę, możesz użyć 1 stałej podczerwieni LED i wąskopasmowego filtra w kamerze. Algorytm musi obliczyć najjaśniejszy piksel i przekształcić X, Y na rzeczywisty X, Y, biorąc pod uwagę następujące kroki:
Nie powinno to być intensywne obliczeniowo i zależy głównie od kilku wartości bezwzględnych.
Zwykle mały procesor powinien robić to z prędkością klatek na sekundę.
źródło