MICHAŁ PODPORA, ZBIGNIEW ZAJĄC Wydział Elektrotechniki, Automatyki i Informatyki Instytut Automatyki i Informatyki



Podobne dokumenty
Automatyczne tworzenie trójwymiarowego planu pomieszczenia z zastosowaniem metod stereowizyjnych

PRACA PRZEJŚCIOWA SYMULACYJNA. Zadania projektowe

2.2 Opis części programowej

Standard transmisji równoległej LPT Centronics

Politechnika Wrocławska

Zastosowanie stereowizji do śledzenia trajektorii obiektów w przestrzeni 3D

Laboratorium Sterowania Robotów Sprawozdanie

Analogowy sterownik silnika krokowego oparty na układzie avt 1314

Manipulator OOO z systemem wizyjnym

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

PRZEWODNIK PO PRZEDMIOCIE

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Pracownia Transmisji Danych, Instytut Fizyki UMK, Toruń. Instrukcja do ćwiczenia nr 10. Transmisja szeregowa sieciami energetycznymi

Laboratorium Napędu robotów

Kinematyka manipulatora równoległego typu DELTA 106 Kinematyka manipulatora równoległego hexapod 110 Kinematyka robotów mobilnych 113

Tworzenie szablonów użytkownika

PRZEWODNIK PO PRZEDMIOCIE

Edukacyjny sterownik silnika krokowego z mikrokontrolerem AT90S1200 na płycie E100. Zestaw do samodzielnego montażu.

Instrukcja obsługi AP3.8.4 Adapter portu LPT

Efekty kształcenia na kierunku AiR drugiego stopnia - Wiedza Wydziału Elektrotechniki, Automatyki i Informatyki Politechniki Opolskiej

Xelee Mini IR / DMX512

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych

INSTRUKCJA OBSŁUGI. Przekaźnik czasowy ETM ELEKTROTECH Dzierżoniów. 1. Zastosowanie

Opracował: Jan Front

Lista zagadnień kierunkowych pomocniczych w przygotowaniu do egzaminu dyplomowego magisterskiego Kierunek: Mechatronika

Aplikacja z zastosowaniem czujnika wizyjnego LightPix z pakietem softwarowym Pattern Matching

Część II Wyświetlanie obrazów

Modułowy programowalny przekaźnik czasowy firmy Aniro.

Mechatronika i inteligentne systemy produkcyjne. Aktory

mh-e16 Moduł logiczny / szesnastokanałowy sterownik rolet / bram / markiz. systemu F&Home.

Wprowadzenie do teorii systemów ekspertowych

Przełącznik KVM USB. Przełącznik KVM USB z obsługą sygnału audio i 2 portami. Przełącznik KVM USB z obsługą sygnału audio i 4 portami

AP3.8.4 Adapter portu LPT

Analiza mechanizmu korbowo-suwakowego

Sterownik Spid Pant 8 i Ant 8. Podręcznik użytkowania

Instrukcja obsługi. Karta video USB + program DVR-USB/8F. Dane techniczne oraz treść poniższej instrukcji mogą ulec zmianie bez uprzedzenia.

WIZUALIZACJA I STEROWANIE ROBOTEM

Elastyczne systemy wytwarzania

Przetwarzanie obrazów rastrowych macierzą konwolucji

Algorytmy sztucznej inteligencji

Rok akademicki: 2015/2016 Kod: RME s Punkty ECTS: 12. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

gdmss Lite Android DVR Mobile Client Instrukcja obsługi oprogramowania

1. Cel ćwiczenia. 2. Podłączenia urządzeń zewnętrznych w sterowniku VersaMax Micro

Szybkie prototypowanie w projektowaniu mechatronicznym

Ćwiczenie 1. Symulacja układu napędowego z silnikiem DC i przekształtnikiem obniżającym.

ScrappiX. Urządzenie do wizyjnej kontroli wymiarów oraz kontroli defektów powierzchni

ASTOR IC200ALG320 4 wyjścia analogowe prądowe. Rozdzielczość 12 bitów. Kod: B8. 4-kanałowy moduł ALG320 przetwarza sygnały cyfrowe o rozdzielczości 12

MatliX + MatliX MS. Urządzenie do wizyjnej kontroli wymiarów oraz kontroli defektów powierzchni

PhoeniX. Urządzenie do wizyjnej kontroli wymiarów oraz kontroli defektów powierzchni

studia na WETI PG na kierunku automatyka i robotyka Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej 1

System wizyjny OMRON Xpectia FZx

