Automatyzacja i robotyzacja
procesów produkcyjnych
Instrukcja laboratoryjna
Graficzne środowisko
programowania robotów
Opracował: mgr inż. Wojciech Błotnicki
Cel
ć
wiczenia.
Celem ćwiczenia jest zapoznanie studenta z graficznym środowiskiem programowania
robotów na przykładzie środowiska Microsoft Visual Programming Language (VPL), które
jest częścią pakietu Microsoft Robotics Developer Studio.
Wprowadzenie.
Microsoft Robotics Developer Studio jest środowiskiem działającym pod systemem
Windows, przeznaczone jest ono do użytku akademickiego, hobbystycznego i komercyjnego.
Umożliwia w łatwy sposób tworzenie aplikacji dla wielu platform sprzętowych robotów. Jest
rozpowszechniane na zasadach licencji freeware.
RDS dostarcza zintegrowane środowisko .NET umożliwiające projektowanie,
wykonywanie, i debugowanie wysoce rozbudowanych, współbieżnych aplikacji dla robotów.
RDS ułatwia rozwiązanie takich problemów jak koordynacja, konfiguracja, rozwinięcie i
możliwość uruchamiania kodu jednej aplikacji w innej. Oprócz narzędzi i środowiska
uruchomieniowego, RDS posiada dużo przykładów i ćwiczeń jak symulować i sterować
roboty.
W jego skład wchodzą :
−
Concurrency and Coordination Runtime (CCR),
−
Decentralized Software Services (DSS),
−
DSS Manifest Editor (DSSME),
−
Microsoft Visual Programming Language (VPL),
−
Microsoft Visual Simulation Environment.
VPL jest to język graficzny do tworzenia aplikacji CCR/DSS. Inaczej niż w
konwencjonalnym programowaniu, VPL sprawdza, który komponent jest aktualnie
wykonywany w miarę napływu danych. Aplikacje są tworzone poprzez proste „złapanie i
upuszczenie” poszczególnych komponentów i następnie ich odpowiednie połączenie. VPL
może generować usługi w języku C#, które w sposób znaczący mogą przyspieszyć rozwój
projektu.
Przebieg
ć
wiczenia.
Student wykonuje kolejno zadania:
Zadanie 1 - ''Hello World''
Klasyczny dydaktyczny program będący pierwszym przykładem w nauce większości jezyków
programowania. W Microsoft VPL, program ten można zrealizować za pomocą dwóch
bloków.
W celu uruchomienia VPL z menu start wybierz Microsoft Robotics Developer Studio,
następnie wybierz i uruchom Visual Programming Language. W przypadku systemu Vista i
nowszych należy uruchomić jako administrator (prawy guzik myszy, uruchom jako
administrator)
Z menu File wybierz New, aby utworzyć nowy projekt. Wybierz bloczek czynności Data
klikając dwukrotnie na niego lub przeciągając go z przybornika Basic Activities na pole
schematu programu. Wybierz rodzaj stałej string z rozwijanego menu. Kliknij w okno
tekstowe bloku Data, a następnie wpisz „Hello World”.
Rys. 1 – blok czynności Data
Wstaw blok czynności Simple Dialog przeciągając go z przybornika Services i ustaw go po
prawej stronie bloku Data. (Aby szybciej znaleźć bloczek, można wpisać jego nazwę na
górze przybornika)
Przeciągnij linkę pomiędzy oboma blokami. Automatycznie pojawi się okno dialogowe
Connections. Wybierz DataValue z pierwszej listy oraz AlertDialog z drugiej listy,
nastepnie kliknij OK.
Rys. 2 – Okno dialogowe Connections
Następnie w oknie dialogowym Data Connections z rozwijanej listy wybierz value.
Rys. 3 – oko dialogowe Data Connections
Okno dialogowe Data Connections definiuje jaki parametr (w tym wypadku wartość)
zostanie przekazane z bloku Data do bloku Simple Dialog.
Schemat blokowy programu powinien wyglądać jak na rys. 4.
Rys. 4 – Schemat programu
Teraz wybierz Run z menu Run (lub naciśnij F5). Jeżeli jeszcze nie zapisałeś swojego
projektu otworzy się okno dialogowe zapisu. Podaj nazwę projektu a następnie zapisz (Save).
VPL powinien teraz uruchomić aplikację. Jeżeli pojawi się okno pytające o odblokowanie
aplikacji wybierz odblokuj (Unblock).
Po uruchomieniu aplikacji powinno pojawić się okno dialogowe z napisem „hello World”.
Aby zatrzymać program wybierz Stop z menu Run.
Zadanie 2 – inkrementacja zmiennej
To ćwiczenie ma na celu zobrazowanie przepływu dany w VPL. Polega ono na stworzeniu
zmiennej, jej inicjalizacji oraz inkrementacji od 1 do 10.
Ć
wiczenie rozpocznij od utworzenia nowego projektu (menu File, opcja New).
Następnie na schemat przeciągnij blok czynności Variable (blok zmiennej). Aby otworzyć
okno definiowania zmiennej (Define Variables) naciśnij przycisk (...) na bloku Variable
(możesz również wybrać „Variables...” z menu Edit). W oknie dialogowym naciśnij Add, a
następnie napisz Test w oknie tekstowym. Upewnij się czy w rozwijanym menu Type jest
wybrany rodzaj zmiennej int , jeśli tak naciśnij OK.
Rys. 1. Okno dialogowe Define Variables
Jeżeli twoja zmienna Test nie jest przypożądkowana do bloku czynności Variable, otwórz
rozwijane menu bloku zmiennej I wybierz utworzoną przez siebie zmienną Test.
Rys. 2. Blok zmiennej Test
Do schematy programu dodaj blok Data po lewej stronie zmiennej (Variable), a następnie
połącz je jak pokazano na rys. 3. Otworzy się okno dialogowe Connections, wybierz
DataValue na połączeniu wychodzącym oraz SetValue na połączeniu wchodzącym,
następnie naciśnij OK.
Rys. 3. Blok Data ustawia wartość bloku zmiennej
Blok Data powienien mieć ustawiony rodzaj stałej na int oraz wpisaną jej wartość 1. Jeżeli
użyjesz połączenia SetValue bloku Variable ustawi ono wartość zmiennej na 1 oraz wyśle tą
wartość na wyjście tego bloku.
Sprawdzanie wartości zmiennej
Dodaj blok czynności Merge po prawej stronie schematu programu, a następnie połącz go z
wyjściem bloku Virable. Blok Merge może mieć wiele wejść i posłuży on do stworzenia
pętli zliczającej.
Rys. 4. Blok Merge
Za blokiem Merge umieść blok czynności If. W bloku If umięść warunek logiczny który
będzie sprawdzany (Test == 10). Gdy warunek logiczny będzie spełniony (zmienna Test
bedzie równa 10) dana będzie przepuszczona na normalne wyjście w przeciwnym wypadku
dana (w naszym wypadku zmienna Test) będzie przekazywana na wyjście Else.
Rys. 5. Blok If
Inkrementacja zmiennej
Do schematu programu dodaj blok czynności Calculate, naciśnij na nego prawyk klawiszem
myszy, a następnie wybierz "Flip Connections" z rozwijanego menu. Podłącz wyjście Else
bloku If do wejścia bloku Calculate. W bloku czynności Calculate wpisz formułe zadania
„Test + 1”.
Rys. 6. Inkrementacja zmiennej
Użyj wyniku działania bloku Calculate aby nadać nową wartość zmiennej Test. W tym celu
dodaj kolejny blok Variable i podłącz go do wyjścia Calculate. W oknie Connections
wybierz CalculatedResult oraz SetValue, a następnie naciśnij OK. Podłącz wyjście
Variable do bloku Merge w ten sposób „zamkniesz” pętle inkrementującą zmienną Test.
Rys. 7. Zamknięcie petli
Wykorzystanie bloku Text to Speech
Dodaj kolejny blok Calculate i podłącz jego wejście do wyjścia Merge. W oknie bloku
Calculate wpisz:
“The number is “ + Test
Ta operacja zmieni automatycznie zmienną Test na zmienną tekstową i doda ją do tekstu
zawartego w cudzysłowie.
Rys. 8. Tworzenie wiadomości tekstowej
Dodaj blok Text-To-Speech z przybornika Services oraz podłącz go do wyjścia Calculate.
W oknie Connections ustaw z (From:) CalculatedResult na (To:) SayText oraz w Data
Connections zmień value na SpeechText.
Rys. 9. Blok Text-To-Speech
Na koniec dodaj kolejny blok Data oraz podłącz go do wyjścia bloku If. Zdefiniuj typ Data
na string i w pisz w oknie bloku:
All is done! (gdy jest zdefiniowany typ na string nie trzeba urzywać cudzysłowów)
Dodaj kolejny blok TextToSpeech (powinieneś skopiować istniejący blok TextToSpeech i
wkleić go – co będzie oznaczało, że korzystasz z istniejącej już usługi. Natomiast, gdy
przeciągniesz nowy blok z przybornika utworzysz nową usługę TextToSpeech0 co nie jest
prawidłowe). Podłącz Data do bloku TextToSpeech który właśnie skopiowałeś oraz ustaw
z: DataValue na: SayText w oknie Connections. Natomiast w oknie Data Connections
ustaw value na SpeechText.
Gdy skończysz twój schemat powinien wyglądać jak na rys. 10.
Rys. 10. Kompletny schemat programu
Uruchomienie programu
Jeżeli wszytsko jest podłączone prawidłowo po uruchomieniu programu (F5 lub Run)
komputer zliczy do dziesięciu (po angielsku), a na koniec powie ”All done”. Jeżeli nic nie
słychać sprawdź podłączenie oraz ustawienia głośników. Gdy komputer nie jest wyposażony
w głośniki zamiast TextToSpeech użyj Simple Dialog (tak jak w ćw. 1).
Zadanie 3 – tworzenie własnego bloku czynno
ś
ci
Ć
wiczenie pokazuje jak utworzyć własny blok czynności, który wykona te same zadanie co
cały program w ćw. 2. Tworzenie własnych bloków pozwala na modularyzację aplikacji
dzięki czemu będą one bardziej przejrzyste.
Utwórz nowy projekt oraz dodaj blok Data. Ustaw jego wartość na 1.
Utwórz nowy blok czynności wstawiając do schematu blok Activity. Upewnij się czy jest on
zaznaczony (jego krawędzie będą podświetlone, jeśli nie kliknij na niego raz).
W panelu właściwości (Properties) zmień pola Name oraz Friendly Name na CountTo10.
Następnie otwórz blok czynności (klikając na niego dwukrotnie). Utworzy się nowa zakładka
w polu schematu programu. Z rozwijanego menu Action (na górze pola schematu w zakładce
nowej czynności) wybierz Action rys. 1.
Rys. 1. Zakładka bloku własnej czynności (Activity)
Pole schematu czynności przypomina pole schematu programu. Po obu stronach pola
schematu czynności znajdują się przyłączenia wejściowe oraz wyjściowe z bloku czynności.
Dane przepływają z wejść poprzez schemat czynności do wyjścia z bloku czynności.
Użyj polecenia Actions and Notifications z menu Edit. Kliknij w zakładkę Actions. Dodaj
zmienną wejściową do czynności (będzie to zmienna od której później program zacznie
odliczać). Zmień nazwę wielkości wejściowej (Input value) na StartValue oraz wybierz jej
typ na Int. Kliknij OK.
Rys. 2. Okno dialogowe Actions and Notifications
Wstaw do pola schematu czynności takie same bloki jak wstawiłeś w ćw. 2 (Merge, If,
Calculate, Variable i Data) jednakże będą one inaczej połączone.
Rozpocznij od ustawienia bloku Calculate po lewej stronie i podłącz go do “wejściowego
przyłącza”. Wpisz:
StartValue
w polu bloku Calculate, w ten sposób zostanie pobrana dana wejściowa.
Do bloku Calculate podłącz kolejno bloki Merge oraz Variable. Utwórz nową zmienną
Test2 klikając w rozwijanym menu bloku Variable Define Variables. Wpisz nazwę zmiennej
oraz ustaw jej typ na int.
Rys. 3. Zmienna wejściowa Test2
Do wyjścia z Variable podłącz blok If oraz w jego polu tekstowym wpisz warunek logiczny:
Test2 = 10 (znaki = oraz = = w VPL są równorzędne).
Rys. 4. Blok If
Dodaj nowy blok Calculate oraz obróć go (przyciśnij na nim prawym guzikiem myszy oraz
wybierz flip connections).
Do wyjścia Else podłącz blok Calculate, w którego polu wpisz:
Test2 + 1 (inkrementacja zmiennej Test2)
Wyjście z bloku Calculate podłącz do wejścia bloku Merge zamykając w ten sposób pętle
inkrementacji.
Rys. 5. Petla inkrementacji
Następnie tak samo jak w ćw. 2 podłącz do wyjścia bloku Variable zawierającego zmienną
Test2 blok Calculate, a nastepnie wpisz w jego pole:
"The number is " + Test2
Dodaj oraz podłącz do wyjścia z If blok Data. Wybierz typ string I wpisz w pole danej All
done! Dodaj kolejny blok Merge do którego podłączwyjścia z Calculate i Data.
Rys. 6. Końcowe bloki czynności
Z menu Edit wybierz Actions and Notifications. W oknie dialogowym wybierz zakładkę
Notifications oraz kliknij Add pod Notifications. Następnie kliknij Add pod Notification
values. Nadaj nazwę Text klikając Add i wybierz typ string, nastepnie kliknij OK.
Rys. 7. Ustawienia Notifications
Teraz możesz podłączyć wyjście z bloku Merge (jest to bloczek łączący działania stworzonej
podczynności) do wyjscia Notification po prawej stronie oznaczone kropką (wyjście z
schematu czynności). Ustaw połączenie (connection) z ForwardedOutput na Notification
oraz wartość na value. Cały schemat czynności powninien wyglądać jak na rys. 8.
Rys. 8. Kompletny schemat czynności
Zamknij schemat czynności lub przełącz się na schemat programu głównego. Podłącz blok
Data do bloku czynności właśnej CountTo10.
Skopiuj i wklej blok CountTo10.
Na koniec wstaw blok TextToSpeech I podłącz go do wyjścia Notification bloku
CountTo10. Ustaw połączenie jako Notification oraz z Text na SpeechText.
Rys. 9. Program główny
Uruchom program (F5 lub Run), efekt powinien być taki sam jak w przypadku ćwiczenia
drugiego.
Może się zdarzyć, że program nie zlicza prawidłowo tzn. Nie pokoleji lub kolejne numery
nachodzą na siębie, może to wynikać z tego, że zanim numer zostanie wypowiedziany pęta
zoastanie wykonana po raz kolejny. W takim wypadku należy wybrać operację
SayTextSynchronous zamiast operacji SayText.
Zadanie 4 – ł
ą
czenie danych
Ć
wiczenie ma zadanie pokazać inny sposób przekazywania wartości zmiennej oraz jak łączyć
dane z różnych źródeł.
Porównaj schemat blokowy programu z zadania nr 2 z poniższym:
Rys. 1. Zmodyfikowany schemat blokowy zadania 2go
Porównaj w obu schematach sposób przekazywania wartości zmiennej. Jaka jest różnica?
Zmodyfikuj schemat z rys. 1 tak, aby na początku były zdefiniowane dwie wartości (Start i
Stop). Wartość Start ma oznaczać liczbę od której program zacznie zliczać, natomiast Stop
ma oznaczać liczbę na której program zakończy zliczanie. Do schematu konieczne jest
dodanie bloku Join (rys. 2).
Rys. 2. Blok Join
Program ma działać podobnie jak poprzednie z tą różnicą, że mają być zdefiniowane dwie
zmienne start i stop. Zliczanie ma się odbywać Start->Stop.
Zadanie 5 – blok DirectionDialog
Ć
wiczenie pokazuje przykład użycia bloku DirectionDialog.
Utwórz program o schemacie blokowym jak na rys. 1.
Rys. 1. Prosty DirectionDialog
Zmodyfikuj schemat programu z rys. 1. tak aby po każdorazowym naciśnięciu przycisku
kierunkowego (w oknie DirectionDialog) oprócz wymówionej nazwy kierunku (tak jak działą
program z rys. 1) pojawiło się dodatkowo okno dialogowe z informacją w języku polski jaki
został naciśnięty przycisk (np. „Przycisk Lewo”).
Uwaga: Należy dodatkowo wykorzystać bloki If, Data oraz SimpleDialog
Zaliczenie
ć
wiczenia.
Warunkiem zaliczenia jest wykonanie co najmniej zadań 1-3.
Kryterium oceniania:
3 – wykonanie zadań 1-3,
4 – wykonanie zadań 1-3 oraz zadania 4 lub 5,
5 – wykonanie zadań 1-5.
Bibliografia:
1.
Microsoft Robotics Developer Studio Express 2008, help;
2.
K. Kotlińska, A. Mućko,: Sterowanie robotem Pioneer 3DX w Microsoft Robtics
Studio, sprawozdanie, Warszawa 2009.