NXJ Virtual Machine. Programowanie w języku Java.

Wielkość: px
Rozpocząć pokaz od strony:

Download "NXJ Virtual Machine. Programowanie w języku Java."

Transkrypt

1 Programowanie robotów LEGO Mindstorms NXT. Wykłady dla studentów kierunku Informatyka NXJ Virtual Machine. Programowanie w języku Java.

2 Zastrzeżenia prawne 2008,2012 Politechnika Śląska w Gliwicach, dr inż. Piotr Czekalski. Niniejszy dokument jest objęty prawami autorskimi. Rozpowszechnianie, kopiowanie i udostępnianie osobom trzecim jest możliwe wyłącznie za zgodą autora. Informacja zawarta w niniejszym dokumencie ma charakter niekomercyjny, edukacyjny i jako taka nie może stanowić bazy bezpośredniej lub pośredniej dla wszelakiej działalności komercyjnej. Jakkolwiek autor dołożył wszelkich starań podczas opracowania niniejszego dokumentu tak, aby informacje przedstawiane w tym dokumencie były najnowsze i zgodne ze stanem faktycznym opisywanych urządzeń, protokołów, sprzętów oraz stanu wiedzy, nie może zagwarantować pełnej poprawności dokumentu, w szczególności w związku ze zmieniającymi się uwarunkowaniami technicznymi, wersjami firmware, wersjami oprogramowania i sprzętu. W związku z tym dokument jest udostępniany w niniejszej postaci as is bez jakiejkolwiek gwarancji i nie może stanowić podstawy do roszczeń. Autor nie odpowiada za szkody materialne i niematerialne wyrządzone pośrednio lub bezpośrednio w wyniku zastosowania informacji zawartych w niniejszym dokumencie. Autor zwraca się do wszelkich osób korzystających z niniejszego dokumentu o zgłaszanie wszelkich dostrzeżonych usterek i nieścisłości celem ich usunięcia dla szeroko rozumianego dobra ogółu. Ponieważ dokument ten może funkcjonować w wielu wersjach, w celu weryfikacji nieścisłości konieczne jest porównanie stanu faktycznego z dokumentem o odpowiedniej wersji. Znaki towarowe znajdujące się w niniejszym dokumencie przynależą wraz z prawami autorskimi odpowiednim ich właścicielom, a w szczególności: LEGO, the LEGO logo, DUPLO, BIONICLE, MINDSTORMS, the BELVILLE, CLIKITS, KNIGHTS KINGDOM and EXO-FORCE logos, the Brick and Knob configurations and the Minifigure stanowią znaki towarowe LEGO Group. Microsoft, Robotics Studio,.NET logo, Visual Studio, ActiveX oraz Windows stanowią znaki towarowe Microsoft Corporation. Java, JDK oraz JAVA logo stanowią znaki towarowe Oracle Corp. ageia PhysX stanowi znak towarowy nvidia Corporation. LabVIEW & Powered by LabVIEW stanowią zastrzeżone znaki towarowe firmy National Instruments (objęte patentami). dr inż. Piotr Czekalski 2

3 Plan wykładu Instalacja firmware LeJOS NXJ na kostce NXT, kompilacja prostego programu testowego. Programowanie w środowisku Eclipse, konfiguracja środowiska. Przegląd klas i modeli programowania. dr inż. Piotr Czekalski 3

4 Część 1 Instalacja firmware LeJOS NXJ na kostce NXT, kompilacja prostego programu testowego. dr inż. Piotr Czekalski 4

5 LeJOS NXJ Firmware do zainstalowania na kostce NXT Intelligent Brick w miejsce oryginalnego. Kompilator i linker (używa własnego classes.jar w przestrzeni nazw java.lang.*). Zestaw aplikacji do komunikacji z NXT (NXJ). Komplet klas bibliotecznych API do obsługi sprzętu (Genuine LEGO jak i 3 rd party). Projekt Open Source. Aktualna wersja beta(26 sierpnia 2012) Pierwotnie był to projekt dla RCX, potem został przeniesiony dla NXT. dr inż. Piotr Czekalski 5

6 LeJOS NXJ LeJOS posiada bardzo bogaty zbiór bibliotek. W szczególności do programowania wysokopoziomowego / abstrakcyjnego. Poza NXT-G jest to język, w którym jest najwięcej bibliotek obsługujących sprzęt 3 rd party. Robot Jitter z oprogramowaniem LeJOS pracował na ISS w 2001 roku (projekt NASA). Integruje się świetnie z większością IDE, istnieją odpowiednie wtyczki dla poszczególnych środowisk, które ułatwiają pracę (tworzenie projektu, kompilację, etc.) dr inż. Piotr Czekalski 6

7 Co jest potrzebne? Kabel USB (niezbędny do wymiany firmware) Biblioteka Bluecove (plik jar) do icommand (aktualnie bez supportu) oa trybu nadzorowanego. dr inż. Piotr Czekalski 7

8 LEGO Mindstorms Jest instalator. Instalacja. Java SDK Jest instalator. Apache Ant Po prostu rozpakuj do folderu. LeJOS Po prostu rozpakuj do dowolnego folderu. LibUSB Jest instalator. Dla Visty/7 jest specjalna, osobna procedura ze względu na UAC. Nie dla x64. dr inż. Piotr Czekalski 8

9 Instalacja cd. Zmienne środowiskowe: NXJ_HOME folder instalacyjny LeJOS, np.: c:\program Files\LeJOS NXJ lub na x64: C:\Program Files (x86)\lejos NXJ JAVA_HOME folder instalacyjny JDK (to musi być JDK, nie JRE!) (uwaga dla Windows x64 używamy Javy x86 tak, czy inaczej) ANT_HOME folder instalacyjny skryptów Ant, np.: c:\apache-ant-1.8.2ant PATH - %NXJ_HOME%\bin;%JAVA_HOME%\bin;%ANT_HOME %\bin;%path% icommand dodatkowe dla trybu zdalnie sterowanego: CLASSPATH -.;C:\icommand- 0.7\dist\icommand.jar;C:\icommand- 0.7\dist\bluecove jar; dr inż. Piotr Czekalski 9

10 Instalacja cd. Wymiana firmware NXT na NXJ: Kostka musi być podłączona przez USB i uruchomiona. cmd: > nxjflash lub nxjflashg Może wymagać ręcznego naciśnięcia RESET w NXT i powtórzenia procedury. Wymiana firmware jest odwracalna (max.ok. 100 programowań). dr inż. Piotr Czekalski 10

11 Instalacja cd. Uruchomienie testowego programu: Cmd:> cd %NXJ_HOME%\samples\View (dla v 0.6) Cmd:> cd %USERPROFILE%\leJOSNXJProjects\samples\View (od wersji 0.7) Cmd:> nxjc View.java Cmd:> nxj -r -u View Uruchomienie testowego programu: pozwala na podejrzenie stanu serwomechanizmów, sensorów (zakłada się pewne predefiniowane przypisanie sensoró do portów) i parametrów pracy kostki NXT Intelligent Brick. dr inż. Piotr Czekalski 11

12 Część 2 Konfiguracja Eclipse do tworzenia projektów w trybie autonomicznym z wykorzystaniem LeJOS. Tworzenie projektu krok po kroku Konfiguracja narzędzi zewnętrznych. dr inż. Piotr Czekalski 12

13 Konfiguracja Eclipse. Eclipse Po prostu rozpakuj do dowolnego folderu. Konfiguracja Eclipse do kompilacji dla NXJ: Projekt: dr inż. Piotr Czekalski 13

14 Szczegóły projektu. Konfiguracja Eclipse. Uwaga na położenie źródeł i klas ponieważ od tego zależy dalsza konfiguracja poleceń. dr inż. Piotr Czekalski 14

15 Konfiguracja Eclipse. Konfiguracja classpath dla NXJ: Project->Properties: Java Build Path/Libraries. [Add External JARs]: <ścieżka dla LeJOS> dr inż. Piotr Czekalski 15

16 Konfiguracja polecenia kompilacji dla NXJ: Run->External Tools->External Tools Configurations: Program/[New]. Można skorzystać z innych zmiennych. Uwaga na umieszczenie źródeł *.java Konfiguracja Eclipse. dr inż. Piotr Czekalski 16

17 Konfiguracja polecenia przesłania kodu dla NXJ: Run->External Tools->External Tools Configurations: Program/[New]. Można skorzystać z innych zmiennych Konfiguracja Eclipse. dr inż. Piotr Czekalski 17

18 Konfiguracja przeglądania kodu dla NXJ: Run->External Tools->External Tools Configurations: Program/[New]. Konfiguracja Eclipse. dr inż. Piotr Czekalski 18

19 Pozostałe narzędzia. Narzędzia zewnętrzne, w większości command-line, które można i warto skonfigurować jako External Tools (lub mieć do nich skróty) : nxjbrowse eksplorator zawartości kostki (graficzny) nxjmonitor monitor do podglądania zdalnego stanu sensorów i serwomechanizmów prawie w czasie rzeczywistym pozwala również na wyświetlanie wiadomości trace (użyteczne podczas uruchamiania aplikacji). Działa poprzez Bluetooth. nxjdataviewer narzędzie do pobierania i prezentacji danych z loggera. Działa przez Bluetooth i USB. nxjconsoleviewer wyjście RConsole (narzędzie graficzne) nxjconsole j/w, ale command-line nxjcontrol łączy w jedno ww. nxjdebug kiedyś był to debugger / tracer, aktualnie zastąpiony przez nxjconsole dr inż. Piotr Czekalski 19

20 import lejos.nxt.*; Prosty program. public class HelloWorld { public static void main (String[] aarg) throws Exception { LCD.clear(); LCD.drawString("Witaj w swiecie LEGO", 1, 1); Button.waitForPress(); } } dr inż. Piotr Czekalski 20

21 Kompilacja i uruchomienie. Koniecznie należy wskazać źródło do kompilacji w drzewie projektu. Etapy tworzenia programu: 1.Kompilacja. 2.Upload do kostki. 3.Uruchomienie programu z managera kostki (nxjbrowse). dr inż. Piotr Czekalski 21

22 Alternatywna konfiguracja Eclipse. Można wykorzystać skrypty Ant. Można zainstalować LeJOS plugin do Eclipse (metoda preferowana, prezentowana na kolejnych slajdach). dr inż. Piotr Czekalski 22

23 Alternatywna konfiguracja Eclipse. Eclipse Plugin. Plugin wspiera tworzenie aplikacji działających w trybie nadzorowanym. Jest używany do utworzenia projektu i wymiany bibliotek na właściwe, kompilacji, załadowania i uruchomienia aplikacji na kostce. Dodatkowe narzędzia nadal są przydatne i muszą być skonfigurowane jako External Tools, jak pokazano wyżej. dr inż. Piotr Czekalski 23

24 Alternatywna konfiguracja Eclipse. Eclipse Plugin. Eclipse Plugin - Instalacja Uruchom Eclipse, kliknij [menu]: Help->Install New Software. Wklej poniższy link i kliknij Add: Zaznacz oba checkboxy (lejos NXJ*) kliknij [Next] postępuj zgodnie ze wskazówkami kreatora. Instalacja zajmuje trochę czasu ze względu na sporą liczbę pakietów zależnych. Zrestartuj Eclipse. Plugin powinien już działać, powinien być również dostępny kontekstowy Help dla LeJOS. dr inż. Piotr Czekalski 24

25 Alternatywna konfiguracja Eclipse. Eclipse Plugin. Eclipse Plugin - Konfiguracja LeJOS plugin nie zna lokalizacji środowiska LeJOS więc niezbędna jest konfiguracja. Kliknij [menu]: Window->Preferences, wybierz lejos NXJ, a następnie wpisz ścieżkę instalacyjną (root) środowiska LeJOS. dr inż. Piotr Czekalski 25

26 Alternatywna konfiguracja Eclipse. Eclipse Plugin. LeJOS & Eclipse plugin użycie Używając pluginu można przeflashować kostkę kliknij [Menu]->leJOS NXJ->Upload Firmware (jeśli nie zrobiłeś tego wcześniej). Aby stworzyć projekt LeJOS, utwórz najpierw projekt Java, a potem skonwertuj: kliknij prawym przyciskiem w Package Explorer i wybierz lejos NXJ-> Convert to lejos NXJ Project: W okienku konsoli pojawi się coś na wzór: project <name> now is a lejos NXJ project Wpisz kod programu. Gdy będzie gotowy, wskaż klasę w Package Explorer, a następnie wybierz [menu]: Run>Run As>LeJOS NXT Progam dr inż. Piotr Czekalski 26

27 Część 3 Programowanie i biblioteki LeJOS. dr inż. Piotr Czekalski 27

28 Modele programowania Model autonomiczny Wymaga wymiany firmware na maszynę wirtualną Java LeJOS. Używa speyficznego classes.jar (lejos.nxj) zamiennik dla dostarczonego z JDK kompilator pozostaje ten sam. Zawiera mnóstwo bibliotek, w tym omówione dalej biblioteki do programowania behawioralnego, klasy nawigatorów oraz do orientacji na mapie i w terenie. Model zdalnie sterowany (nadzorowany): icommand (nie jest supportowany w wersji 9.x.) LeJOS NXT (aktualny) współpracuje z prawie każdym firmware poprzez protokół LCP. Nadzór przez połączenie USB lub Bluetooth. dr inż. Piotr Czekalski 28

29 Biblioteki/paczki Java dla LeJOS. Trzy tryby pracy (2 nadzorowane i 1 autonomiczny): Zdalny LCP: lejos.pc.comm, lejos.nxt, lejos.robotics, lejos.geom Zdalny icommand: icommand.navigation, icommand.nxt, icommand.nxtcomm, icommand.vision Autonomiczny (niskopoziomowe): java.awt, java.io, java.lang, java.util Micro edition: javax.bluetooth, javax.microedition.io, javax.microedition.lcdui lejos.devices, lejos.nxt, lejos.nxt.comm, lejos.nxt.debug, lejos.nxt.remote, lejos.rcxcomm, lejos.util dr inż. Piotr Czekalski 29

30 Biblioteki/paczki Java dla LeJOS. Trzy tryby pracy (2 nadzorowane i 1 autonomiczny) (...): Autonomiczny (wysokopoziomowe): lejos.robotics, lejos.robotics.localization, lejos.robotics.mapping, lejos.robotics.navigation, lejos.robotics.objectdetection, lejos.robotics.pathfinding, lejos.robotics.subsumption dr inż. Piotr Czekalski 30

31 Biblioteki/paczki Java dla LeJOS. Programowanie niskopoziomowe przedstawiono na kolejnych slajdach. Cechy programowania niskopoziomowego: Klasy i komunikacja nie jest związana z konkretnym modelem robota. Poruszanie robotem wymaga dbania samemu o wydane odpowiednich komend (np. obrót o zadaną liczbę stopni, ustawienie zadanej prędkości obrotowej). Nie ma wsparcia dla poruszania się (ruchy trzeba składać samemu z odpowiednich poleceń). Brak usystematyzowanego podejścia do skanowania zdarzeń (sensorów). dr inż. Piotr Czekalski 31

