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?