SYSTEMY CZASU RZECZYWISTEGO (SCR)

Skanowanie trójwymiarowej przestrzeni pomieszczeñ

LABORATORIUM PRZEMYSŁOWYCH SYSTEMÓW STEROWANIA

PRACA DYPLOMOWA MAGISTERSKA

Plan wykładu. 1. Urządzenia peryferyjne 2. Rodzaje transmisji danych 3. Interfejs COM 4. Interfejs LPT 5. Plug and Play

PRZEWODNIK PO PRZEDMIOCIE

Instrukcja do oprogramowania ENAP DEC-1

Uwaga! Upadek! Opis zadania konkursowego

AKADEMIA MORSKA KATEDRA NAWIGACJI TECHNICZEJ

Laboratorium Komputerowe Systemy Pomiarowe

Symulacja działania sterownika dla robota dwuosiowego typu SCARA w środowisku Matlab/Simulink.

Laboratorium Komputerowe Systemy Pomiarowe

PRZEWODNIK PO PRZEDMIOCIE

INSTRUKCJA INSTALATORA

Wizualizacja płomienia

Rozszerzony konspekt przedmiotu Inteligentne maszyny i systemy

Badanie właściwości wysokorozdzielczych przetworników analogowo-cyfrowych w systemie programowalnym FPGA. Autor: Daniel Słowik

Minimalna wspierana wersja systemu Android to zalecana 4.0. Ta dokumentacja została wykonana na telefonie HUAWEI ASCEND P7 z Android 4.

Sztuczna Inteligencja Tematy projektów Sieci Neuronowe

Politechnika Poznańska Instytut Technologii Mechanicznej. Laboratorium MASZYN I URZĄDZEŃ TECHNOLOGICZNYCH. Nr 2

Scenariusz lekcji Ozobot w klasie: Spacer losowy po układzie współrzędnych

Sterownik LED WIFI RGB 12V, 24V 12A + pilot dotykowy

LABORATORIUM PRZEMYSŁOWYCH SYSTEMÓW STEROWANIA

STEROWNIKI PROGRAMOWALNE OBSŁUGA AWARII ZA POMOCĄ STEROWNIKA SIEMENS SIMATIC S7

PUKP Programowanie urządzeń kontrolno-pomiarowych. ztc.wel.wat.edu.pl

Automatyczne Drzwi Do Kurnika Kur-1

PRZEWODNIK PO PRZEDMIOCIE

STEROWNIK TUBY LED STM-64

1. Opis urządzenia. 2. Zastosowanie. 3. Cechy urządzenia -3-

1. Podstawowe wiadomości Możliwości sprzętowe Połączenia elektryczne Elementy funkcjonalne programów...

Wersja polska. Wstęp. Zawartość opakowania. Uwaga! WC002 Sweex USB Webcam 100K with Microphone

Badanie napędu z silnikiem bezszczotkowym prądu stałego

Wersja polska. Wstęp. Zawartość opakowania. Uwaga! WC030 Sweex Webcam 300K with Microphone USB

Laboratorium z Napęd Robotów

Instrukcja obsługi GEN2 Regulowany generator przebiegów prostokątnych

Podstawy robotyki - opis przedmiotu

Tworzenie prezentacji w MS PowerPoint

Wizualizacja stanu czujników robota mobilnego. Sprawozdanie z wykonania projektu.

Informatyka studia stacjonarne pierwszego stopnia

Systemy uczące się Lab 4

3.2 INFORMACJE OGÓLNE O UKŁADACH WEJŚĆ/WYJŚĆ ODDALONYCH SMARTSTIX I/O

Sieciowe Sterowanie Robotem Przemysłowym KUKA KR3 Sprzężonego z Systemem Wizyjnym oraz Systemem Rozpoznawania Mowy

Rzeczywistość rozszerzona: czujniki do akwizycji obrazów RGB-D. Autor: Olga Głogowska AiR II

Młody inżynier robotyki

Eura-Tech. Instrukcja Obsługi Aplikacji Mobilnej

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

SPIS TREŚCI PRZEDMOWA WYKAZ WAŻNIEJSZYCH OZNACZEŃ 1. PODSTAWOWE INFORMACJE O NAPĘDZIE Z SILNIKAMI BEZSZCZOTKOWYMI 1.1. Zasada działania i

Laboratoryjne zasilacze programowalne AX-3003P i AX-6003P

Transkrypt:

MICHAŁ PODPORA, ZBIGNIEW ZAJĄC Wydział Elektrotechniki, Automatyki i Informatyki Instytut Automatyki i Informatyki STEROWANIE RUCHEM SYSTEMU WIZYJNEGO WRAZ Z PRZYKŁADOWĄ IMPLEMENTACJĄ STARTER KIT SIECI NEURONOWYCH DLA ROBOTYKA Streszczenie: W niniejszym artykule autorzy opisują wykonany przez siebie prototyp systemu wizyjnego składającego się z dwóch kamer, układu sterowania silnikami krokowymi oraz specjalnie zaprojektowanej aplikacji. Prototyp ten został zaprojektowany jako starter-kit dla osób chętnych do rozpoczęcia swojej przygody ze sztucznymi sieciami neuronowymi. Zastosowanie dwóch kamer pozwala na nawet bardzo zaawansowane zastosowania, jak stereowizja i ruch w trzech wymiarach. 1. WSTĘP Efektywne pozyskiwanie informacji o otaczającej rzeczywistości jest kluczowym problemem w projektowaniu algorytmów sterowania autonomicznych robotów mobilnych. Jednym z najbardziej potężnych rozwiązań jest wykorzystanie systemów wizyjnych. Znacząco zwiększają one możliwości robotów, jednakże większe możliwości wiążą się z większą złożonością algorytmów i ze zwiększonym obciążeniem procesora. Zwiększenie ilości danych wejściowych pociąga za sobą potrzebę zastosowania bardziej wydajnej jednostki obliczeniowej, często wielordzeniowej lub wieloprocesorowej. Alternatywę dla wysoko wyspecjalizowanych, złożonych algorytmów stanowią sztuczne sieci neuronowe (SSN) [3]. Stosowane od wielu lat przez wielu naukowców posiadają opinię narzędzia, które potrafi znaleźć rozwiązanie nie znając dokładnych zależności [5], a jedynie przykładowe prawidłowe (i nieprawidłowe) rozwiązania. Sieci te potrafią wskazać wynik (dawać odpowiedź na wyjściu) z zaskakującą szybkością. Powszechnie stosowanym rozwiązaniem jest dodatkowo połączenie sztucznych sieci neuronowych z logiką rozmytą, co łagodząc wymogi precyzji tworzy bardzo interesujący mechanizm wnioskowania [4]. Głównym celem przyświecającym autorom tej realizacji, było stworzenie narzędzia umożliwiającego eksperymentowanie ze sztucznymi sieciami neuronowymi, a niniejsza praca stanowi swego rodzaju wprowadzenie do eksperymentów z opisanym tu prototypem, skierowane do studentów dyscyplin pokrewnych Automatyce i Robotyce. W artykule opisano zarówno wytworzoną aplikację, jak i wspomniany prototyp robota składający się z kamer internetowych, mechaniki (silników krokowych i przekładni), elektroniki (układ sterowania i optoizolacja) oraz aplikacji sterującej za pomocą silników ruchem kamer. Głównym celem tej aplikacji jest umożliwienie innym programistom rozpoczęcie swojej przygody z tworzeniem sztucznych sieci neuronowych.

Zadanie postawione przed programistą to uzupełnienie kodu aplikacji (bazując na predefiniowanych wejściach i wyjściach) o fragmenty kodu tworzące, uczące i odpytujące sieć neuronową. Programista ma do dyspozycji wejścia (obraz z dwóch kamer oraz szablony wzorców do rozpoznawania) i wyjścia sieci neuronowej (podgląd obrazu w czasie przetwarzania, podgląd obrazu po przetworzeniu, funkcje sterujące silnikami i laserem) przygotowane w możliwie najbardziej intuicyjny sposób. Niniejszy artykuł w atrakcyjny sposób demonstruje przydatność sieci neuronowych do rozpoznawania kilku predefiniowanych wzorców. Obiekty są wyszukiwane na obrazie pozyskiwanym z dwóch kamer i oznaczane światłem lasera jako potwierdzenie znalezienia wzorca. Artykuł ten oparty jest na doświadczeniach zdobytych przy pracy z układem dwóch silników krokowych pozwalających na obroty w poziomie i pionie kamer i lasera. Silniki krokowe, pozwalające na ruch w dwóch płaszczyznach, są sterowane przez aplikację przy użyciu portu LPT do komunikacji z elektroniką i mechanizmami wykonawczymi. 2. KONSTRUKCJA ELEKTRYCZNO-MECHANICZNA Sterowanie silnikami odbywa się przez port LPT, wykorzystywany w trybie jednokierunkowym [1]. W celu zwiększenia ilości możliwych do podłączenia urządzeń (np. silników) zdecydowano się na użycie dwóch buforów typu D, sterowanych sygnałami STROBE i INT. W ten sposób uzyskano możliwość sterowania nawet do 16 urządzeń. Założenia projektowe idealnie spełnia programowany moduł wejścia-wyjścia AVT-440. Układ 440 nie posiada optoizolowanych wejść i wyjść, dlatego w celu ochrony portu LPT komputera elektronika układu jest zasilana z baterii o napięciu 9V. Do symulacji pracy silników krokowych w pierwszej fazie konstrukcji wykorzystano diody LED jako informację o sygnałach sterujących. Następnym etapem było przygotowanie optoizolowanego układu z końcówką mocy o parametrach napięcia do 20V i prądzie do 2A. Zatrzaskiwanie danych odbywa się poprzez podanie sygnału wysokiego na wejście sygnału zegarowego bufora. Rys. 1. Schemat układu AVT 440 sterującego silnikami krokowymi oraz laserem.