32 Biblioteki Java dla LeJOS. lejos.nxt wszystkie klasy związane z sensorami, przyciskami i dźwiękiem kostki oraz silnikami (w tym częściowo 3 rd party). Obejmuje również interfejsy i klasy abstrakcyjne jak również dostęp do RCX. lejos.nxt.addon wszystkie 3 rd party są tutaj zawarte (generalnie te, które nie były dostarczone w zestawie) oraz RCX. lejos.nxt.comm komunikacja z NXT przez USB i Bluetooth (LCP). lejos.nxt.remote zdalne zarządzanie kostką przez Bluetooth (LCP). lejos.nxt.debug narzędzia do debbugowania. dr inż. Piotr Czekalski 32

33 Biblioteki Java dla LeJOS. lejos.addon.gps klasy związane z GPS (m.in.. parser NMEA). lejos.util narzędzia, w większości do śledzenia i debuggowania, m.in. asssert, data logger, watches, timers, recycled classes, button click counters. lejos.addon.keyboard klasy klawiatury Bluetooth. lejos.bluetooth klasy Java Bluetooth (komptibility). lejos.microedition klasy zgodności J2ME. Bieżąca wersja implementuje I/O, LCD UI i JSR-179 location API. dr inż. Piotr Czekalski 33

34 Biblioteki Java dla LeJOS. lejos.robotics.navigation klasy nawigatorów i pilotów. lejos.robotics.subsumption interfejsy i klasy programowania behawioralnego. Lejos.robotics.localization klasy związane z implementacją algorytmów Monte Carlo & Particle Filtering na potrzeby śledzenia pozycji robota w przestrzeni. Lejos.robotics.mapping udostępnia klasy, które potrafią ładować mapy i współpracują z lejos.robotics.navigation w celu określenia obiektów w przestrzeni. lejos.robotics.objectdetection Broker abstrakcyjny detekcji obiektów (może używać wielu różnych sensorów). Używa asynchronicznych powiadomień (listenerów). dr inż. Piotr Czekalski 34

35 Biblioteki Java dla LeJOS. lejos.robotics.pathfinding algorytmy odnajdowania najkrótszej ścieżki w grafie i na mapie, z uwzględnieniem przeszkód. lejos.robotics.geom paczka z klasami do obsługi różnych kształtów geometrycznych o płaskich współrzędnych wierzchołków. lejos.charset encoder / decoder (Latin1 / UTF8). lejos.io implementacja strumieni zapisu / odczytu oraz readera / writera support dla java.io). dr inż. Piotr Czekalski 35

36 Szczegółowy opis lejos.*. Podstawowe elementy oprogramowania specyficznego dla kostki NXT: Najczęściej stosowane. Najbardziej odbiegające od innych rozwiązań sprzętowych. dr inż. Piotr Czekalski 36

37 Obsługa LCD - tryb tekstowy. Klasa statyczna. Tryb tekstowy 16 cols (X: 0..15) x 8 rows (Y: 0..7) Metody: public static drawstring(string str, int x, int y); public static drawstring(string str, int x, int y, boolean invert); - białe na czarnym public static drawint(int i, int x, int y); - wyrównanie do lewej, używa tylu znaków, ile potrzeba public static drawint(int i, int places, int x, int y); - wyrównane do prawej, używa wskazanej liczby znaków dr inż. Piotr Czekalski 37

38 Metody: Obsługa LCD - tryb tekstowy. public static drawchar(char c, int x, int y, boolean invert); public static clear(); Przykład: dr inż. Piotr Czekalski 38

39 Obsługa LCD - tryb graficzny. Tryb graficzny 100 px (X: 0..99) x 64 px (Y: 0..63) Klasa: javax.microedition.lcdui.graphics; Metody do generowania: Linii, łuków, figur geometrycznych, obiektów klasy Image, String, Int, Char Można ustawić styl linii i wypełnienia. dr inż. Piotr Czekalski 39

40 Obsługa LCD - tryb strumieniowy (konsolowy). Linie dodawane są na dole i powodują przesuwanie kolejnych w górę. Klasa: Metody: Lejos.nxt.LCDOutputStream; public void write(int c); - wypisuje dolne (od LSB) 8 bitów (byte) do strumienia wyjściowego (konsoli) pozostałe 24 bity są pomijane. Inne metody java.io.outputstream, jak: close, flush itp. dr inż. Piotr Czekalski 40

41 Obsługa przycisków na NXT intelligent brick. 4 pola statyczne, do identyfikacji przycisków Główne metody: public final boolean ispressed(); public final void waitforpressandrelease(); static int waitforpress(); public void addbuttonlistener(buttonlistener alistener); - każdy przycisk może mieć do 4 delegatów static int readbuttons(); - niskopoziomowa funkcja do odczytu maski bitowej stanu przycisków: ENTER=0x01, LEFT=0x02, RIGHT=0x04, ESC=0x08 dr inż. Piotr Czekalski 41

42 Obsługa przycisków na NXT intelligent brick. lejos.nxt.*. Brick buttons. Sample (non blocking call): import lejos.nxt.*; public class ButtonPresses { void public static void main (String[] args) throws Exception { while (true) { LCD.clear(); If (Button.ENTER.isPressed()) LCD.drawString("ENTER",0,0); if (Button.ESCAPE.isPressed()) LCD.drawString("ESCAPE",0,0); if (Button.LEFT.isPressed()) LCD.drawString("LEFT",0,0); if (Button.RIGHT.isPressed()) LCD.drawString("RIGHT",0,0); } } } dr inż. Piotr Czekalski 42

43 Obsługa przycisków na NXT intelligent brick. lejos.nxt.*. Brick buttons. Sample (blocking call): import lejos.nxt.*; public class ButtonTest { void public static void main (String[] args) throws Exception { Button.ENTER.waitForPressAndRelease(); LCD.drawString("Finished", 3, 4); Thread.sleep(2000); } } dr inż. Piotr Czekalski 43

44 Klasa: Monitorowanie zasilania. lejos.nxt.battery; Metody: static float getvoltage(); static int getvoltagemillivolt(); Przykład: import lejos.nxt.*; public class BatteryTest { void main (String[] args) throws Exception { LCD.drawString("Battery: " + Battery.getVoltage(),0,0); Thread.sleep(2000); } } dr inż. Piotr Czekalski 44

45 Obsługa dźwięku. Klasa: lejos.nxt.sound; Metody: public static void systemsound(boolean aqueued, int acode); Acode=(0: short beep, 1: double beep, 2: descending, 3: ascending) public static void beep(); public static void twobeeps(); public static void beepsequence(); public static void beepsequenceup(); public static void buzz(); dr inż. Piotr Czekalski 45

46 Obsługa dźwięku. Przykłady: import lejos.nxt.*; public class Tune { private static final short [] note = { 2349,115, 0,5, 1760,165, 0,35, 1760,28, 0,13, 1976,23, 0,18, 1760,18, 0,23, 1568,15, 0,25, 1480,103, 0,18, 1175,180, 0,20, 1760,18, 0,23, 1976,20, 0,20, 1760,15, 0,25, 1568,15, 0,25, 2217,98, 0,23, 1760,88, 0,33, 1760,75, 0,5, 1760,20, 0,20, 1760,20, 0,20, 1976,18, 0,23, 1760,18, 0,23, 2217,225, 0,15, 2217,218}; void public static void main(string [] args) { for(int i=0;i<note.length; i+=2) { final short w = note[i+1]; final int n = note[i]; if (n!= 0) Sound.playTone(n, w*10); try { Thread.sleep(w*10); } catch (InterruptedException e) {} }}} dr inż. Piotr Czekalski 46

47 Wejście - sensory. LeJOS obsługuje sensory analogowe i cyfrowe. LeJOS implementuje obsługę szybkiej komunikacji w standardzie RS-485 na porcie 4 (sampling ponad 900kHz). Sensory inne niż I2C używajaprzetworników A/C (ADSensorPort) i posiadają dedykowane klasy, które nie dziedziczą po jakiejś klasie bazowej (innej niż Object oczywiście). Klasy sensorów I2C dziedziczą po I2CSensor. dr inż. Piotr Czekalski 47

48 Wejście - sensory. lejos.nxt.*. I2C base class. I2C class udostępnia obsługę dowolnego urządzenia poprzez I2C dzięki programowaniu na niskim poziomie: I2CSensor class instance with I2C port; Konstruktor: public I2CSensor(I2CPort port); Metody: int getdata(int register, byte[] buf, int len); int senddata(int register, byte value); int senddata(int register, byte[] buf, int len); void setaddress(int addr); // 7-bit I2CPort getport(); String getproductid(); String getsensortype(); String getversion(); dr inż. Piotr Czekalski 48

49 Klasa: Sensor dotyku. Instancja klasy TouchSensor powiązana z portem; Konstruktor: public TouchSensor(ADSensorPort port); Metody: public boolean ispressed(); dr inż. Piotr Czekalski 49

50 Sensor dotyku. lejos.nxt.*. Touch sensor. Przykład: import lejos.nxt.*; public class TouchTest { void public static main(string [] args) { throws Exception { TouchSensor touch = new TouchSensor(SensorPort.S1); while (!touch.ispressed()); LCD.drawString( Finished, 3, 4); Thread.sleep(2000); } } } dr inż. Piotr Czekalski 50

51 Klasa: Sensor światła. Instancja klasy LightSensor powiązana z portem; Konstruktor: public LightSensor(ADSensorPort port); Metody: void setfloodlight(boolean bon); public int readvalue(); public int readnormalizedvalue(); void calibratehigh(); void calibratelow(); void sethigh(int high); void setlow(int low); int gethigh(); int getlow(); dr inż. Piotr Czekalski 51

52 Sensor światła. lejos.nxt.*. Light sensor. Przykład: import lejos.nxt.*; public class LightTest { void main (String[] args) throws Exception { LightSensor light = new LightSensor(SensorPort.S1); while (true) { LCD.drawInt(light.readValue(), 4, 0, 0); LCD.drawInt(light.readNormalizedValue(), 4, 0, 1); LCD.drawInt(SensorPort.S1.readRawValue(), 4, 0, 2); LCD.drawInt(SensorPort.S1.readValue(), 4, 0, 3); Thread.sleep(2000); } } } dr inż. Piotr Czekalski 52

53 Klasa: Sensor dźwięku. Instancja klasy SoundSensor powiązana z portem; Konstruktor: public SoundSensor(ADSensorPort port); public SoundSensor(ADSensorPort port, boolean bdba); Metody: int readvalue(); void setdba(boolean dba); dr inż. Piotr Czekalski 53

54 Sensor dźwięku. lejos.nxt.*. Sound sensor. Przykład: import lejos.nxt.*; public class SoundScope { void main (String[] args) throws Exception { SoundSensor sound = new SoundSensor(SensorPort.S1); while (!Button.ESCAPE.isPressed()) { LCD.clear(); for(int i=0;i<100;i++) LCD.setPixel(1,i,60 - (sound.readvalue()/2)); Thread.sleep(20); } } } dr inż. Piotr Czekalski 54

55 Klasa: Sensor odległości. Instancja klasy UltrasonicSensor powiązana z portem; Konstruktor: public UltrasonicSensor(I2CPort port); Metody: int getdistance(); void ping(); int readdistances(int [] distances); int continuous(); dr inż. Piotr Czekalski 55

56 Sensor odległości. lejos.nxt.*. Ultrasound distance sensor. Przykład: import lejos.nxt.*; public class SonicTest { void main(string[] args) throws Exception { UltrasonicSensor sonic = new UltrasonicSensor(SensorPort.S1); while(!button.escape.ispressed()) { LCD.clear(); LCD.drawInt(sonic.getDistance(), 0, 3); } } } dr inż. Piotr Czekalski 56

57 Sensory firm trzecich-ogólnie. I2C: Instancja klasy I2CSensor powiązana z portem; Konstruktor: public <konstruktor>(i2cport port); Metody: int getdata(int register, byte[] buf, int len); int senddata(int register, byte value); int senddata(int register, byte[] buf, int len); void setaddress(int addr); // 7-bit I2CPort getport(); String getproductid(); String getsensortype(); String getversion(); dr inż. Piotr Czekalski 57

58 Kompas. Zarówno HiTechnic jak i Mindsensors: Instancja klasy CompassSensor powiązana z portem; Konstruktor: public CompassSensor(I2CPort port); Metody: float getdegrees(); //dokł. 0.1st. clockwise float getdegreescartesian; // jw. counterwise void resetcartesianzero(); void startcalibration(); // min. 20s /obr., Mindsensors min. 2 obroty, HiTechinc 1.5 do 2 void stopcalibration(); dr inż. Piotr Czekalski 58

59 Kompas. lejos.nxt.*. Ultrasound distance sensor. Przykład: import lejos.nxt.*; import lejos.nxt.addon.*; public class Compass { public static void main(string [] args) { CompassSensor cs = new CompassSensor(SensorPort.S4); Motor.B.setSpeed(60); Motor.B.forward(); float stopnie=cs.getdegrees(); while (stopnie>1) { LCD.clear(); LCD.drawInt((int)stopnie, 1, 1); stopnie=cs.getdegrees(); } Motor.B.stop(); LCD.clear(); LCD.drawString("Znalazlem polnoc!", 1, 2); try { Button.ENTER.waitForPressAndRelease(); } catch(interruptedexception e) {} } } dr inż. Piotr Czekalski 59

60 Przechył/przyspieszenie. lejos.nxt.addon.*. Tilt / acceleration. HiTechnic: AccelHTSensor; Constructor: public TiltSensor(I2CPort port); public TiltSensor(I2CPort port, int address); Methods: int getxaccel(); int getxtilt(); int getyaccel(); int getytilt(); int getzaccel(); int getztilt(); dr inż. Piotr Czekalski 60

61 Przechył/przyspieszenie. lejos.nxt.addon.*. Tilt / acceleration. Mindsensors: AccelMindSensor; Constructor: public AccelMindSensor(I2CPort port); public AccelMindSensor(I2CPort port, int address); Methods: int getxaccel(); int getxtilt(); int getyaccel(); int getytilt(); int getzaccel(); int getztilt(); dr inż. Piotr Czekalski 61

62 Klasa: Sensor kolorów. HiTechnic. Instancja klasy ColorSensor powiązana z portem; Konstruktor: public ColorSensor(I2CPort port); Metody: Color getcolor(); - zwraca RGB łącznie int getblue/green/red(); int getcolorindexnumber();int getcolornumber(); int getmode(); int getnormalizedblue/green/red(); int getrawblue/green/red(); int initblacklevel(); int initwhitebalance(); dr inż. Piotr Czekalski 62

63 Sensor kąta obrotu. lejos.nxt.addon.*. Angle sensor. Klasa: AngleSensor class instance with I2C port; Konstruktor: public ColorSensor(I2CPort port); public ColorSensor(I2CPort port, int mode); public ColorSensor(I2CPort port, int address, int mode, int type); Metody: calibrateangle() getaccangle() - odczyt skumulowanego kąta getangle() - odczyt bieżącego kąta getrpm() - odczyt bieżącej prędkości obrotowej resetaccangle() - reset skumulowanego kąta dr inż. Piotr Czekalski 63

64 Klasa: Sensor żyroskopowy. Instancja klasy GyroSensor powiązana z portem; Konstruktor: public GyroSensor(AdSensorPort port); Metody: int readvalue(); void setoffset(int offset); Uwaga dla poprawnych i dokładnych odczytów wymaga podania offsetu. DirectionFinder bazuje na żyroskopie (utrzymuje kierunek): public GyroDirectionFinder dr inż. Piotr Czekalski 64

