KATEGORIE:

Ta strona wykorzystuje pliki cookies (ciasteczka) tylko w celu budowy statystyki odwiedzin. Możesz zablokować tę funkcję w swojej przeglądarce.




Pomiar odległości (014; 12.08.2009; arduino, processing)

 

 

 

Koncepcja pomiaru odległości oparta jest na wykorzystaniu analizy obrazu odebranego z kamery internetowej w środowisku Processing, oraz na precyzyjnym pomiarze kąta ustawienia wskaźnika laserowego za pomocą inkrementalnego enkodera optycznego. Przechodząc do konkretów, przedstawiam schemat układu:

 

 

Zasada działania.

Program napisany w środowisku Processing kontroluje cały przebieg pomiaru. Poprzez Arduino program zadaje ruch obrotowy wskaźnika tak, aby punkt świetlny przesuwał się powoli po obiekcie w prawą stronę. Obraz z kamery przekazywany jest na bieżąco do programu i przechodzi analizę obrazu (progowanie jasności kanałów RGB). Gdy punkt świetlny zostanie wykryty pośrodku obrazu program odczytuje wartość kąta alfa nastawienia wskaźnika. Znając odległość x między kamerą i wskaźnikiem można obliczyć odległość obiektu: L = x * tan(alfa).

 

 

Napęd.

Silnik prądu stałego przekazuje napęd paskiem gumowym na reduktor. Rolę reduktora obrotów w prototypie sprawuje...zegarek kwarcowy z usuniętą cewką. Zapewnia on bardzo duże przełożenie redukujące obroty(w stosunku 3600:1) niezbędne w tym zastosowaniu.

Ponieważ silnik wymaga pracy dwukierunkowej z regulacją prędkości zastosowałem mostek H (tzw. H - Bridge) na 6 tranzystorach. Zmontowałem go na płytce uniwersalnej stosując pierwsze lepsze (ale pasujące) używane elementy wg schematu:

 

 

Mostek sterowany jest sygnałami z dwóch wyjść PWM Arduino, pamiętać należy aby przy zmianie kierunku napędu najpierw zerować wypełnienie sygnału aktualnego kierunku, a następnie zadać wypełnienie sygnału sterującego drugim kierunkiem ruchu.

 

 

Kamera.

Do projektu użyć można właściwie najprostszej kamery internetowej, ważne jest jednak, aby częstotliwość przesyłania obrazu do komputera nie była mniejsza niż 25klatek/s, gdyż spowodować to może większy błąd pomiaru wynikający z niedokładnego wykrycia położenia środkowego punktu świetlnego. Zastosowana przeze mnie kamera ma automatyczny balans bieli, który czasem może przeszkadzać w czasie przetwarzania obrazu. Ręczna regulacja ostrości może skutkować rozmywaniem obrazu przy zmianie odległości od obiektu, gdyż nie wskazane jest ręczne regulowanie ostrości w czasie pomiarów.

 

 

Analiza obrazu.

Podstawową metodą wyróżnienia punktu świetlnego lasera z obrazu otrzymywanego z kamery jest progowanie kanałów R, G i B obrazu. Analizując każdy punkt obrazu rozbijam jego kolor na 3 składowe w formacie RGB, gdy wartość składowej jest mniejsza od założonej wartości progowej dokonuję jej zerowania. W czasie działa programu istnieje możliwość zmiany wartości progowej na bieżąco, tak aby uzyskać możliwie obraz czarny z jednym polem reprezentującym punkt świetlne.

Aktualnie program prowadzący pomiar dokonuje odczytu kąta w momencie, gdy choć jeden z pikseli koloru innego niż czarny pojawi się na pionowej linii pikseli pośrodku obrazu. Ten sposób pomiaru wymaga unikania silnego światła.

 

 

Pomiar kąta.

Do pomiaru kąta zastosowałem enkoder inkrementalny ze starej drukarki atramentowej. Tarcza enkodera posiada 1800 linii na obwodzie. Dioda enkodera zasilana jest z wyjścia cyfrowego Arduino (5V). Dwa wyjścia enkodera (z przesunięciem fazowym) podłączone zostały pod piny 2 i 3 Arduino, które mają możliwość wykrywania tzw. przerwań (interrupts), czyli zmian stanu logicznego wejścia. Dokładniejszy opis zasady działania i realizacji tego pomiaru przedstawię w innym artykule, podam tu jednak, że dla tego pomiaru uzyskujemy działkę kąta równą 0,05 stopnia.

 

 

Błędy pomiaru.

Kamera internetowa przesyła próbki obrazu z pewną częstotliwością, zatem istotne dla wykrywania chwili centralnego położenia punktu świetlnego jest, aby odebranie i przetworzenie obrazu trwało jak najkrócej, oraz aby punkt przemieszczał się jak najwolniej. Warto zwrócić uwagę, że prędkość przemieszczania się punktu po obiekcie jest tym większa im większy jest kąt alfa, oraz że prędkość przemieszczania się punktu po obrazie liniowo maleje wraz ze wzrostem odległości kamery od obiektu.

Błąd pomiaru powodować może również opóźnienie pomiędzy odczytaniem przez program położenia środkowego punktu świetlnego, a odebraniem przez Arduino informacji z programu, że należy przesłać do niego aktualną wartość kąta.

Założyć możemy, że błąd odczytu kąta równy jest rozdzielczości tego pomiaru: 0,05 stopnia. Odległość zależy od kąta według funkcji tangens, więc rozdzielczość mierzonej odległości będzie rosła wedle tejże funkcji. Przykładowy przebieg zależności zmierzonej odległości L i błędu pomiaru dla wartości x=200mm przedstawia wykres:

W zależności od zamierzonego zakresu pomiarowego można dobrać odległość x między wskaźnikiem a kamerą, oraz ustalić błąd pomiaru.

Odnosząc błąd pomiaru do wartości odległości i wyrażając go w procentach otrzymamy zależność na błąd względny:

Wartość błędu względnego nie zależy od wartości kąta lecz tylko od rozdzielczości pomiaru kąta i jak widać najmniejszy błąd osiągamy przy kącie 45 stopni.

 

 

Prototyp.

Opisany układ w formie prototypu przedstawia się następująco:

 

 

Wideo prezentujące przebieg pomiaru:

 

Distance meter from MyInventions on Vimeo.

 

 

Jeśli chodzi o kody źródłowe - są one wersją roboczą (jak to przy prototypach), więc nie zostaną tu przytoczone, jednak w kolejnych artykułach przybliżać będę dokładnie metody przetwarzania obrazu w środowisku Processing, sterowanie silnikiem DC, oraz pomiar z zastosowaniem enkodera inkrementalnego.

 

 

I co dalej?

Idea opisanego pomiaru odległości może zostać zastosowana do wykonania skanera 3D. W zależności od wyboru wielkości przedmiotu i odległości pomiaru niezbędny byłby dodatkowy napęd w celu zmiany kąta w poziomie i pionie, aby dokonywać pomiarów kolejnych punktów obiektu. Innym sposobem może być zastosowanie obrotowego i podnoszonego stołu, na którym ustawiano by obiekt do skanowania.

Oczywistym jest, jednak że wykonanie skanera 3D zrealizować można dużo precyzyjniej np. za pomocą wyświetlania na obiekt siatek i analizy obrazu wykonanego z innego kierunku, zastosowaniem czujników laserowych, ultradźwiękowych, podczerwonych.

 

 

 

Pobierz ten artykuł w formacie pdf: PDF

 

© Copyright Sebastian Korczak 2009 - 2017