Port LPT może działać w trzech głównych standardach: SPP (Standard Parallel Port) najstarszy i o najwolniejszym transferze (do 150 kb/s), EPP (Enhanced Parallel Port) dodano obsługę sprzętową portu, wzrost prędkości do 1 MB/s, ECP (Extended Capability Port) dodana obsługa transmisji danych przez kanał DMA oraz wzrost prędkości do 2 MB/s Podłączenie programowalnego modułu AVT-440 obywa się przy pomocy kabla DB-25 Centronics. Aplikacja wykorzystująca do sterowania port LPT została napisana w środowisku C++ Builder, dodatkowo została wykorzystana biblioteka WinIo [7], umożliwiająca wysyłanie i odbieranie danych z portu LPT. W starszych systemach operacyjnych istniała możliwość bezpośredniego wysyłania danych do urządzeń. W obecnie stosowanych systemach operacyjnych w komunikacji pomiędzy sprzętem a aplikacją pośredniczy system operacyjny. Zastosowanie sterownika WinIo umożliwia aplikacji bezpośrednie komunikowanie się z portem LPT. W aplikacji sterującej zostały użyte następujące funkcje: InitializeWinIo inicjacja sterownika WinIo podczas startu aplikacji, ShutdownWinIo odłączenie sterownika WinIo podczas kończenia programu, SetPortVal wysłanie na port danej typu byte, word lub dword. Całość sterowania silnikami poprzez port została zawarta w klasie języka C++. Do poprawnego działania klasa ta potrzebuje komponentu TTimer, który w zdarzeniu OnTime wysyła sygnały sterujące na port LPT. W czasie testów interwał czasowy był zmniejszany aż do 1ms (wartość teoretyczna opóźniana przez system operacyjny), zapewniając poprawne sterowanie silników krokowych bez obciążenia. Zakres częstotliwości komutacji >500 PPS (ang. pulse per second) dla zastosowanego silnika PM55L (oś pionowa) jest wartością powyżej której moment obrotowy silnika jest bliski zeru. Dla silnika PM35L (oś pozioma) granica ta jest wyższa i wynosi 800 PPS. W celu uproszczenia wykonania prototypu, pominięto obliczenia dynamiki układu kinematycznego silników z przekładniami, kamerami, platformą i wskaźnikiem laserowym. Przyjęto doświadczalną wartość PPS=4. Biblioteka WinIo pozwala na inicjację obsługi tylko jednej aplikacji wykorzystującej port LPT.