65 Inne sensory - skrót. Skaner promieniowania IR Seeker (HiTechnic): Instancja klasy IRSeeker powiązana z portem I2CPort; Optyczny sensor odległości (Mindsensors): Instancja klasy OpticalDistanceSensor powiązana z portem I2CPort; Kamera NXT (Mindsensors): Instancja klasy NXTCam powiązana z portem I2CPort; Sony PSP2 przez interfejs PSP-NX (Mindsensors): Instancja klasy PSPNXController powiązana z portem SensorPort; dr inż. Piotr Czekalski 65

66 Inne sensory - skrót. Multiplekser motorów RCX (Mindsensors): Instancja klasy RCXMotorMultiplexer powiązana z portem I2CPort; Pojedynczy port RCX z ww. multiplexera: Instancja klasy RCXPlexedMotorPort; PFLink LEGO power functions: PFMate I2C control LEGO Power Functions IR receiver PFMateMotor Motor class dla PFMate PFMotorPort Motorport class dla PFMate Mindsensors NXTMMX motor multiplekser: NXTMMX / MMXRegulatedMotor / NXTMMXMotor dr inż. Piotr Czekalski 66

67 Inne sensory - skrót. Mindsensors line leader sensor do śledzenia linii czarno-białej: NXTLineLeader I2C; Mindsensors RTC: RealTimeClock I2C zegar czasu rzeczywistego Mindsensors multiplekser sensorów dotyku: TouchMUX ADSensorPort dr inż. Piotr Czekalski 67

68 Inne sensory - skrót. lejos.nxt.addon.*. Other. Codatex RFID** sensor: RFIDSensor I2C HiTechnic EOPD (Electro Optical Proximity Detector) potrafi wykrywać przeszkody z bardzo dużą precyzją jest niewrażliwy na zewnętrzne oświetlenie: EOPD ADSensorPort Dexter Industries dgps sensor: GPSSensor I2C Firgelli linear actuators (motor+encoder based) various models: Uwaga to jest element wykonawczy, nie sensor. LinearActuator MotorPort **RFID - Radio-frequency identification, przemysłowy standard identyfikacji przedmiotów. dr inż. Piotr Czekalski 68

69 Sensory RCX podłączone do NXT. lejos.nxt.*. RCX sensors. Sensory podłącza się przez specjalną przelotkę (dostarczane z wersją EDU). RCX Light Sensor: RCXLightSensor class instance, using LegacySensorPort class; RCX Motor: RCXMotor class instance, using BasicMotorPort class; RCX Rotation Sensor: RCXRotationSensor class instance, using LegacySensorPort class; RCX Temperature Sensor: RCXTemperatureSensor class instance, using LegacySensorPort class; dr inż. Piotr Czekalski 69

70 Ustawienia kostki. lejos.nxt.*. NXT Brick settings. Klasa (statyczna): Settings; Metody: static Properties getproperties(); static String getproperty(string key, String defaultvalue); static void getproperty(string key, String Value); dr inż. Piotr Czekalski 70

71 Zarządzanie maszyną wirtualną. lejos.nxt.vm.*. NXT Brick settings. Klasy: VM, VM*; Opis: Zapewnia dostęp do struktur wewnętrznych maszyny wirtualnej na kostce NXT Intelligent Brick. Zasadniczo jest to przydatne tylko w przypadku wykrycia problemów z maszyną wirtualną (błędy implementacji) oraz przy opracowaniu i testowaniu swojej maszyny wirtualnej. Z punktu widzenia dewelopera kodu na potrzeby kostki przydatne tylko w sytuacji awaryjnej. dr inż. Piotr Czekalski 71

72 Klasy obsługi i parsera GPS. lejos.addon.gps. Other. GPS, implementuje obsługę sekwencji NMEA, GGA,GSA,GSV,RMC and VTG. Klasy: Parsery komunikatów. NMEASequence NMEA parser. GGASequence fix data: 3D and dokładność lokalizacji. GSASequence fix data uzupełnienie (np. liczba satelitów używanych do lokalizacji). GSVSequence widoczne satelity, dane są składowane w klasie Satellite. RMCSequence inna wersja komunikatu zawierającego pozycję GPS, prędkość i czas. VTGSequence prędkość względem ziemi (ground speed) (prawdziwa, magnetyczna). SimpleGPS klasa bazowa. GPS extends SimpleGPS zarządza danymi GPS. dr inż. Piotr Czekalski 72

73 Zdalne zarządzanie innym NXT. lejos.nxt.remote. Brick 2 Brick. Zarządzanie jednym NXT z innego NXT. Komunikacja przez Bluetooth i LCP. NXT muszą być wcześniej sparowane. Klasy (m.in.): DeviceInfo identyfikacja NXT. NXTCommand wysyłanie i odbiór komunikatów LCP. RemoteMotor, RemoteMotorPort do zdalnego zarządzania silnikami. InputValues zdalny dostęp do sensorów przez LCP. RemoteSensorPort lokalna emulacja zdalnego portu, via LCP. Master LCP Slave dr inż. Piotr Czekalski 73

74 Zdalne zarządzanie innym NXT. lejos.nxt.remote. Brick 2 Brick. Zarządzanie jednym NXT z innego NXT (kont.) Udostępnia sensory tak, jakby były lokalnie (klasa RemoteSensorPort): ADSensorPort, BasicSensorPort, I2CPort, NXTProtocol oraz SensorConstants. Udostępnia serwomechanizmy (klasa RemoteMotorPort): BasicMotorPort, NXTProtocol, TachoMotorPort,Encoder. Działa podobnie do autonomicznego modelu API klasa RemoteNXT udostępnia prawie wszystkie elementy kostki tak, jakby były one lokalne, a nie zdalne. dr inż. Piotr Czekalski 74

75 Tworzenie menu w programach. Klasa: Instancja klasy TextMenu. Konstruktory: public TextMenu(String[] items); public TextMenu(String[] items, int toprow); public TextMenu(String[] items, int toprow, String title); Metody: int select(); int select(int startidx); int select(int startind, int timeout); dr inż. Piotr Czekalski 75

76 Tworzenie menu w programach. Metody: String[] getitems(); void setitems(string[] items); void settitle(string title); void quit(); // przydatne dla innego wątku void resettimeout(); Przy naciśnięciu Esc select zwraca -1, jeśli zostanie przerwany przez quit() zwróci -2. Select jest blokujący, quit() może jednak być wywołany przez inny wątek. dr inż. Piotr Czekalski 76

77 Kontroler PID. lejos.utils.* (?). kontroler PID. Klasa: PIDController; Konstruktor: public PIDController(int setpoint); Metody: dopid(int processvariable) PID wyliczenie w pojedynczej iteracji (należy zapewnić zewnętrzną pętlę) freezeintegral(boolean status) getpidparam(int paramid) setpidparam(int paramid, float value) dr inż. Piotr Czekalski 77

78 Kontroler PID (kont.). lejos.utils.* (?). PID controller. Klasa: PIDController; Pola (parametry kontrolera PID): int PID_KP; wzmocnienie członu proporcjonalnego int PID_KI; wzmocnienie członu całkującego int PID_KD; wzmocnienie członu różniczkującego int PID_DEADBAND; przycięcie wartości wyjściowej. int PID_LIMITHIGH, int PID_LIMITLOW; low / high limit wartości wyjściowej. int PID_SETPOINT; wartość docelowa. int PID_I_LOWLIMIT,int PID_I_HIGHLIMIT; ograniczenie wartości zakumulowanej członu całkującego int PID_I; zakumulowana wartość członu całkującego int PID_RAMP_POWER,int PID_RAMP_TRESHOLD; - ramp settings dr inż. Piotr Czekalski 78

79 Komunikacja przez BT. dr inż. Piotr Czekalski 79

80 Komunikacja przez BT (i USB). W urządzeniu wymagany jest SPP (Serial Port Profile). Klasy i interfejsy niezbędne do komunikacji znajdują się w paczce lejos.nxt.comm, definicje klas strumieni znajdują się paczce java.io Możliwa komunikacja zarówno z wykorzystaniem pakietów jak i strumieni danych. Klasy: Bluetooth / BTConnection LCP / LCPBTResponder / LCPResponder USB / USBConnection RS485 / RS485Connection BitBus Network, Port 4 Rconsole do śledzenia dr inż. Piotr Czekalski 80

81 Zdalne nadzorowanie w trybie autonomicznym. Wykonanie programu można monitorować prawie w czasie rzeczywistym z PC, poprzez łącze Bluetooth, po uruchomieniu w kostce NXT wątku LCPBTResponder oraz narzędzia NXT Monitor tool na komputerze PC. Przykład (część uruchamiana na kostce): LCPBTResponder lcpthread = new LCPBTResponder(); lcpthread.setdaemon(true); lcpthread.start(); dr inż. Piotr Czekalski 81

82 Zdalne nadzorowanie i debuggowanie w trybie autonomicznym. LeJOS NXJ dostarcza podstawowe funkcje do obsługi sytuacji krytycznych oraz debuggowania kodu, w szczególności: Obsługa wyjątków podczas wykonania na kostce, debuggowanie przez USB i Bluetooth. NXJ obsługuje większość wyjątków języka Java. Zdalne śledzenie wymaga otwarcia komunikacji z PC poprzez wywołanie jednej z metod RConsole: public static void openusb(int timeout); public static void openbuletooth(int timeout); public static void open(); Uruchomienia na PC debuggera (nxjconsole). dr inż. Piotr Czekalski 82

83 Zdalne nadzorowanie i debuggowanie w trybie autonomicznym. Wysłanie tekstu do konsoli na PC: public static void println(string s); public static void print(string s); Zamknięcie połączenia: public static void close(); dr inż. Piotr Czekalski 83

84 Sterowanie serwomechanizmów. Klasa: Klasa Motor; (Motor.A, Motor.B, Motor.C) Metody: void flt(); void forward(); void backward(); int getactualspeed(); float getbasepower(); int getlimitangle(); int getmode(); int getpower(); int getspeed(); int getstopangle(); dr inż. Piotr Czekalski 84

85 Sterowanie serwomechanizmów. Metody (c.d.): int gettachocount(); void resettachocount(); boolean ismoving(); boolean isrotating(); boolean isregulating(); void lock(); void regulatespeed(boolean yes); void reversedirection(); void rotate(int angle); //blokujące void rotate(int angle, boolean immediate); void rotateto(int angle); void rotateto(int angle, boolean immediate); dr inż. Piotr Czekalski 85

86 Sterowanie serwomechanizmów. Metody (c.d.): void setbrakepower(int pwr); void setpower(int power); void setspeed(int speed); // stopni/min. void stop(); void smoothacceleration(boolean yes); dr inż. Piotr Czekalski 86

87 Sterowanie serwomechanizmów. Przykłady: import lejos.nxt.*; public class HelloWorld { public static void main(string [] args) { Motor.B.resetTachoCount(); Motor.C.resetTachoCount(); while (!Button.ENTER.isPressed()) { LCD.drawInt(Motor.B.getTachoCount(), 1, 1); LCD.drawInt(Motor.C.getTachoCount(), 1, 2); try { Thread.sleep(100); LCD.clear(); } catch(interruptedexception e){} }}} dr inż. Piotr Czekalski 87

88 Sterowanie serwomechanizmów. Przykłady: (...) Motor.B.setSpeed(720);// 2 RPM Motor.C.setSpeed(720); Motor.B.forward(); Motor.C.forward(); Thread.sleep (1000); //to trzeba obłożyć musi być Try-catch żeby skompilować Motor.A.stop(); Motor.C.stop(); Motor.A.regulateSpeed(true); Motor.A.rotateTo( 360); Motor.A.rotate(-720,true); while(motor.a.isrotating()){}; int angle = Motor.A.getTachoCount(); // should be -360 (...) dr inż. Piotr Czekalski 88

89 Zaawansowane techniki programowania. Programowanie wysokopoziomowe z wykorzystaniem klas pilotów i nawigatorów. Programowanie behawioralne za pomocą definiowania wzorców zachowań i interakcji między nimi. dr inż. Piotr Czekalski 89

90 Zaawansowane techniki programowania. Na kolejnych slajdach zaprezentowano klasy służące wysokopoziomowemu modelowaniu ruchu robota. Klasy zmieniają się praktycznie co wydanie LeJOS Klasy często są dedykowane do konkretnego modelu fizycznego robota (np. tribot, hexapod, etc.) Techniki i klasy obejmują również wsparcie dla poruszania się po płaszczyźnie (i przestrzeni). Klasy obejmują implementację algorytmów uniwersalnych, jak np. A* lub Dijkstra. Następne slajdy obejmują omówienie modelu programowania behawioralnego (subsumption / behavioral programming). dr inż. Piotr Czekalski 90

91 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Klasa: Pose;-reprezentuje położenie (X, Y) i Heading model kierunek. Zawiera metody do aktualizacji pozycji zgodnie z ruchami wykonywanymi przez robota. Konstruktory: 0 degrees Pose() - nowa pozycja w 0,0,0 (X,Y,kierunek) X Pose(float X, float Y, float heading) Metody: angleto(point dest); - pobierz kierunek od Pose do dest Point. distanceto(point dest); - pobierz odległość od Pose do dest (w linii prostej) arcupdate(float distance, float turnangle); - zaktualizuj położenie i kierunek w związku z ruchem robota po łuku. Y +90 degrees dr inż. Piotr Czekalski 91

92 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Klasa: Pose; Metody: getheading(); - zwróć kierunek Pose. getlocation(); - skonwertuj Pose do Point. getx(); gety(); - pobierz koordynaty X i Y. moveupdate(float distance); - zaktualizuj Pose o określony dystans (zachowując kierunek z Pose) pointat(float distance, float bearing); - pobierz Point, który znajduje się w odległości distance i kierunku bearing wzgl. osi X. relativebearing(point destination); - podaj kąt do punktu destination względem bieżącego kierunku Pose. rotateupdate(float angle); - obróć kierunek Pose o zadany kąt angle. dr inż. Piotr Czekalski 92

93 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Klasa: Pose; Metody: setheading(float heading); - ustaw kierunek w Pose. setlocation(point p); - ustaw położenie w Pose na podstawie punktu p. setlocation(float x, float y); - ustaw położenie Pose na wartości x,y. translate(float dx, float dy); - przesuń Pose o zadaną odległość dx i dy. dr inż. Piotr Czekalski 93

94 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Klasa: Move; - klasa reprezentująca ruch (operację przesunięcia robota). Konstruktor: Move(float distance, float angle, boolean ismoving); - stworzenie klasy ruchu, do zastosowania z pilotem. Move(Move.MoveType type, float distance, float angle, boolean ismoving); - stworzenie klasy ruchu, do zastosowania z pilotem ruch określonego typu Move.MoveType: ARC, ROTATE, STOP, TRAVEL. Move(Move.MoveType type, float distance, float angle, float travelspeed, float rotatespeed, boolean ismoving); Move(boolean ismoving, float angle, float turnradius); dr inż. Piotr Czekalski 94

95 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Klasa: Move; - klasa reprezentująca ruch (operację przesunięcia robota). Konstruktor: convertangletodistance(float angle, float turnradius); - static wylicza odległość przebytą, przy zadanym kącie obrotu angle i promieniu łuku turnradius. convertdistancetoangle(float distance, float turnradius); - static wylicza kąt obrotu przy podanej odległości przebytej distance oraz promieniu łuku turnradius. getangleturned(); - zwraca kąt obrotu, dla: ARC, ROTATE. getarcradius(); - zwraca promień łuku, dla: ARC. getdistancetraveled(); - zwraca przebytą odległość. getmovetype(); - zwraca typ ruchu (ARC, ROTATE, STOP, TRAVEL). dr inż. Piotr Czekalski 95