Rys. 2. Schemat ogólny konstrukcji [opracowanie własne - M.Podpora] Obrót kamer i wskaźnika laserowego zapewniają dwa silniki krokowe o nominalnej ilości kroków 48 (7,5 ) na obrót. Silnik krokowy PM55L-048 realizuje obroty w osi pionowej poprzez przekładnię zębatą dwustopniową. Silnik PM35L-048 realizuje obroty w osi poziomej poprzez przekładnię ślimakową. W czasie wykonywania prób sterowania silnikami stwierdzono możliwość sterowania półkrokowego, dzięki czemu zwiększono dokładność pozycjonowania do 96 kroków na obrót (3,75 ). Istotną właściwością układu kinematycznego osi poziomej jest samohamowność przekładni ślimakowej. Zanik zasilania na uzwojeniach silnika nie spowoduje zmiany położenia kamer i wskaźnika laserowego. Sterowanie półkrokowe ma istotną wadę jeden z cykli jest wykonywany tylko na jednym uzwojeniu silnika i nie wykorzystuje w pełni momentu obrotowego jaki może osiągnąć silnik. Zdecydowano się na sterowanie pełnokrokowe, a dokładność pozycjonowania będzie zapewniona dzięki zastosowaniu przekładni zębatych. Dokładność pozycjonowania wskaźnika laserowego można obliczyć w oparciu o dokładność pozycjonowania lasera (wynikającą z przełożenia przekładni zębatych), odległości kamer od celu oraz zastosowanej rozdzielczości akwizycji obrazu. Rozdzielczość obrazu z kamer można uznać za stałą i wynoszącą 320x240 pikseli dla każdej z kamer. W wyniku obliczeń, stwierdzono, że przełożenie dla osi pionowej wynosi 20, kąt pozycjonowania części biernej przekładni wynosi 0.375. Dla płaszczyzny poziomej przełożenie wynosi 55, a kąt pozycjonowania części biernej 0.136. Wyliczona dokładność pozycjonowania może być zakłócona przez niedokładność wykonania elementów przekładni. Podczas prób okazało się, iż problem niedokładności w wykonanym prototypie nie ma znaczącego wpływu

na dokładność pozycjonowania wskaźnika laserowego. Wyliczone kąty możemy przyjąć jako podstawę do wyliczenia długości skoków na każdej osi, które im mniejsze, tym dokładniejsze jest pozycjonowanie wskaźnika laserowego. Poniższa tabela zawiera przykładowe długości skoków. Odległość [mm] 500 1000 1500 2000 Długość kroku w poziomie [mm] 3.27 6.55 9.82 13.09 Długość kroku w pionie [mm] 1.19 2.37 3.56 4.75 Tabela 1. Długości kroków wynikające z ruchu krokowego w osiach, w funkcji odległości lasera od tej powierzchni sferycznej. Najlepsze wyniki osiąga się dla położenia zerowego lasera pod kątem prostym do płaszczyzny pobieranego obrazu. Dla powierzchni sferycznej osiągana dokładność jest stała i zbliżona do prostokąta, dla powierzchni płaskich pola te nie będą już prostokątne tylko bardziej zniekształcone do postaci rombu, trapezu lub innych figur czworokątnych. Dokładne określenie pozycji lasera jest możliwe przy przekształceniu z danych sferycznych na kartezjańskie. Uwzględniając rozdzielczość kamer, zastosowana mechanika pozwala na sterowanie laserem: - w zakresie kątów dla obrotu wokół osi pionowej około 80 - dla obrotu wokół osi poziomej około 34. Pozwala to na osiągnięcie dokładności rzędu 4 pikseli w poziomie i 1 piksela w pionie. Przedstawienie dokładności w jednostkach obrazowych (pikselach) zostało celowo wprowadzone w celu określenia zależności pomiędzy rozdzielczością kamer a wartościami rzeczywistymi szerokości i wysokości pobieranego obrazu. W publikacji założono, że pobierany przez kamery obraz jest wolny od zniekształceń sferycznych. Rys. 3. Projekt oraz wykonanie konstrukcji mechanicznej. [wizualizacja: opracowanie własne - Z.Zając ; fotografia: Anna Zając, zamieszczono za zgodą autora]

3. APLIKACJA Aby wykorzystać możliwości tej konkretnej realizacji praktycznej wynikające z jej konstrukcji mechanicznej oraz funkcje sterujące poszczególnymi silnikami, należało stworzyć aplikację, która stanie się interfejsem pomiędzy programistą a mechaniką. Mając na uwadze specyfikę zadania postawionego aplikacji (umożliwianie swobodnego eksperymentowania ze sztucznymi sieciami neuronowymi) już sam wygląd interfejsu użytkownika (rysunek 4) w prosty i czytelny sposób prezentuje najważniejsze aspekty przetwarzanego strumienia danych. Dane wejściowe aplikacji stanowi strumień wideo pochodzący z dwóch kamer (widać to w górnej części rysunku 4). Możliwe jest korzystanie z pojedynczej kamery, wówczas drugie źródło (bez zainicjalizowanej kamery) będzie przekazywało czarny ekran. Obraz z kamer/kamery przekazywany jest na powierzchnię (Tpanel!Canvas) panelu pierwszego i/lub panelu drugiego z użyciem tzw. uchwytu (ang. handle) jest to najszybszy istniejący programowy mechanizm prezentacji źródła na formatce. Od tego momentu poszczególne klatki obrazów przetwarzane są cyklicznie, w odstępach czasowych wynikających z wydajności systemu. W pierwszym kroku zawartość powierzchni paneli kopiowana jest na wspólną globalnie zdefiniowaną wirtualną powierzchnię ponieważ dla przyspieszenia obliczeń rozdzielczość obrazu pozyskiwanego z kamer predefiniowano na 320x240 pikseli, wspólna (panoramiczna) powierzchnia ma rozmiary 640x240 pikseli. W drugim kroku powierzchnia ta jest konwertowana na postać trójwymiarowej macierzy (640x240x3 gdzie 3 oznacza kolory składowe: czerwony, niebieski, zielony). Można przyspieszyć działanie aplikacji rezygnując z informacji o kolorze i tworząc monochromatyczną (dwuwymiarową) macierz, ale w ten sposób część informacji zostanie utracona a więc rozpoznawanie zadanych obiektów może być znacznie trudniejsze często informacja o kolorze jest informacją kluczową (jak w przypadku sygnalizacji świetlnej na skrzyżowaniu). Podczas wspomnianych konwersji ma miejsce dodatkowa korekta jasności i kontrastu aby poprawić wyrazistość obrazu. Zabieg ten jest wymuszony między innymi tym, że sprzętowa korekta automatycznego balansu bieli ma pewne swoje ograniczenia gdy kamera przechwytuje obraz bardzo jasny, wówczas automatyczny balans bieli obniża poziom jasności, niestety na obrazie wynikowym obiekty o kolorze czarnym są zbyt jasne, również obiektów o kolorach jasnych (białych) jest zbyt wiele. Podobnie sprawa wygląda w przypadku przechwytywania obrazu niedoświetlonej scenerii wszystko jest zbyt ciemne, białe obiekty są żółte lub różowe zamiast białe. Trzecia powierzchnia, również panoramiczna 640x240 pikseli, pozostaje do dyspozycji programisty (eksperymentującego z sieciami neuronowymi) dokładniej zostanie opisana w następnym rozdziale.

Po prawej stronie interfejsu użytkownika dostępnych jest kilka sekcji umożliwiających ręczne lub automatyczne (z wykorzystaniem dowolnie implementowalnego algorytmu decyzyjnego) kontrolowanie pracy silników, jak również kilka komponentów umożliwiających zmianę niektórych parametrów algorytmu. Przyciski ręcznego sterowania silników (nieaktywne w trybie sterowania automatycznego) pokazują w którą stronę powinien przesuwać się obraz w wyniku pracy silników (symbol literowy umieszczony na danym przycisku staje się pogrubiony i podkreślony podczas pracy danego silnika w określonym kierunku). Rys. 4. Interfejs użytkownika [opracowanie własne - M.Podpora]

Do parametrów algorytmu, jakie może zmieniać programista, należy przede wszystkim rodzaj wzorca (rysunek 5) jaki ma rozpoznawać projektowana sieć neuronowa, oraz jego barwa (czarno-biały, czerwono-biały, zielono-biały, niebiesko-biały). Można również korygować automatycznie dobrany wspólny współczynnik korekcji jasności i kontrastu (jeżeli zdaniem programisty zostały dobrane nieprawidłowo, lub zmieniły się znacząco warunki oświetlenia sceny lub wzorca). Pomijając przycisk exit kończący pracę aplikacji oraz przycisk debug wyświetlający historię pracy aplikacji (tzw. log), tylko jedna sekcja nie została omówiona powyżej przycisków exit i debug jest wolne miejsce, na którym programista może umieszczać swoje komponenty, jeżeli uzna to za potrzebne. Rys. 5. Predefiniowane wzorce które sieć może rozpoznawać w obrazie [opracowanie własne - M.Podpora] 4. WEJŚCIA SIECI NEURONOWEJ W poprzednim rozdziale wspomniano, że źródło obrazu do rozpoznawania dostępne jest w postaci trójwymiarowej macierzy 640x240x3 (szerokość wysokość kolory). Oprócz źródła dostępny jest zestaw wzorców (rysunek 5) z których jeden wybrany za pomocą myszki jest wyświetlony na powierzchni komponentu Image3!Canvas. Powierzchnia ta została pomyślana jako miejsce pozyskiwania danych treningowych dla sieci neuronowej. Dzięki temu eksperymentowanie z własną sztuczną siecią neuronową staje się o wiele łatwiejsze wszystko co potrzebne jest już w aplikacji przewidziane. Wystarczy wykonać następujące czynności: 1) zaprojektować i zaimplementować sieć neuronową według własnego pomysłu, 2) przy użyciu dowolnego algorytmu przeprowadzić uczenie sieci bazując na wzorcu prezentowanym na Image3!Canvas (o wymiarach 50x50 pikseli), 3) rozpocząć analizowanie źródła (danych przechowywanych we wspomnianej trójwymiarowej macierzy) 4) zaprezentować wynik działania sieci (omówione w następnym rozdziale) W przypadku zaimplementowanego testowo algorytmu (prezentującego przykładowy sposób wykorzystania i działania stworzonego przez autorów narzędzia), w dolnym prawym rogu dolnej panoramicznej powierzchni