96 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Klasa: Move; - klasa reprezentująca ruch (operację przesunięcia robota). Konstruktor: getrotatespeed(); - zwraca prędkość obrotową. gettimestamp(); -?? - zwraca timestamp momentu utworzenia ruchu Move (jak, skoro nie ma RTC!!) gettravelspeed(); - zwraca liniową prędkość poruszania się, dla: TRAVEL i ARC. ismoving(); - informuje, czy ruch został zakończony czy też nadal trwa. setvalues(move.movetype type, float distance, float angle, boolean ismoving); - pozwala na recykling utworzonego wcześniej ruchu to ma znaczenie natury poprawy wydajności i oszczędności pamięci. dr inż. Piotr Czekalski 96

97 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Class: ArcAlgorithms; - statyczna klasa narzędziowa, która dostarcza metody do obliczania ścieżek na podstawie podanych lokalizacji, obliczanie odległości, etc. Metody: Move[] getbestpath(pose start, float turnradius1, Pose destination, float turnradius2) Odnajduje najlepszą trasę pomiędzy dwoma punktami. start i destination zawierają kierunek, tak więc robot wykona łuk, a następnie będzie podróżował po linii prostej do następnego łuku tak, aby kierunek docelowy był zachowany. Algorytm przeszukuje 16 kombinacji ścieżek, aby znaleźć najkrótszą. Nawet jeśli podane kąty są dodatnie (left turn), algorytm przeszukuje również kierunki odwrotne (right turns). dr inż. Piotr Czekalski 97