(rysunek 4) pokazane jest aktualne rozlokowanie przestrzenne i wagi poszczególnych neuronów (kropka biała symbolizuje neuron aktywowany kolorem białym, czarna czarnym), a cała pozostała część tej powierzchni reprezentuje odpowiedź sieci dla danego punktu w źródle. Przykładowo w punkcie o współrzędnych (50,50) na trzeciej płaszczyźnie postawiony będzie punkt biały, jeżeli obszar prostokątny (jak na rysunku 6) będzie idealnie zgodny z aktywnym wzorcem, natomiast czarny jeżeli obszar będzie całkowitym przeciwieństwem (negatywem) danego wzorca. Oczywiście należy zadać pewną wartość progową określającą czy w danym punkcie wzorzec rozpoznano, czy nie. To zadanie klasyfikacji może być również wykonywane przez dowolnie zaprojektowaną sieć neuronową. Rys. 6. Przykładowe wykorzystanie Image2!Canvas do podglądu działania algorytmu rozpoznającego [opracowanie własne - M.Podpora] 5. WYJŚCIA SIECI NEURONOWEJ Programista-projektant sieci neuronowej może w stworzonym przez autorów narzędziu w rozmaity sposób prezentować wyniki działania swojego rozwiązania. Może na przykład edytować wspomnianą trójwymiarową macierz obrazu źródłowego (na przykład narysować ramkę albo zaznaczyć współrzędne) macierz ta jest bowiem wizualizowana na środkowym panelu każdorazowo po zakończeniu analizy kolejnej klatki obrazu (rysunek 4). Innym rozwiązaniem jest (całkowicie dowolne) wykorzystanie dolnego panelu (rysunek 6). Jeżeli natomiast programista-projektant sieci dysponuje nie tylko samym programem, ale również częścią mechaniczną stworzonego przez autorów narzędzia, wówczas ma możliwość wykorzystania (mówiąc w dużym uproszczeniu) silników jako wyjścia sieci neuronowej. Przewidziano bardzo prosty mechanizm sterowania mechaniką wystarczy uruchomić funkcję: Rotate(bool góra, bool lewo, bool dół, bool prawo, int liczba_kroków);. Odpowiednie parametry funkcji oznaczają możliwe kierunki obrotu osi silników, ostatni parametr oznacza liczbę kroków silnika krokowego lub jeśli będzie tu wartość 0 tryb pracy ciągłej. Przykładowo po uruchomieniu funkcji

Rotate w następujący sposób: Rotate(false,true,false,false,10); jeden z silników wykona 10 kroków i zatrzyma się, tak że kamery systemu wizyjnego zostaną skierowane o pewien kąt w lewą stronę (kąt ten zależy od silnika krokowego i zastosowanych przekładni zębatych). Jeżeli przed wykonaniem wszystkich 10 kroków zostanie zakończona analiza kolejnej klatki obrazu źródłowego, kolejne wywołanie funkcji Rotate zresetuje poprzedni rozkaz i od nowa zaprogramuje ruch silników, lub je zatrzyma. Zatrzymanie silników następuje w wyniku zakończenia wykonywania sekwencji z komendy Rotate (i braku kolejnej komendy) lub w wyniku wywołania funkcji Rotate z następującymi parametrami: Rotate(false,false,false,false,0);. Do dyspozycji jest również wskaźnik laserowy jeżeli zadaniem aplikacji jest wskazać jakiś obiekt/wzorzec w otoczeniu robota, można do tego celu wykorzystać zainstalowany w prototypie laser. Funkcja Laser(bool włączony); obsługuje zarówno załączanie jak i wyłączanie lasera. 6. WNIOSKI, MOŻLIWE ZASTOSOWANIA Narzędzie stworzone przez autorów w postaci mechaniki i aplikacji z nadwyżką spełnia stawiane mu pierwotnie wymagania. Osoba chętna do eksperymentowania z sztucznymi sieciami neuronowymi może w tym narzędziu odnaleźć bardzo dobry punkt wyjściowy do tworzenia sieci. Aplikacja stwarza ku temu sprzyjające warunki oferując przejrzyste, czytelne i przyjazne użytkownikowi struktury i funkcje. Dzięki temu podejściu nie tylko podłączanie wejść i wyjść tworzonej sieci jest łatwe i intuicyjne, ale również postać tych struktur i funkcji nie determinuje rozwiązania jakie musiałby przyjąć użytkownik. Sposób pozyskania danych dla sieci (jak i wizualizacji stanu jej wyjść) jest bardzo elastyczny programista ma tutaj całkowitą swobodę. Istotnym jest również fakt, że aplikacja została stworzona w taki sposób, aby możliwe było jej używanie w przypadku, gdy użytkownik nie dysponuje kompletnym sprzętem. Jeżeli do komputera nie podłączymy silników, aplikacja będzie działać zupełnie normalnie. Jeżeli nie dysponujemy dwiema kamerami internetowymi, aplikacja równie dobrze działa na jednej. Możliwych zastosowań tego pomysłu jest wiele. Począwszy od zajęć ze studentami w postaci laboratorium z przedmiotu sieci neuronowe lub prezentacji w postaci warsztatów praktycznych, a skończywszy na pracy naukowo-badawczej w tematyce stereowizji z wykorzystaniem sieci neuronowych lub dowolnego innego aspektu systemów wizyjnych. Model obrotowej platformy będzie stanowił podstawę do dalszych prac nad pozycjonowaniem z użyciem kamer (dwie kamery lub więcej). Jednym z interesujących pomysłów rozwoju jest modyfikacja mechaniki do postaci ramienia z chwytakiem i użycie go do manipulacji obiektami trójwymiarowymi przy wsparciu algorytmów stereowizyjnych. Innym ciekawym pomysłem jest rozdzielenie osi obrotu kamer i wskaźnika laserowego, przeprowadzenie symulacji przemieszczania się robota mobilnego w nierównym terenie

w kierunku jednego ustalonego obiektu. Trzecim pomysłem może być zastosowanie kamer do sterowania manipulatorem składającym się z wielu segmentów w celu określenia przemieszczenia efektora z punktu A do punktu B przy jednoczesnym unikaniu kolizji z przeszkodami. LITERATURA [1] METZGER P., Anatomia PC, Helion, Warszawa 2006 [2] RUTKOWSKI A., Części maszyn, WSiP, Warszawa 1992 [3] OSOWSKI S., Sieci Neuronowe w Ujęciu Algorytmicznym, Wydawnictwo Naukowo-Techniczne, Warszawa 1996 [4] ROJEK R., BARTECKI K., KORNIAK J., Zastosowanie sztucznych sieci neuronowych i logiki rozmytej w automatyce, Oficyna Wydawnicza Politechniki Opolskiej, Opole 2000 [5] TADEUSIEWICZ R., Wprowadzenie do praktyki stosowania sieci neuronowych, Internet (dostęp: 2007-07-16): http://www.statsoft.pl/czytelnia/neuron/wprowdoprak.html [6] Connectivity Knowledge Platform, IEEE1284, Internet (dostęp: 2007-07-16): http://ckp.made-it.com/ieee1284.html [7] Internals, WinIo library, Internet (dostęp: 2007-07-16): http://www.internals.com [8] WObit, Sterowanie silnikami krokowymi poradnik, Internet (dostęp: 2007-07-16): http://www.automatykaonline.pl/poradnik/ artykuly.php?id=48 [9] AVT, Programowalny moduł wejścia/wyjścia, Internet (dostęp: 2007-07-16): http://sklep.avt.com.pl/go/_info/?id=45439 [10] eminebea, Product Characteristics Datasheet PM35L-048, Internet (dostęp: 2007-07-16): http://www.eminebea.com/content/html/en/ motor_list/pm_motor/pm35l048.shtml [11] eminebea, Product Characteristics Datasheet PM55L-048, Internet (dostęp: 2007-07-16): http://www.eminebea.com/content/html/en/ motor_list/pm_motor/pm55l048.shtml Abstract: In this article authors describe a stepper-motor controlled computer vision system with two cameras developed as a starter kit for students willing to experiment with artificial neural networks. An example pattern-recognition algorithm is implemented to control the movement of cameras, but the task for the neural network can be more complex (e.g. stereovision and 3-dimensional movement).