98 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Class: ArcAlgorithms; Metody: Move[] getbestpath(pose start, Point destination, float turnradius) Analogicznie jak opisana poprzednio metoda, przy czym destination jest klasy Point zatem nie zawiera końcowego ustawienia kierunku (i nie jest ono brane pod uwagę w procesie tworzenia ścieżki. Po stacie robot wykonuje niezbędny łuk, a następnie porusza się po linii prostej. Move[] getbestpath(move[][] paths) Algorytm wybiera najkrótszą ścieżkę, spośród podanych jako paths (inteligentne sortowanie). dr inż. Piotr Czekalski 98

99 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Class: ArcAlgorithms; Metody: Move[][] getavailablepaths(pose start, float turnradius1, Pose destination, float turnradius2) Ta metoda generuje cztery ścieżki, ze start Pose do destination Pose. Każda ścieżka zawiera łuk, ruch po linii prostej i kolejny łuk do pozycji docelowej. dr inż. Piotr Czekalski 99

100 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Class: ArcAlgorithms; Metody: Move[][] getavailablepaths(pose start, Point destination, float turnradius) Analogicznie, jak poprzednio opisany, przy czym docelowy kierunek nie jest brany pod uwagę. Uwaga jeśli docelowy punkt znajduje się wewnątrz koła obrotu początkowego, wartości distancetraveled i arcangle będą Float.NaN dr inż. Piotr Czekalski 100

101 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Class: ArcAlgorithms; Metody: findpointonheading(point original, float heading, float distance) algorytm wylicza Point, który znajduje się w odległości distance i kierunku heading od położenia original. gettriangleangle(point p1,point p2,point pa) metoda wylicza kąt pomiędzy punktami p1 i p2 zakładając środek obrotu w punkcie pa. public static float getheading(float oldheading,float changeinheading) znając poprzedni kierunek oldheading i jego zmianę changeinheading, wylicza nowy kierunek. getheading(point from,point to) wylicza kierunek między dwoma punktami. dr inż. Piotr Czekalski 101

102 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Class: ArcAlgorithms; Metody: getarc(point p1,point p2,float radius,float heading,boolean forward) wylicza parametry ruchu po łuku z punktu p1 do p2. Robot w p2 będzie ustawiony w kierunku heading. getarcbackward(float forwardarc) analogicznie do powyższej, ale w przeciwnym kierunku. distbetweenpoints(point a,point b) wylicza odległość w linii prostej pomiędzy dwoma punktami. findp2(point c,point p3,float radius) wylicza punkt P2 gdy robot porusza się do punktu p3 po łuku, o punkcie środkowym c oraz promieniu skrętu radius. dr inż. Piotr Czekalski 102

103 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Class: ArcAlgorithms; Metody: findcirclecenter(point p1,float radius,float heading) wylicza środek okręgu dla łuku, po którym porusza się robot. Radius>0 oznacza, że środek znajduje się na prawo od robota, <0, że na lewo. dr inż. Piotr Czekalski 103

104 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Klasa: WayPoint; - podstawowa klasa do tworzenia i zarządzania ścieżkami poruszania się robota (trasami). WayPoint to skierowany lub nieskierowany punkt. Gdy robot przejeżdża przez skierowany WayPoint, musi w jego lokalizacji zostać ustawiony w podanym w WayPoint kierunku. Trasa robota, to uszeregowana lista klas WayPoint. Konstruktory: WayPoint(double x, double y); - Utworzenie z koordynat X i Y. WayPoint(double x, double y, double heading); - jw. ale tworzy skierowany WayPoint. WayPoint(Point p); - utworzenie WayPoint z klasy Point. WayPoint(Pose p); - utworzenie WayPoint z klasy Pose. dr inż. Piotr Czekalski 104

105 Zaawansowane techniki programowania. lejos.robotics.navigation.*. Klasa: WayPoint; Metody: checkvalidity(pose p); - sprawdź, czy Pose p jest zgodne z WayPoint. getmaxheadingerror(); -?? getmaxpositionerror(); -?? setmaxheadingerror(double error); -?? setmaxpositionerror(double error); -?? getpose(); - zwróć obiekt klasy Pose na podstawie WayPoint. dr inż. Piotr Czekalski 105

106 Zaawansowane techniki programowania. Klasy pilotów. Klasy pilotów służą pominięciu każdorazowych obliczeń związanych ze sterowaniem ruchem robota. Wprowadzają wyższy poziom programowania, opartego o fizykę konkretnego modelu, dzięki czemu można się skupić na tworzeniu ruchu, a nie środkach do jego tworzenia. Kolejne slajdy prezentują różne klasy pilotów, dla różnych modeli robotów. dr inż. Piotr Czekalski 106

107 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: DifferentialPilot; - dla robotów z napędem różnicowym, np.. Tribot. Sterowanie jest możliwe dzięki znajomości wymiarów fizycznych napędu (i.e. odległość między kołami, średnica koła) oraz informacji z wbudowanych tachometrów. Za / przeciw: Proste sterowanie na poziomie abstrakcyjnym (np. ruch do przodu, obrót). Czułe na śliskie powierzchnie, inercję konstrukcji, wbudowaną niedokładność serwomechanizmów, etc. Konstruktory: DifferentialPilot(float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor); DifferentialPilot(float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor, boolean reverse) dr inż. Piotr Czekalski 107

108 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: DifferentialPilot; Metody: backward(); - ruch robota NXT do tyłu, do momentu zawołania stop(). forward(); - ruch robota NXT do przodu, do momentu zawołania stop(). getangle(); - zwróć kąt obrotu (akumulowany) od ostatniego zawołania resettachocount(). getleft(), getright(); - zwraca klasy lewego i prawego motoru. getleftactualspeed(), getrightactualspeed(); - zwraca lewą/prawą (stopni / sekundę) aktualizowane co 100ms (korzysta z osobnego wątku / listenera). getleftcount(), getrightcount(); - zwraca lewą/prawą wartość tachometru (dodatnie = do przodu, ujemne = do tyłu). dr inż. Piotr Czekalski 108

109 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: DifferentialPilot; Metody: getspeed(); - zwróć bieżącą wartość prędkości robota. gettraveldistance(); - zwraca pokonany dystans od ostatniego wywołania resettachocount(). getturnratio(); - zwraca przełożenie napędu (liczbę obrotów/obrót robota). ismoving(); - true, jeśli robot się porusza (jest wykonywane nieblokujące wywołanie powodujące ruch). regulatespeed(boolean yes); - znacznik regulatora prędkości niezbędny dla metody steer(). dr inż. Piotr Czekalski 109

110 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: DifferentialPilot; Metody: resettachocount(); - reset tachometrów (wołany najczęściej na starcie) rotate(int angle); - obrót robota o zadany kąt* rotate(int angle, boolean imret); - jw. ale nieblokujące wywołanie setspeed(int speed); - ustawienie prędkości obrotowej robota (stopni/s) steer(int turnrate); - obrót robota z prędkością turnrate (-200- środek po prawej, 200-środek po lewej) do momentu wywołania stop(). steer(int turnrate, int angle); - jw. ale o zadany kąt angle, potem zatrzymuje ruch samoczynnie steer(int turnrate, int angle, boolean immret);- jw. ale nieblokujące wywołanie. * błąd implementacji powoduje, że ta metoda rzuca wyjątkiem. dr inż. Piotr Czekalski 110

111 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: DifferentialPilot; Metody: Stop(); - zatrzymanie ruchu. Nie resetuje tachometrów. travel(float distance); - Przesunięcie robota o zadany dystans distance (wartość dodatnia distance oznacza ruch do przodu). travel(float distance,boolean immret); - jw. ale nieblokujące wywołanie. dr inż. Piotr Czekalski 111

112 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: CompassPilot; - używa kompasu (sensora) do korekty kierunku ruchu (np. powstającej na wskutek różnic w prędkości obrotowej silników). Konstruktory: CompassPilot(CompassSensor compass, float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor) CompassPilot(CompassSensor compass, float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor, boolean reverse) CompassPilot(SensorPort compassport, float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor) CompassPilot(SensorPort compassport, float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor, boolean reverse) dr inż. Piotr Czekalski 112

113 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: CompassPilot; Metody(wszystkie klasy Pilot +): calibrate(); -kalibracja kompasu getangle(); - pobierz kierunek robota (kąt z kompasu, układ kartezjański). getcompass(); - pobierz obiekt kompasu. getheading(); - pobierz bieżący kierunek robota. setheading(int angle); - ustaw bieżący kierunek robota (w stopniach). isrotating(); - true jeśli wykoywany jest obrót istraveling(); - true jeśli wykonywany jest ruch (dla wywołań nieblokujących) rotateto(int heading); - obrót robota do zadanej wartości kąta rotateto(int heading, boolean immret); - jw. nieblokujące dr inż. Piotr Czekalski 113

114 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: SegwayPilot; - support klasy nawigatora dla modeli dwókółkowych, równoważonych dynamiczne (np. NXTWay). Dziedziczy po Segway, a nie po klasie Pilota. Konstruktor: SegwayPilot(EncoderMotor left, EncoderMotor right, GyroSensor gyro, double wheeldiameter, double trackwidth) Metody: addmovelistener(movelistener m) dodaje listenera do śledzenia ruchu arc(double radius, double angle) poruszanie robota po łuku o promieniu radius o podany kąt angle, potem stop. arc(double radius, double angle, boolean immret) jw. ale wywołanie nieblokujące. dr inż. Piotr Czekalski 114

115 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: SegwayPilot; Metody: arcbackward(double radius) poruszaj robota po łuku o zadanym promieniu radius, do tyłu, do momentu zawołania stop. arcforward(double radius) jw. ale do przodu. Backward() jazda do tyłu do momentu zawołania stop(). forward() jw. ale do przodu. getangleincrement()?? getmaxtravelspeed() zwraca maksymalną prędkość postępową robota getminradius() zwraca minimalny promień łuku, po którym może poruszać się robot. dr inż. Piotr Czekalski 115

116 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: SegwayPilot; Metody: getmovement() zwraca obiekt Move dla bieżącego ruchu (zanim zostanie zakończony, po wywołaniu nieblokującym) getmovementincrement()?? getrotatemaxspeed() maksymalna prędkość obrotowa getrotatespeed() bieżąca prędkość obrotowa gettravelspeed() bieżąca prędkość postępowa ismoving() true, jeśli wykonywany jest jakiś ruch rotate(int angle); - obrót o zadany kąt angle rotate(int angle, boolean imret); - jw. ale nieblokujący setminradius(double radius) ustaw minimalny promień łuku, po którym może poruszać się robot. dr inż. Piotr Czekalski 116

117 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: SegwayPilot; Metody: setmovedelay(int delay) ustaw czas pomiędzy ruchami, niezbędny na zrównoważenie robota (w milisekundach) setrotatespeed(double velocity) ustaw prędkość obrotową (kątową) dla wywołania metody rotate(). settravelspeed(double speed) nie zaimplementowane. steer(double turnrate, double angle, boolean immret) poruszaj robotem po zadanym łuku, z prędkością turnrate o kąt angle. travelarc(double radius, double distance, boolean immret) jw. ale zamiast kąta w łuku podaje się dystans do przebycia, po łuku. dr inż. Piotr Czekalski 117

118 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: SteeringPilot; - klasa dedykowana dla robotów z przednią osią skrętną (Ackerman-style drive). Konstruktory: SteeringPilot(double drivewheeldiameter, RegulatedMotor drivemotor, boolean reversedrivemotor, RegulatedMotor steeringmotor, double minturnradius, int leftturntacho, int rightturntacho) Metody: addmovelistener(movelistener m) dodaje instancję listenera, który jest wołany podczas wykonywania ruchu. arc(double radius, double angle) ruch robota po łuku o proieniu skrętu radius, o odległość kątową angle, potem zatrzymanie. arc(double radius, double angle, boolean immret) jw. ale nieblokujące. dr inż. Piotr Czekalski 118

119 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: SteeringPilot; - klasa dedykowana dla robotów z przednią osią skrętną (Ackerman-style drive). Metody: arcbackward(double radius) poruszanie robota wstecz po łuku o promieniu skrętu radius. arcforward(double radius) jw. ale w przód. backward() jazda wstecz po prostej, do momentu zawołania stop(). forward() jw. ale w przód getmaxtravelspeed() pobierz maksymalną prędkość z jaką może poruszać się robot getminradius() pobierz minimalny promień skrętu konstrukcji (uwaga ten model fizyczny nie potrafi zrobić obrotu w miejscu). dr inż. Piotr Czekalski 119

120 Zaawansowane techniki programowania. Klasy pilotów. lejos.robotics.navigation.*. Klasa: SteeringPilot; - klasa dedykowana dla robotów z przednią osią skrętną (Ackerman-style drive). Metody: setminradius(double minturnradius) ustaw minimalny promień skrętu settravelspeed(double speed) ustaw liniową prędkość poruszania się (bieżącą) stop() zatrzymaj robota / ruch travel(double distance) przemieść robobota po linii prostej na odległość distance travel(double distance, boolean immret) jw. nieblokujące travelarc(double turnradius, double distance) ruch po łuku o promieniu skrętu turnradius, na odległość distance. travelarc(double turnradius, double distance, boolean immret) jw. nieblokujące. dr inż. Piotr Czekalski 120

121 Zaawansowane techniki programowania. Nawigacja. Klasy nawigatorów wprowadzają kolejny (w stosunku do klas pilotów) wyższy poziom sterowania robotem. Pilot pozwala na wysokopoziomowe tworzenie ruchu robota, natomiast zbudowany na nim nawigator dodatkowo podaje jego położenie na płaszczyźnie (lub w przestrzeni), śledząc skutki każdego z ruchów. dr inż. Piotr Czekalski 121

122 Zaawansowane techniki programowania. Nawigacja. lejos.robotics.navigation.*. Klasa uwaga wycofane tylko referencyjnie jako model: TachoNavigator; - używa klasy pilota Pilot (co oznacza napęd różnicowy) do nawigacji w przestrzeni płaskiej X-Y. Konstruktory: TachoNavigator(float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor) TachoNavigator(float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor, boolean reverse) TachoNavigator(Pilot pilot) TachoNavigator(float wheeldiameter, float drivelength) - zakłada, że lewy silnik jest sterowany z Port A, prawy z Port C. Metody: angleto(float x, float y) zwraca kierunek (angle, w stopniach) do punktu podanego przez koordynaty x,y. dr inż. Piotr Czekalski 122

123 Zaawansowane techniki programowania. Nawigacja. lejos.robotics.navigation.*. Klasa: TachoNavigator; Metody: backward() jazda wstecz do momentu wywołania stop() distance(float x, float y) wyliczenie odległości robota (w linii prostej) od punktu o współrzędnych x,y. forward() jazda do przodu do momentu wywołania stop() getangle() - pobierz bieżący kierunek robota względem osi X (Y=90st.) getpilot() - pobierz instancję powiązanej klasy pilota. getx(), gety() - podaj współrzędne robota goto(float X, float Y) pokieruj robota do współrzędnych X,Y goto(float X, float Y, boolean immret) jw. nieblokujące ismoving() - true, jeśli aktualnie wykonywany jest ruch dr inż. Piotr Czekalski 123

124 Zaawansowane techniki programowania. Nawigacja. lejos.robotics.navigation.*. Klasa: TachoNavigator; Metody: rotate(int angle) obrót robota o kąt angle (+ lub -) rotateleft() obrót przeciwnie do ruchu wskazówek zegara, aż do momentu wywołania stop() rotateright() jw. ale zgodnie z ruchem wskazówek zegara rotateto(int angle) obróć robota do określonego kąta angle rotateto(int angle, boolean immret) jw. nieblokujące setposition(float x, float y,float directionangle) ustawienie robota w przestrzeni X,Y. setspeed(int speed) ustaw prędkość liniową (stopni/s) travel(float distance) ruch liniowy na odległość distance (wartość ujemna spowoduje ruch robota wstecz). dr inż. Piotr Czekalski 124

125 Zaawansowane techniki programowania. Nawigacja. lejos.robotics.navigation.*. Klasa: TachoNavigator; Metody: travel(float distance, immret) ruch liniowy na odległość distance (wartość ujemna spowoduje ruch robota wstecz). Wywołanie nieblokujące. turn(float radius) ruch robota po łuku o określonym promieniu skrętu radius do momentu wywołania stop() turn(float radius, int angle) ruch robota po łuku o określonym promieniu skrętu radius o określon kąt angle turn(float radius, int angle, boolean immret) jw. nieblokujące wywołanie. updateposition() aktualizacja położenia robota na płaszczyźnie X,Y dr inż. Piotr Czekalski 125

126 Zaawansowane techniki programowania. Nawigacja. lejos.robotics.navigation.*. Class: CompassNavigator; - Analogicznie do TachoNavigator, ale używa klasy CompassPilot do generowania ruchu. Konstruktory: CompassNavigator(SensorPort compassport, float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor) CompassNavigator(SensorPort compassport, float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor, boolean reverse) CompassNavigator(CompassSensor compass, float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor, boolean reverse) CompassNavigator(CompassPilot compasspilot) dr inż. Piotr Czekalski 126

127 Zaawansowane techniki programowania. Nawigacja. lejos.robotics.navigation.*. Class: CompassNavigator; - Analogicznie do TachoNavigator, ale używa klasy CompassPilot do generowania ruchu. Metody (jak w TachoNavigator, +): calibratecompass() rozpoczyna procedurę kalibracji kompasu (sensora). Robot wykonuje pełny obrót wokół osi. rotate(float angle, boolean immediatereturn) obrót robota o określony kąt angle, wywołanie nieblokujące. rotateto(float angle, boolean immediatereturn) obrót robota do określonego kierunku angle, wywołanie nieblokujące. stop() zatrzymanie robota i określenie jego nowego położenia x,y. travel(float distance, boolean immret) ruch robota po linii prostej na odległość distance, wywołanie nieblokujące. updatexy() - aktualizacja położenia X,Y, zakłada że odczyt z kompasu się nie zmienia w międzyczasie. dr inż. Piotr Czekalski 127

128 Zaawansowane techniki programowania. Kontrolery ruchu. lejos.robotics.navigation.*. Klasa: NavPathController; - klasa, która korzystając z listy WayPoints potrafi poprowadzić robota po ścieżce w sposób zautomatyzowany. Konstruktory: NavPathController(MoveController pilot); - tworzy kontroler na podstawie klasy pilota. Dowolna klasa, która implmentuje interface MoveController może być użyta jako klasa pilot. NavPathController(MoveController pilot, PoseProvider poseprovider) tworzy kontroler z dedykowanym poseprovider zamiast standardowego poseprovidera, bazującego na tachometrach. NavPathController(MoveController pilot, PoseProvider poseprovider, PathFinder pathfinder) tworzy kontroler zdolny do automatycznego wyznaczania ścieżki do celu (metoda goto()) dzięki użyciu klasy PathFinder. dr inż. Piotr Czekalski 128

129 Zaawansowane techniki programowania. Kontrolery ruchu. lejos.robotics.navigation.*. Klasa: NavPathController; - klasa, która korzystając z listy WayPoints potrafi poprowadzić robota po ścieżce w sposób zautomatyzowany. Metody: addlistener(waypointlistener alistener); - dodaje delegat (do listenera), który jest wołany każdorazowo po osiągnięciu kolejnego Waypoint. addtargetlistener(waypointlistener targetlistener) jw. ale jest wołany gdy robot dotrze do celu (? theoretical waypoint??). flushqueue() zatrzymanie robota i wyczyszczenie kolejnki Waypoints. followroute(collection<waypoint> aroute, boolean immediatereturn) ruch po ścieżce aroute, wywołanie nieblokujące. getmovecontroller() - zwraca powiązany obiekt MoveController. getpathfinder() - zwraca powiązany obiekt PathFinder (o ile dotyczy tylko dla wersji kontrolera, który sam odnajduje ścieżkę do celu). dr inż. Piotr Czekalski 129

130 Zaawansowane techniki programowania. Kontrolery ruchu. lejos.robotics.navigation.*. Klasa: NavPathController; - klasa, która korzystając z listy WayPoints potrafi poprowadzić robota po ścieżce w sposób zautomatyzowany. Metody: getposeprovider() - wraca powiązany PoseProvider (o ile jest). getwaypoint() - zwraca bieżący WayPoint, do którego porusza się robot. goto(double x, double y) ruch do punktu o współrzędnych x,y. goto(waypoint dest) ruch do punktu dest (inna wersja ww.). goto(waypoint dest, boolean immret) jw., nieblokujące. interrupt() - przerywa bieżący ruch, ale nie czyści kolejki WayPoints. resume() - kontynuacja po interrupt. isgoing() - zwraca false gdy robot dotarł do końca ścieżki, w przeciwnym wypadku true. dr inż. Piotr Czekalski 130

131 Zaawansowane techniki programowania. Kontrolery ruchu. lejos.robotics.navigation.*. Klasa: NavPathController; - klasa, która korzystając z listy WayPoints potrafi poprowadzić robota po ścieżce w sposób zautomatyzowany. Metody: setposeprovider(poseprovider pp) ustaw w klasie nowy PoseProvider. setpathfinder(pathfinder pf) ustaw w klasie nowy PathFinder. waitfordestinationreached() - ustaw blokadę do momentu dotarcia do celu. dr inż. Piotr Czekalski 131

132 Zaawansowane techniki programowania. Przykład nawigacji. lejos.robotics.navigation.*. import lejos.nxt.*; import lejos.robotics.navigation.*; public class klasa { public static void main (String[] aarg) throws Exception { DifferentialPilot pilot = new DifferentialPilot(0.056f,0.112f,Motor.B, Motor.C); /*Using pilot*/ pilot.travel(1); pilot.rotate(180); pilot.travel(1); pilot.rotate(-180); /*Using navigator and directed waypoints*/ NavPathController npc = new NavPathController(pilot); npc.goto(new WayPoint(0.5f,0.5f,180)); Sound.playTone(1000, 1000); npc.goto(1,1); } } dr inż. Piotr Czekalski 132

133 Zaawansowane techniki programowania. Monte-Carlo. lejos.robotics.localization.*. Klasy: MCLParticle; MCLParticleSet; MCLPoseProvider; OdometryPoseProvider; Opis: Paczka zawiera cztery klasy implementujące probabilistyczne podejście do zagadnienia sterowania robotem [27]. MCLParticle and MCLParticleSet klasy filtrów cząsteczek (dla pojedynczej cząstki i zbioru) związanych z tzw. lokalizacją Monte-Carlo (MCL). MCLPoseProvider PoseProvider, który może zastąpićstandardowy w klasie NavPathController. Wymaga RangeScanner oraz RangeMap do poprawnego działania. dr inż. Piotr Czekalski 133

134 Zaawansowane techniki programowania. Mapy. lejos.robotics.mapping.*. Klasy: LineMap; - klasa map tworzonych za pomocą linii. Reprezentuje powierzchnię 2D wraz z przeszkodami (np. pomieszczenie i labirynt). Mapę można tworzyć programistycznie jak i załadować z pliku (plik znajduje się na NXT). Konstruktor: LineMap() - tworzy pustą mapę na potrzeby deserializacji z pliku. LineMap(Line[] lines, Rectangle bounds) tworzy mapę ograniczoną od zewnątrz przez bounds wraz z przeszkodami zdefiniowanymi za pomocą lines. Metody: dumpmap(dataoutputstream dos) serializacja mapy do strumienia dos. loadmap(datainputstream dis) deserializacja z dis. dr inż. Piotr Czekalski 134

135 Zaawansowane techniki programowania. Mapy. lejos.robotics.mapping.*. Klasa: LineMap; Metody: getboundingrect() pobierz zewnętrzne ograniczenie. getlines() pobierz linie określające przeszkody. inside(point p) sprawdź, czy punkt p jest w obszarze mapy. range(pose p) wylicza odległość robota od najbliższej przeszkody (pozycja i kierunek robota określa p). dr inż. Piotr Czekalski 135

136 Zaawansowane techniki programowania. Mapy. lejos.robotics.mapping.*. Klasa: ShapeFileLoader; - klasa pomocnika. Konstruktor: ShapeFileLoader(InputStream in);- tworzy klasę pomocnika, która potrafi wczytać i utworzyć obiekt klasy LineMap z pliku w formacie Shapefile (SHP) standard ArcGIS. Matody: readlinemap() wczytuje LineMap z pliku Shapefile (plik musi znajdować się na kostce NXT Intelligent Brick). dr inż. Piotr Czekalski 136

137 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: Node; - tworzy węzeł - punkt X,Y który może być powiązany z innymi węzłami. Węzeł jest podstawą wyszukiwania i tworzenia ścieżek (start, cel, via). Kolekcja węzłów tworzy tranzytywny graf. Konstruktor: Node(float x,float y); Metody: addneighbor(node neighbor) dodaj sąsiada neighbor wraz z powiązaniem pomiędzy obiektem i sąsiadem. calculateg(node neighbor) oblicz odległość do neighbor. calculateh(node goal) oblicz odległość do celu goal. getf_score() funkcja pomocnicza dla algorytmu A* algorithm. getg_score() jw. getneighbors() zwróć wszystkich sąsiadów węzła. dr inż. Piotr Czekalski 137

138 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: Node; Metody: getpredecessor() funkcja pomocnicza, używana przez algorytm A*. removeneighbor(node neighbor) usuwa sąsiada (połączenie) pomiędzy węzłem i podanym jako neighbor. neighbors() podaj liczbę sąsiadów. setg_score() funkcja pomocnicza, używana przez algorytm A*. seth_score() jw. setpredecessor() jw. dr inż. Piotr Czekalski 138

139 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: GridNode;- rozszerzenie klasy Node, udostępnia odstęp w podejściu bazującym na siatce grid. Konstruktor: GridNode(float x, float y, float grid_space) Methods: calculateg(node neighbor) wylicz odległość do węzła sąsiedniego neighbor. calculateh(node goal) wylicz odległość do węzła docelowego goal. dr inż. Piotr Czekalski 139

140 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: FourWayGridMesh(LineMap map, float gridspace, float clearance);- tworzy sieć połączeń typu grid z uwzględnieniem mapy tak, aby węzły nie kolidowały z przeszkodami. Konstruktor: GridNode(float x, float y, float grid_space). Metody: addnode(node n, int neighbors) dodaj węzeł n i połącz z sąsiadami. connect(node n1, Node n2) Powiąż węzły n1 i n2 jako sąsiadujące. disconnect(node n1, Node n2) Analogicznie jw. ale rozłącz (usuń powiązanie między sąsiadami). dr inż. Piotr Czekalski 140

141 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: FourWayGridMesh; Metody: getmesh() zwróć kolekcję węzłów (mesh). regenerate() przelicz ponownie mesh (np. po załadowaniu nowej mapy). removenode(node n) usuń węzeł (i wszystkie jego powiązania z sąsiadami). setclearance(float clearance) zmień strefę bezpieczeństwa dla węzła (minimalny odstęp od przeszkody ze względu na fizyczne wymiary robota). setgridspacing(float gridspace) zmień rozmiar oczka siatki grid. setmap(linemap map) załaduj nową mapę przeszkód. dr inż. Piotr Czekalski 141

142 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: RandomSelfGeneratingNode;- rozszerzenie klasy Node, z funkcją automatycznego tworzenia powiązań przy wywołaniu getneighbors(). Konstruktor: RandomSelfGeneratingNode(float x, float y, float maxdist, int connections) tworzy węzeł i losowe połączenia ze wskazaną liczbą sąsiadów, w odległości nie większej niż 'maxdist'. RandomSelfGeneratingNode(float x, float y, float maxdist, int connections, Node goal) jw. ale tworzy węzeł docelowy goal. Metody: getneighbors() zwraca listę sąsiadów dla węzła. Jeśli jest to pierwsze wywołanie, losowo jest tworzona lista połączeń z sąsiadami (trwa trochę dłużej niż zwykły zwrot sąsiadów). dr inż. Piotr Czekalski 142

143 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: AstarSearchAlgorithm;- implementacja algorytmu A* (heurystyczne przeszukiwanie grafu). Konstruktor: AstarSearchAlgorithm(); Metody: findpath(node start, Node goal) zwraca odnalezioną ścieżkę (listę obiektów WayPoint włącznie z start i goal). dr inż. Piotr Czekalski 143

144 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Opis: Algorytmy klasy pathfinding odnajdują optymalną ścieżkę w grafie połączeń między węzłami (zwykle jest to najkrótsza ścieżka) z uwzględnieniem przeszkód i mapy. Klasy: DijkstraPathFinder; NodePathFinder; RandomPathFinder; ShortestPathFinder; dr inż. Piotr Czekalski 144

145 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: DijkstraPathFinder;- implmentacja algorytmu wyszukiwania najkrótszej ścieżki Dijkstra. Używa algorytmu A* jako rozwinięcia podejścia zaproponowanego przez Dijkstrę. Używa własnej implementacji klas węzłów (DijkstraPathFinder.Node) do reprezentacji punktów. Uwaga! Algorytm zakłada, że robot na rozmiar fizycznego punktu, w związku z powyższym konieczne jest rozszerzenie linii reprezentujących przeszkody o co najmniej połowę największego obrysu zewnętrznego robota tak, aby nie zahaczył podczas zakręcania przy narożnikach oraz podczas przejeżdżania przez przewężenia. Konstruktor: DijkstraPathFinder(LineMap map) tworzy klasę wraz z mapą obiektów (przeszkód). dr inż. Piotr Czekalski 145

146 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: DijkstraPathFinder; Metody: addlistener(waypointlistener wpl) dodaje delegata listenera findroute(pose start, WayPoint finish) wyszukuje najlepszą ścieżkę, począwszy z pozycji start, kończąc na finish biorąc pod uwagę mapę podaną w konstruktorze. findroute(pose start, WayPoint finish, LineMap themap) jw. ale używa podanej jako parametr mapy. getbest(dijkstrapathfinder.node currentdestination) metoda pomocnicza getiterationcount() metoda pomocnicza getmap() pobierz mapę powiązaną z algorytmem dr inż. Piotr Czekalski 146

147 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: DijkstraPathFinder; Metody: getnodecount() zwraca liczbę węzłów getroute(dijkstrapathfinder.node destination) metoda pomocnicza dla findpath() - tworzy subścieżkę. incandidateset(dijkstrapathfinder.node anode) jw., sprawdza czy anode jest na liście kandydatów initialize() inreachedset(dijkstrapathfinder.node anode) metoda pomocnicza dla findpath(); sprawdza czy anode jest w zasięgu lengthenlines(float delta) modyfikuje linie tworzące przeszkody tak, aby robot zmieścił się (vide punkt vs wymiar fizyczny). dr inż. Piotr Czekalski 147

148 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: DijkstraPathFinder; Metody: segmentblocked(dijkstrapathfinder.node from, DijkstraPathFinder.Node thedest) metoda pomocnicza dla findpath() setmap(arraylist<line> themap) ustaw nową mapę przeszkód setmap(linemap themap) ustaw nową mapę przeszkód (inna wersja) startpathfinding(pose start, WayPoint end) uruchom wyszukiwanie ścieżki dr inż. Piotr Czekalski 148

149 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: RandomPathFinder; - Algorytm wyszukiwania który wykorzystuje mapę i zbiór pomiarów odległości. Wyszukuje ścieżkę korzystając z metody najkrótszych kroków, omijając przeszkody. Algorytm jest niedeterministyczny, w związku z tym po każdym uruchomieniu może wygenerować inną ścieżkę. Konstruktor: RandomPathFinder(RangeMap map, RangeReadings readings); Metody: addlistener(waypointlistener wpl) dodaje delegat listenera. findroute(pose start, WayPoint goal) wyszukuje ścieżkę (uruchamia algorytm). startpathfinding(pose start, WayPoint end) uruchamia algorytm (jak jest różnica z ww.??) dr inż. Piotr Czekalski 149

150 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: RandomPathFinder; Metody: getnodecount() - podaj liczbę węzłów w odnalezionej trasie. getroute(shortestpathfinder.node destination) metoda pomocnicza dla findpath(). incandidateset(shortestpathfinder.node anode) jw. initialize() pusta inicjalizacja. inreachedset(shortestpathfinder.node anode) metoda pomocnicza. dr inż. Piotr Czekalski 150

151 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: RandomPathFinder; Metody: lengthenlines(float delta) rozszerza wymiary przeszkód tak, aby robot zyskał fizyczne wymiary. segmentblocked(shortestpathfinder.node from, ShortestPathFinder.Node thedest) metoda pomocnicza dla findpath(). setmap(arraylist<line> themap) ustawienie nowej mapy. setmap(linemap themap) ustawienie nowej mapy. startpathfinding(pose start, WayPoint end) uruchomienie algorytmu wyszukiwania. dr inż. Piotr Czekalski 151

152 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: ShortestPathFinder; - Inna wersja algorytmu Dijksty i A*, stosuje podejście korzystając z faktu zmiany kierunku przy połączeniu między węzłami (stara się utrzymać kierunek przy przeszukiwaniu). Dzięki temu teoretycznie powinna powstawać (naj)krótsza ścieżka. Analogicznie jak przy pozostałych należy pamiętać o lengthenlines(). Algorytm bierze pod uwagę mapę przeszkód. Konstruktor: ShortestPathFinder(LineMap map); dr inż. Piotr Czekalski 152

153 Zaawansowane techniki programowania. Ścieżki. lejos.robotics.pathfinding.*. Klasa: ShortestPathFinder; Metody: addlistener(waypointlistener wpl) dodaje delegat listenera. findroute(pose start, WayPoint goal) wyszukuje trasę na bieżącej mapie. findroute(pose start, WayPoint goal, LineMap map) wyszukuje trasę z uwzględnieniem nowej mapy map. getbest(shortestpathfinder.node currentdestination) metoda pomocnicza dla findpath() getiterationcount() podaje numer bieżącej iteracji. getmap() pobiera bieżącą mapę. dr inż. Piotr Czekalski 153

154 Zaawansowane techniki programowania. Detektory. lejos.robotics.objectdetection.*. Opis: Warstwa abstrakcyjna dla wielosensorowej detekcji obiektów. Klasy: FeatureDetectorAdapter klasa abstrakcyjna adaptera ułatwiająca tworzenie sensorów właściwości implementujących FeatureDetector. FusorDetector multiplekser logiczny detektorów przeszkód dla jednego robota. RangeFeature Podstawowy kontener informacji o wykrytej przeszkodzie (obiekcie). Zawiera odległość i kąt położenia względem robota oraz parametry pomiarowe. RangeFeatureDetector (rozszerza FeatureDetectorAdapter) udostępnia zdolność identyfikacji położenia obiektów / przeszkód. TouchFeatureDetector podobny do RangeFeatureDetector ale używa wyłącznie sensorów dotyku (binarnych). dr inż. Piotr Czekalski 154

155 Zaawansowane techniki programowania. Detektory. lejos.robotics.objectdetection.*. Klasa: FeatureDetectorAdapter klasa abstrakcyjna adaptera FeatureDetector. Aktualnie udostępnia wyłącznie metodę scan(). Konstruktor: FeatureDetectorAdapter(int delay) tworzy klasę. Parametr delay określa minimalny czas pomiędzy kolejnymi odczytami stanu. Metody: addlistener(featurelistener l) dodaje delegata listenera FeatureDetector. enabledetection(boolean enable) włącz / wyłącz funkcję detekcji przeszkód. getdelay() - pobierz minimalny czas pomiędzy odczytami. dr inż. Piotr Czekalski 155

156 Zaawansowane techniki programowania. Detektory. lejos.robotics.objectdetection.*. Klasa: FeatureDetectorAdapter; Metody: isenabled() - true, jeśli identyfikacja obiektów jest włączona. notifylisteners(feature feature) scan() - wykonuje pojedyncze skanowanie przestrzeni i zwraca najbliższy obiekt / przeszkodę Feature. setdelay(int delay) ustawia minimalny czas odczytu pomiędzy kolejnymi odczytami z sensorów. dr inż. Piotr Czekalski 156

157 Zaawansowane techniki programowania. Detektory. lejos.robotics.objectdetection.*. Klasa: FusorDetector klasa udostępniająca wspólną warstwę do zarządzania zestawem sensorów (np. ultradźwiękowy i dotykowy). Ta klasa posiada osobny wątek obsługujący FeatureDetectors. Konstruktor: FusorDetector() Metody: adddetector(featuredetector d) dodaj kolejny detektor obiektów. addlistener(featurelistener l) dodaj delegat do listenera. enabledetection(boolean enable) włącz / wyłącz detekcję. getdelay() - minimalny czas pomiędzy odczytami stanu sensorów. dr inż. Piotr Czekalski 157

158 Zaawansowane techniki programowania. Detektory. lejos.robotics.objectdetection.*. Klasa: FusorDetector Metody: featuredetected(feature feature, FeatureDetector detector) metoda pomocnicza IsEnabled() - true, jeśli skanowanie obiektów jest włączone. scan() - wykonuje pojedyncza skanowanie i zwraca obiekt Feature, zawierający dane najbliższej przeszkody. setdelay(int delay) ustaw minimalny czas przerwy pomiędzy odczytami. dr inż. Piotr Czekalski 158

159 Zaawansowane techniki programowania. Detektory. lejos.robotics.objectdetection.*. Klasa: RangeFeature Kontener opisujący pojedynczy zidentyfikowany obiekt / przeszkodę. RangeFeature zawiera tylko podstawowe informacje o obiekcie (RangeReading), czyli odległość, kąt względem bieżącego kierunku robota. Klasę można odziedziczyć i rozszerzyć np. o kolor. Teoretycznie może reprezentować dowolny obiekt (np. piłkę). Konstruktor: RangeFeature(RangeReading rr) tworzy obiekt RangeFeature zawierający pojedyncze dane RangeReading z identyfikacji obiektu. RangeFeature(RangeReadings rrs) jw. ale tworzy na podstawie wielu odczytów. dr inż. Piotr Czekalski 159

160 Zaawansowane techniki programowania. Detektory. lejos.robotics.objectdetection.*. Klasa: RangeFeature; Metody: getrangereading() - zwraca obiekt RangeReading dla zidentyfikowanego obiektu. getrangereadings() - jw. ale wiele odczytów gdy RangeFeature powstał wcześniej z wielu pomiarów. gettimestamp() - podaj timestamp operacji (jakim cudem, skoro nie ma RTC?). dr inż. Piotr Czekalski 160

161 Zaawansowane techniki programowania. Detektory. lejos.robotics.objectdetection.*. Klasa: RangeFeatureDetector Klasa używa RangeFinder w celu identyfikacji obiektów i odległości. Można ją zaadaptować np. korzystając z NXTCam do identyfikacji kolorów, obiektów, etc. Konstruktor: RangeFeatureDetector(RangeFinder rf, float maxdistance, int delay) tworzy detektor wraz z konfiguracją maksymalnej odległości detekcji, odstępu między skanowaniami, sensora, etc. RangeFeatureDetector(RangeFinder rf, float maxdistance, int delay, double angle) jw. ale dodatkowo można podać kąt, jaki tworzy sensor z osią robota (jest to potem uwzględniane przy odczycie Feature w polu angle). dr inż. Piotr Czekalski 161

162 Zaawansowane techniki programowania. Detektory. lejos.robotics.objectdetection.*. Klasa: RangeFeatureDetector Metody: getmaxdistance() - zwraca maksymalną odległość, w jakiej jest dokonywana identyfikacja obiektów (z reguły ograniczenie fizyczne sensora). scan() - wykonuje skanowanie przestrzeni w poszukiwaniu obiektów. setmaxdistance(float distance) ustawia maksymalną odległość z jakiej system identyfikuje przeszkody./ obiekty. dr inż. Piotr Czekalski 162

163 Zaawansowane techniki programowania. Detektory. lejos.robotics.objectdetection.*. Klasa: TouchFeatureDetector klasa używa sensorów dotyku, udostępniając binarną odległość do przeszkody. Klasa posiada parametr offsetu (X,Y), który wskazuje odlgłość przeszkody zidentyfikowanej od środka robota (np. wymiary fizyczne zderzaka, etc.). Środek robota w przypadku napędu różnicowego znajduje się na osi łączącej koła. Konstruktor: TouchFeatureDetector(Touch touchsensor) Tworzy detektor dotyku, który teoretycznie znajduje się w centrum robota (bezużyteczne). TouchFeatureDetector(Touch touchsensor, double xoffset, double yoffset) jw. ale uwzględnia fizyczne wymiary robota i przesunięcie sensora względem środka robota. dr inż. Piotr Czekalski 163

164 Zaawansowane techniki programowania. Detektory. lejos.robotics.objectdetection.*. Klasa: TouchFeatureDetector. Metody: notifylisteners(feature feature) scan() wykonuje pojedyncze skanowanie przestrzeni. dr inż. Piotr Czekalski 164

165 Programowanie behawioralne. Paczka lejos.robotics.subsumption.* Programowanie behawioralne jest podobne do sposobu, w jaki funkcjonują ludzie (hierarchia potrzeb i wartości). Nie jest to osobna metoda programowania robotów włącznie z ruchem serwomechanizmami i śledzeniem świata za pomocą sensorów lecz raczej model programowania, który współpracuje z poprzednio opisanymi technikami. dr inż. Piotr Czekalski 165

Programowanie robotów LEGO Mindstorms NXT

Programowanie robotów LEGO Mindstorms NXT Programowanie robotów LEGO Mindstorms NXT Laboratorium 11 i 12: Programowanie zaawansowanych modeli robotów w różnych językach. Wersja 1.3 6 września 2012 2 Zastrzeżenia prawne. Niniejszy dokument jest

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Narzędzia i aplikacje Java EE Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Niniejsze opracowanie wprowadza w technologię usług sieciowych i implementację usługi na platformie Java EE (JAX-WS) z

Bardziej szczegółowo

Programowanie w Javie

Programowanie w Javie Programowanie w Javie Andrzej Czajkowski Lista nr 0 Debugger w Javie Celem ćwiczenia jest poznanie podstawowych funkcji narzędzia debugera (odpluskwiacz) w środowisku Eclipse. Po ukończeniu ćwiczenia student

Bardziej szczegółowo

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje WWW - laboratorium Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w

Bardziej szczegółowo

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8 Programowanie Urządzeń Mobilnych Laboratorium nr 7, 8 Android Temat 1 tworzenie i uruchamianie aplikacji z użyciem Android SDK Krzysztof Bruniecki 1 Wstęp Platforma Android jest opartym na Linuxie systemem

Bardziej szczegółowo

1. Opis. 2. Wymagania sprzętowe:

1. Opis. 2. Wymagania sprzętowe: 1. Opis Aplikacja ARSOFT-WZ2 umożliwia konfigurację, wizualizację i rejestrację danych pomiarowych urządzeń produkcji APAR wyposażonych w interfejs komunikacyjny RS232/485 oraz protokół MODBUS-RTU. Aktualny

Bardziej szczegółowo

WPROWADZENIE DO JĘZYKA JAVA

WPROWADZENIE DO JĘZYKA JAVA WPROWADZENIE DO JĘZYKA JAVA programowanie obiektowe KRÓTKA HISTORIA JĘZYKA JAVA KRÓTKA HISTORIA JĘZYKA JAVA 1991 - narodziny języka java. Pierwsza nazwa Oak (dąb). KRÓTKA HISTORIA JĘZYKA JAVA 1991 - narodziny

Bardziej szczegółowo

Ćwiczenie 1. Przygotowanie środowiska JAVA

Ćwiczenie 1. Przygotowanie środowiska JAVA Ćwiczenie 1 Przygotowanie środowiska JAVA 1. Wprowadzenie teoretyczne Instalacja JDK (Java Development Kit) NaleŜy pobrać z java.sun.com środowisko i zainstalować je. Następnie naleŝy skonfigurować środowisko.

Bardziej szczegółowo

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe Architektury Usług Internetowych Laboratorium 2. Usługi sieciowe Wstęp Celem laboratorium jest zapoznanie się z modelem usług sieciowych na przykładzie prostego serwera Apache Axis2. Apache Axis2 Apache

Bardziej szczegółowo

Multimedia JAVA. Historia

Multimedia JAVA. Historia Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania

Bardziej szczegółowo

JDK 7u25 NetBeans 7.3.1 Zajęcia 1 strona - 1

JDK 7u25 NetBeans 7.3.1 Zajęcia 1 strona - 1 JDK 7u25 NetBeans 7.3.1 Zajęcia 1 strona - 1 Uwaga: INSTALACJA NOWEJ PLATFORMY JAVA SE Wygląd stron WWW pobieranych z serwera może być inny (aktualizacje), od tych pokazanych w instrukcji, ponieważ instrukcja

Bardziej szczegółowo

SKRó CONA INSTRUKCJA OBSŁUGI

SKRó CONA INSTRUKCJA OBSŁUGI SKRó CONA INSTRUKCJA OBSŁUGI dla systemu Windows Vista SPIS TREśCI Rozdział 1: WYMAGANIA SYSTEMOWE...1 Rozdział 2: INSTALACJA OPROGRAMOWANIA DRUKARKI W SYSTEMIE WINDOWS...2 Instalowanie oprogramowania

Bardziej szczegółowo

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Dr inż. Zofia Kruczkiewicz Dwa sposoby tworzenia apletów Dwa sposoby

Bardziej szczegółowo

OPTIMA PC v2.2.1. Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA 255 2011 ELFON. Instrukcja obsługi. Rev 1

OPTIMA PC v2.2.1. Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA 255 2011 ELFON. Instrukcja obsługi. Rev 1 OPTIMA PC v2.2.1 Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA 255 Instrukcja obsługi Rev 1 2011 ELFON Wprowadzenie OPTIMA PC jest programem, który w wygodny sposób umożliwia konfigurację

Bardziej szczegółowo

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 1, część 2 1 Język JAVA podstawy Plan wykładu: 1. Krótka historia Javy 2. Jak przygotować sobie środowisko programistyczne 3. Opis środowiska JDK 4. Tworzenie programu krok po

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika Warsztaty AVR Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR Dariusz Wika 1.Krótki wstęp: Eclipse to rozbudowane środowisko programistyczne, które dzięki możliwości instalowania

Bardziej szczegółowo

Projektowanie aplikacji internetowych laboratorium

Projektowanie aplikacji internetowych laboratorium Projektowanie aplikacji internetowych laboratorium Programowanie w języku Java Do realizacji projektu potrzebne jest zintegrowane środowisko programistyczne NetBeans 7 (zrzuty ekranów pochodzą z wersji

Bardziej szczegółowo

Java jako język programowania

Java jako język programowania Java jako język programowania Interpretowany programy wykonują się na wirtualnej maszynie (JVM Java Virtual Machine) Składnia oparta o język C++ W pełni zorientowany obiektowo (wszystko jest obiektem)

Bardziej szczegółowo

Symulator tabletu z systemem Windows 8.

Symulator tabletu z systemem Windows 8. Symulator tabletu z systemem Windows 8. Witam w mojej kolejnej publikacji, tym razem dowiesz się: - Jak uruchomić symulator tabletu z w pełni funkcjonalnym systemem operacyjnym Windows 8; - Jak wykorzystać

Bardziej szczegółowo

Instalacja Czytnika Kart GemPc Twin 1.4 dla przeglądarek 32 bitowych dla systemów Windows XP/Vista/2000/7/8 32 bity i 64 bity Wersja 1.

Instalacja Czytnika Kart GemPc Twin 1.4 dla przeglądarek 32 bitowych dla systemów Windows XP/Vista/2000/7/8 32 bity i 64 bity Wersja 1. Instalacja Czytnika Kart GemPc Twin 1.4 dla przeglądarek 32 bitowych dla systemów Windows XP/Vista/2000/7/8 32 bity i 64 bity Wersja 1.4 Spis treści: 1. Wymagania sprzętowe...2 2. Sprawdzenie oraz instalacja

Bardziej szczegółowo

INSTRUKCJA UŻYTKOWNIKA MPCC

INSTRUKCJA UŻYTKOWNIKA MPCC V1.0.0 (10.14.2015) 1 (7) INSTALACJA UWAGA: Produkt działa jako urządzenie nadrzędne Modbus. Dlatego w przypadku podłączania narzędzia do istniejącej sieci Modbus konieczne może okazać się odłączenie innego

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

Bardziej szczegółowo

Programowanie robotów LEGO Mindstorms NXT

Programowanie robotów LEGO Mindstorms NXT Programowanie robotów LEGO Mindstorms NXT Laboratorium 7: Programowanie robotów klasy Tribot w MRDS - programowanie graficzne w VPL #1 (zdalne sterowanie robotem). Wersja 1.3 8 października 2012 2 Zastrzeżenia

Bardziej szczegółowo

Zarządzanie Infrastrukturą IT. Jak ręcznie utworzyć instancję EAUDYTORINSTANCE na SQL Serwerze 2000. www.e-audytor.com

Zarządzanie Infrastrukturą IT. Jak ręcznie utworzyć instancję EAUDYTORINSTANCE na SQL Serwerze 2000. www.e-audytor.com Zarządzanie Infrastrukturą IT Jak ręcznie utworzyć instancję EAUDYTORINSTANCE na SQL Serwerze 2000 Data modyfikacji: 2007-04-17, 15:46 opracował: Maciej Romanowski v 2.2 powered by Romanowski 2007-03-15

Bardziej szczegółowo

Site Installer v2.4.xx

Site Installer v2.4.xx Instrukcja programowania Site Installer v2.4.xx Strona 1 z 12 IP v1.00 Spis Treści 1. INSTALACJA... 3 1.1 Usunięcie poprzedniej wersji programu... 3 1.2 Instalowanie oprogramowania... 3 2. UŻYTKOWANIE

Bardziej szczegółowo

Instrukcje dotyczące systemu Windows w przypadku drukarki podłączonej lokalnie

Instrukcje dotyczące systemu Windows w przypadku drukarki podłączonej lokalnie Strona 1 z 5 Połączenia Instrukcje dotyczące systemu Windows w przypadku drukarki podłączonej lokalnie Przed instalacją oprogramowania drukarki do systemu Windows Drukarka podłączona lokalnie to drukarka

Bardziej szczegółowo

Pracownia internetowa w szkole ZASTOSOWANIA

Pracownia internetowa w szkole ZASTOSOWANIA NR ART/SBS/07/01 Pracownia internetowa w szkole ZASTOSOWANIA Artykuły - serwery SBS i ich wykorzystanie Instalacja i Konfiguracja oprogramowania MOL Optiva na szkolnym serwerze (SBS2000) Artykuł opisuje

Bardziej szczegółowo

Załącznik 1 instrukcje instalacji

Załącznik 1 instrukcje instalacji Załącznik 1 instrukcje instalacji W poniższym załączniku przedstawione zostaną instrukcje instalacji programów wykorzystanych w trakcie tworzenia aplikacji. Poniższa lista przedstawia spis zamieszczonych

Bardziej szczegółowo

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Ćwiczenie 1. Kolejki IBM Message Queue (MQ) Ćwiczenie 1. Kolejki IBM Message Queue (MQ) 1. Przygotowanie Przed rozpoczęciem pracy, należy uruchomić "Kreator przygotowania WebSphere MQ" oraz przejść przez wszystkie kroki kreatora, na końcu zaznaczając

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Programowanie Obiektowe GUI

Programowanie Obiektowe GUI Programowanie Obiektowe GUI Swing Celem ćwiczenia jest ilustracja wizualnego tworzenia graficznego interfejsu użytkownika opartego o bibliotekę Swing w środowisku NetBeans. Ponadto, ćwiczenie ma na celu

Bardziej szczegółowo

Instrukcja instalacji oprogramowania pixel-fox

Instrukcja instalacji oprogramowania pixel-fox Instrukcja instalacji oprogramowania pixel-fox Aktualizacja 08/2015 V7 (PL) - Subject to change without notice! Wymagania systemu: Aktualne minimalne wymagania systemowe dla program pixel-fox na PC: -

Bardziej szczegółowo

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4 Spis treści 1 Wątki 1 2 Tworzenie wątków 1 3 Synchronizacja 3 4 Dodatki 3 5 Algorytmy sortowania 4 6 Klasa Runnable 4 Temat: Wątki Czym są wątki. Grafika. Proste animacje. Małe podsumowanie materiału.

Bardziej szczegółowo

Instrukcja obsługi przełącznika KVM ATEN CS661. Opis urządzenia. Instalacja urządzenia

Instrukcja obsługi przełącznika KVM ATEN CS661. Opis urządzenia. Instalacja urządzenia Instrukcja obsługi przełącznika KVM ATEN CS661 Opis urządzenia Przełącznik ATEN CS661 jest urządzeniem małych rozmiarów, które posiada zintegrowane 2 kable USB do podłączenia komputera lokalnego (głównego)

Bardziej szczegółowo

Tworzenie i korzystanie z plików JAR. Biblioteka JFreeChart

Tworzenie i korzystanie z plików JAR. Biblioteka JFreeChart Tworzenie i korzystanie z plików JAR Biblioteka JFreeChart Czy są pliki JAR? JAR (ang. Java ARchive) archiwum ZIP używane do strukturalizacji i kompresji plików klas języka Java oraz powiązanych z nimi

Bardziej szczegółowo

PODRĘCZNIK UŻYTKOWNIKA programu Pilot

PODRĘCZNIK UŻYTKOWNIKA programu Pilot TRX Krzysztof Kryński Cyfrowe rejestratory rozmów seria KSRC PODRĘCZNIK UŻYTKOWNIKA programu Pilot Wersja 2.1 Maj 2013 Dotyczy programu Pilot w wersji 1.6.3 TRX ul. Garibaldiego 4 04-078 Warszawa Tel.

Bardziej szczegółowo

inode instalacja sterowników USB dla adaptera BT 4.0

inode instalacja sterowników USB dla adaptera BT 4.0 instalacja sterowników USB dla adaptera BT 4.0 2014 ELSAT 1. Instalowanie sterownika USB dla adaptera BT4.0 Oprogramowanie do obsługi inode na komputery PC z Windows wymaga współpracy z adapterem obsługującym

Bardziej szczegółowo

Instrukcja obsługi programu DS150E. Dangerfield March. 2009V3.0 Delphi PSS

Instrukcja obsługi programu DS150E. Dangerfield March. 2009V3.0 Delphi PSS Instrukcja obsługi programu DS150E 1 SPIS TREŚCI Główne elementy... 3 Instrukcje instalacji.... 5 Konfiguracja Bluetooth.26 Program diagnostyczny...39 Zapis do ECU (OBD)...85 Skanowanie..88 Historia...93

Bardziej szczegółowo

Tablet bezprzewodowy QIT30. Oprogramowanie Macro Key Manager

Tablet bezprzewodowy QIT30. Oprogramowanie Macro Key Manager Tablet bezprzewodowy QIT30 Oprogramowanie Macro Key Manager Spis treści 1. Wprowadzenie... 3 2. Panel Sterowania - wprowadzenie... 4 3. Instalacja... 5 3.1 Jak stworzyć nowy profil... 5 3.2 Jak zmodyfikować

Bardziej szczegółowo

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1. Wielowątkowość Programowanie w środowisku rozproszonym. Wykład 1. Informacje organizacyjne Wymiar godzin: W-30, LAB-15 Zaliczenie wykonanie kilku programów i ich zaliczenie (w trakcie zajęć laboratoryjnych)

Bardziej szczegółowo

Instrukcja obsługi. Grand IP Camera III. Kamera IP do monitoringu

Instrukcja obsługi. Grand IP Camera III. Kamera IP do monitoringu Instrukcja obsługi Grand IP Camera III Kamera IP do monitoringu 1 ROZDZIAŁ 1 1.1Wstęp Grandtec przedstawia kamerę IP z wbudowanym serwerem web i możliwością zarządzania przez WWW. Produkt stanowi idealne

Bardziej szczegółowo

Db4o obiektowa baza danych wersja.net

Db4o obiektowa baza danych wersja.net Wstęp Db4o obiektowa baza danych wersja.net Db4o (database for objects) to obiektowa baza danych na platformę Java i.net. Pełna wersja bazy db4o jest dostępna na dwóch licencjach: open source: pozwala

Bardziej szczegółowo

Programowanie kontrolera RH robota S-420S Opracował: Karol Szostek

Programowanie kontrolera RH robota S-420S Opracował: Karol Szostek ZAKŁAD MECHANIKI PŁYNÓW I AERODYNAMIKI LABORATORIUM AUTOMATYZACJI PROCESOW PRODUKCYJNYCH Programowanie kontrolera RH robota S-420S Opracował: Karol Szostek 1. Cel ćwiczenia Rzeszów 2008 Celem ćwiczenia

Bardziej szczegółowo

1.Wstęp. 2.Generowanie systemu w EDK

1.Wstęp. 2.Generowanie systemu w EDK 1.Wstęp Celem niniejszego ćwiczenia jest zapoznanie z możliwościami debuggowania kodu na platformie MicroBlaze oraz zapoznanie ze środowiskiem wspomagającym prace programisty Xilinx Platform SDK (Eclipse).

Bardziej szczegółowo

Zaawansowane aplikacje internetowe - laboratorium

Zaawansowane aplikacje internetowe - laboratorium Zaawansowane aplikacje internetowe - laboratorium Web Services (część 3). Do wykonania ćwiczeń potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2005. Ponadto wymagany jest

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Ćwiczenia z S7-1200. Komunikacja S7-1200 z miernikiem parametrów sieci PAC 3200 za pośrednictwem protokołu Modbus/TCP.

Ćwiczenia z S7-1200. Komunikacja S7-1200 z miernikiem parametrów sieci PAC 3200 za pośrednictwem protokołu Modbus/TCP. Ćwiczenia z S7-1200 Komunikacja S7-1200 z miernikiem parametrów sieci PAC 3200 za pośrednictwem protokołu Modbus/TCP FAQ Marzec 2012 Spis treści 1 Opis zagadnienie poruszanego w ćwiczeniu. 3 1.1 Wykaz

Bardziej szczegółowo

Synchronizator plików (SSC) - dokumentacja

Synchronizator plików (SSC) - dokumentacja SZARP http://www.szarp.org Synchronizator plików (SSC) - dokumentacja Wersja pliku: $Id: ssc.sgml 4420 2007-09-18 11:19:02Z schylek$ > 1. Witamy w programie SSC Synchronizator plików (SZARP Sync Client,

Bardziej szczegółowo

TWORZENIE PROJEKTU W RIDE

TWORZENIE PROJEKTU W RIDE TWORZENIE PROJEKTU W RIDE Zintegrowane środowisko programistyczne RIDE7 firmy Raisonance umożliwia tworzenie, kompilację i debuggowanie kodu źródłowego na wiele różnych platform sprzętowych. Pakiet oprogramowania

Bardziej szczegółowo

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

Symulacja działania sterownika dla robota dwuosiowego typu SCARA w środowisku Matlab/Simulink. Symulacja działania sterownika dla robota dwuosiowego typu SCARA w środowisku Matlab/Simulink. Celem ćwiczenia jest symulacja działania (w środowisku Matlab/Simulink) sterownika dla dwuosiowego robota

Bardziej szczegółowo

Instrukcja użytkownika ARSoft-WZ1

Instrukcja użytkownika ARSoft-WZ1 05-090 Raszyn, ul Gałczyńskiego 6 tel (+48) 22 101-27-31, 22 853-48-56 automatyka@apar.pl www.apar.pl Instrukcja użytkownika ARSoft-WZ1 wersja 3.x 1. Opis Aplikacja ARSOFT-WZ1 umożliwia konfigurację i

Bardziej szczegółowo

Instrukcja obsługi Poznań 2010

Instrukcja obsługi Poznań 2010 Instrukcja obsługi Poznań 2010 Przewodnik szybkiej instalacji dla kamer IQeye 420S, 041S, 042S, 510, 511 oraz serii 540 i 700. Strona 2 1. Podłącz kamerę IQeye do sieci komputerowej poprzez złącze RJ45

Bardziej szczegółowo

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First) Microsoft.NET: ASP.NET MVC + Entity Framework (Code First) Do realizacji projektu potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2012. W ramach projektu budowana jest prosta

Bardziej szczegółowo

TAB9-200 XENTA 97ic 9.7 TABLET ANDROID 4.1.1 JELLY BEAN - INSTRUKCJA AKTUALIZACJI

TAB9-200 XENTA 97ic 9.7 TABLET ANDROID 4.1.1 JELLY BEAN - INSTRUKCJA AKTUALIZACJI TAB9-200 XENTA 97ic 9.7 TABLET ANDROID 4.1.1 JELLY BEAN - INSTRUKCJA AKTUALIZACJI 1 ZANIM ZACZNIESZ: ZABEZPIECZ WAŻNE DANE Przeprowadzenie aktualizacji tabletu Yarvik do wersji Android 4.1.1 spowoduje

Bardziej szczegółowo

Instrukcja instalacji i konfiguracji bazy danych SQL SERVER 2008 EXPRESS R2. Instrukcja tworzenia bazy danych dla programu AUTOSAT 3. wersja 0.0.

Instrukcja instalacji i konfiguracji bazy danych SQL SERVER 2008 EXPRESS R2. Instrukcja tworzenia bazy danych dla programu AUTOSAT 3. wersja 0.0. Instrukcja instalacji i konfiguracji bazy danych SQL SERVER 2008 EXPRESS R2 Instrukcja tworzenia bazy danych dla programu AUTOSAT 3 wersja 0.0.4 2z12 1. Wymagania systemowe. Przed rozpoczęciem instalacji

Bardziej szczegółowo

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44 Zaawansowane aplikacje internetowe EJB 1 Rozróżniamy dwa rodzaje beanów sesyjnych: Stateless Statefull Celem tego laboratorium jest zbadanie różnic funkcjonalnych tych dwóch rodzajów beanów. Poszczególne

Bardziej szczegółowo

Instalator czytnika kart mikro 1.6 Getin Noble Bank SA

Instalator czytnika kart mikro 1.6 Getin Noble Bank SA Instalator czytnika kart mikro 1.6 Getin Noble Bank SA Instalacja Czytnika Kart 1.6 aplikacji GB24 dla Klientów Korporacyjnych w przeglądarkach 32 bitowych dla systemów Windows XP/Vista/2000/7/8 64 bit

Bardziej szczegółowo

AKTUALIZACJA OPROGRAMOWANIA DO ROBOTA ODKURZAJĄCEGO KOBOLD

AKTUALIZACJA OPROGRAMOWANIA DO ROBOTA ODKURZAJĄCEGO KOBOLD Strona 1 z 7 AKTUALIZACJA OPROGRAMOWANIA DO ROBOTA ODKURZAJĄCEGO KOBOLD Możesz polepszyć i zoptymalizować działanie swojego Robota odkurzającego Kobold VR100 za pomocą nowego programu aktualizacyjnego

Bardziej szczegółowo

Tworzenie i wykorzystanie usług

Tworzenie i wykorzystanie usług Strona 1 Co to jest usługa w systemie Android? Usługi HTTP Obsługa wywołania HTTP GET Obsługa wywołania HTTP POST Obsługa wieloczęściowego wywołania HTTP POST Usługi lokalne Usługi zdalne Tworzenie usługi

Bardziej szczegółowo

Dział Dopuszczający Dostateczny Dobry Bardzo dobry Celujący

Dział Dopuszczający Dostateczny Dobry Bardzo dobry Celujący Przedmiotowy system oceniania Zawód: Technik Informatyk Nr programu: 312[ 01] /T,SP/MENiS/ 2004.06.14 Przedmiot: Systemy Operacyjne i Sieci Komputerowe Klasa: pierwsza Dział Dopuszczający Dostateczny Dobry

Bardziej szczegółowo

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf Materiały poprawione Rozwiązanie zadania w NetBeans IDE 7.4: Jarosław Ksybek, Adam Miazio Celem ćwiczenia jest przygotowanie prostej aplikacji

Bardziej szczegółowo

Instrukcja obsługi urządzenia DS150E z systemem operacyjnym Windows 7. Dangerfield luty 2010 V1.0 Delphi PSS

Instrukcja obsługi urządzenia DS150E z systemem operacyjnym Windows 7. Dangerfield luty 2010 V1.0 Delphi PSS Instrukcja obsługi urządzenia DS150E z systemem operacyjnym Windows 7 Dangerfield luty 2010 V1.0 Delphi PSS 1 SPIS TREŚCI Główne elementy....3 Instrukcje instalacji.......5 Instalacja adaptera Bluetooth.....17

Bardziej szczegółowo

Falowniki Wektorowe Rexroth Fv Parametryzacja

Falowniki Wektorowe Rexroth Fv Parametryzacja Rexroth Fv Falowniki Wektorowe Rexroth Fv Parametryzacja 1 Rexroth Fv 2 3 Częstotl. wyjściowa Prędkość wyjściowa Częstotl. odniesienia Ustalanie przez użytk. Częstotl. wyj. Naciśnij Func b Naciśnij Set

Bardziej szczegółowo

Instalacja Czytnika Kart 2.4 dla przeglądarek 64 bitowych dla systemów Windows XP/Vista/2000/7/8 64 bit

Instalacja Czytnika Kart 2.4 dla przeglądarek 64 bitowych dla systemów Windows XP/Vista/2000/7/8 64 bit Instalacja Czytnika Kart 2.4 dla przeglądarek 64 bitowych dla systemów Windows XP/Vista/2000/7/8 64 bit Dokumentacja Użytkownika SPIS TREŚCI I. INSTALACJA CZYTNIKA KART W SYSTEMIE WINDOWS... 3 II. PONOWNA

Bardziej szczegółowo

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,

Bardziej szczegółowo

Instalacja MUSB2232FKA w systemie Windows 7

Instalacja MUSB2232FKA w systemie Windows 7 Instalacja MUSB2232FKA w systemie Windows 7 1. Instalację przeprowadziłem w systemie Windows 7 Home Premium wersja 32 bity. System pracował ze standardowymi ustawieniami kontroli konta użytkownika. Wkładamy

Bardziej szczegółowo

Memeo Instant Backup Podręcznik Szybkiego Startu

Memeo Instant Backup Podręcznik Szybkiego Startu Wprowadzenie Memeo Instant Backup pozwala w łatwy sposób chronić dane przed zagrożeniami cyfrowego świata. Aplikacja regularnie i automatycznie tworzy kopie zapasowe ważnych plików znajdujących się na

Bardziej szczegółowo

Instrukcja instalacji systemu. CardioScan 10, 11 i 12

Instrukcja instalacji systemu. CardioScan 10, 11 i 12 Instrukcja instalacji systemu CardioScan 10, 11 i 12 w wersji 76a/77a (pliki pobrane ze strony: http://www.oxford.com.pl/pobieranie/) Grudzień 2014 Strona 2 Instrukcja instalacji systemu CardioScan 10,

Bardziej szczegółowo

Instalacja Czytnika Kart 1.4 dla przeglądarek 32 bitowych dla systemów Windows XP/Vista/2000/7/8 64 bit i 32 bit

Instalacja Czytnika Kart 1.4 dla przeglądarek 32 bitowych dla systemów Windows XP/Vista/2000/7/8 64 bit i 32 bit Instalacja Czytnika Kart 1.4 dla przeglądarek 32 bitowych dla systemów Windows XP/Vista/2000/7/8 64 bit i 32 bit Dokumentacja Użytkownika SPIS TREŚCI I. INSTALACJA CZYTNIKA KART W SYSTEMIE WINDOWS... 3

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

Instalacja Czytnika Kart w systemie Windows 7

Instalacja Czytnika Kart w systemie Windows 7 Instalacja Czytnika Kart w systemie Windows 7 Dokumentacja użytkownika BGK@24 BIZNES Dokumentacja Użytkownika BGK@24BIZNES 1 SPIS TREŚCI I. INSTALACJA CZYTNIKA KART W SYSTEMIE WINDOWS 7... 3 II. DEINSTALACJA

Bardziej szczegółowo

Krótkie wprowadzenie. Przegląd (patrz obrazek na zewnętrznej karcie) Konfiguracja. Polski. Wkładanie akumulatora

Krótkie wprowadzenie. Przegląd (patrz obrazek na zewnętrznej karcie) Konfiguracja. Polski. Wkładanie akumulatora Pl_JB Zen Xtra.fm Page 1 Wednesday, September 17, 2003 3:38 PM Krótkie wprowadzenie Przegląd (patrz obrazek na zewnętrznej karcie) 1. Przycisk zasilania 2. Przycisk przejścia wstecz 3. Przycisk głośności

Bardziej szczegółowo

Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu

Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu Instrukcja obsługi Aplikacja wizualizuje obszar projektu tj. Dorzecze Środkowej Odry będące w administracji Regionalnego Zarządu

Bardziej szczegółowo

Instrukcja instalacji oprogramowania pixel-fox

Instrukcja instalacji oprogramowania pixel-fox Instrukcja instalacji oprogramowania pixel-fox Aktualizacja 06/2010 V4.03 (PL) - Subject to change without notice! Wymagania systemu: Aktualne minimalne wymagania systemowe dla program pixel-fox na PC:

Bardziej szczegółowo

Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com

Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com Diagramy klas dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com O czym będzie? Notacja Ujęcie w różnych perspektywach Prezentacja atrybutów Operacje i metody Zależności Klasy aktywne,

Bardziej szczegółowo

SKRÓCONA INSTRUKCJA INSTALACJI MODEMU I KONFIGURACJA POŁĄCZENIA Z INTERNETEM NA WINDOWS 8 DLA AnyDATA ADU-520L

SKRÓCONA INSTRUKCJA INSTALACJI MODEMU I KONFIGURACJA POŁĄCZENIA Z INTERNETEM NA WINDOWS 8 DLA AnyDATA ADU-520L SKRÓCONA INSTRUKCJA INSTALACJI MODEMU I KONFIGURACJA POŁĄCZENIA Z INTERNETEM NA WINDOWS 8 DLA AnyDATA ADU-520L Przed rozpoczęciem instalacji przygotuj wszystkie niezbędne elementy wymagane do poprawnej

Bardziej szczegółowo

Instalacja i konfiguracja SAS PC Files Server

Instalacja i konfiguracja SAS PC Files Server , SAS Institute Polska listopad 2013 Szanowni Państwo! Niniejszy dokument stanowi opis procesu pobierania, instalacji oraz konfiguracji programu SAS PC Files Server. Program instalowany jest na komputerach

Bardziej szczegółowo

Fragmenty są wspierane od Androida 1.6

Fragmenty są wspierane od Androida 1.6 W androidzie można tworzyć dynamiczne interfejsy poprzez łączenie w moduły komponentów UI z aktywnościami. Moduły takie tworzy się za pomocą klasy Fragment, która zachowuje się jak zagnieżdżone aktywności

Bardziej szczegółowo

JDK można pobrać ze strony http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html

JDK można pobrać ze strony http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html Program napisany w języku Java, w wyniku kompilacji da kod bajtowy, plik z rozszerzeniem.class. Nie jest to plik wykonywalny samodzielnie w systemie operacyjnym tak jak pliki.exe. Uruchomienie gotowego

Bardziej szczegółowo

Laboratorium 1 - Programowanie proceduralne i obiektowe

Laboratorium 1 - Programowanie proceduralne i obiektowe Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?

Bardziej szczegółowo

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java: otwórz okienko Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU klasy wewnętrzne, lokalne i anonimowe biblioteka AWT zestaw Swing JFrame JPanel komponenty obsługa zdarzeń

Bardziej szczegółowo

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS PROBLEMY TECHNICZNE Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS Jeżeli stwierdziłeś występowanie błędów lub problemów podczas pracy z programem DYSONANS możesz skorzystać

Bardziej szczegółowo

Veronica. Wizyjny system monitorowania obiektów budowlanych. Instrukcja oprogramowania

Veronica. Wizyjny system monitorowania obiektów budowlanych. Instrukcja oprogramowania Veronica Wizyjny system monitorowania obiektów budowlanych Instrukcja oprogramowania 1 Spis treści 1. Aplikacja do konfiguracji i nadzoru systemu Veronica...3 1.1. Okno główne aplikacji...3 1.2. Edycja

Bardziej szczegółowo

Instrukcja instalacji oprogramowania pixel-fox

Instrukcja instalacji oprogramowania pixel-fox Instrukcja instalacji oprogramowania pixel-fox Aktualizacja 11/2011 V6 (PL) - Subject to change without notice! Wymagania systemu: Aktualne minimalne wymagania systemowe dla program pixel-fox na PC: -

Bardziej szczegółowo

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język

Bardziej szczegółowo

Instrukcja wgrywania aktualizacji oprogramowania dla routera Edimax LT-6408n

Instrukcja wgrywania aktualizacji oprogramowania dla routera Edimax LT-6408n Instrukcja wgrywania aktualizacji oprogramowania dla routera Edimax LT-6408n Uwaga! Nowa wersja oprogramowania oznaczona numerem 1.03v jest przeznaczona tylko dla routerów mających współpracować z modemem

Bardziej szczegółowo

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

ROGUE RF. Instrukcja obsługi (wersja poprawiona) Wireless Gamepad PC with headphones MT1503

ROGUE RF. Instrukcja obsługi (wersja poprawiona) Wireless Gamepad PC with headphones MT1503 ROGUE RF Wireless Gamepad PC with headphones MT1503 Instrukcja obsługi (wersja poprawiona) Dziękujemy za wybranie wspaniałego, bezprzewodowego gamepada ROGUE RF MT1503. Urządzenie jest zaawansowanym kontrolerem

Bardziej szczegółowo

Client Management Solutions i Mobile Printing Solutions

Client Management Solutions i Mobile Printing Solutions Client Management Solutions i Mobile Printing Solutions Instrukcja obsługi Copyright 2007 Hewlett-Packard Development Company, L.P. Windows jest zastrzeżonym znakiem towarowym firmy Microsoft Corporation,

Bardziej szczegółowo

Komputer rowerowy z GPS GB-580P Szybki start

Komputer rowerowy z GPS GB-580P Szybki start Komputer rowerowy z GPS GB-580P Szybki start Co to jest GPS? GPS oznacza Globalny System Pozycjonowania. Dla określenia położenia w trzech wymiarach (3D fix) niezbędny jest odbiór sygnału z przynajmniej

Bardziej szczegółowo

Instrukcja podstawowego uruchomienia sterownika PLC LSIS serii XGB XBC-DR20SU

Instrukcja podstawowego uruchomienia sterownika PLC LSIS serii XGB XBC-DR20SU Instrukcja podstawowego uruchomienia sterownika PLC LSIS serii XGB XBC-DR20SU Spis treści: 1. Instalacja oprogramowania XG5000 3 2. Tworzenie nowego projektu i ustawienia sterownika 7 3. Podłączenie sterownika

Bardziej szczegółowo