2021-10-04 17:31:55 +02:00
|
|
|
> Strona automatycznie zmigrowana z systemu Eduwiki z wykorzystaniem Pandoc
|
2021-10-04 16:58:37 +02:00
|
|
|
|
|
|
|
# Wykorzystanie pakietu jFuzzyLogic do modelowania sterownika rozmytego c.d. {#wykorzystanie_pakietu_jfuzzylogic_do_modelowania_sterownika_rozmytego_c.d.}
|
|
|
|
|
|
|
|
## Zadanie - Aktywny tempomat {#zadanie___aktywny_tempomat}
|
|
|
|
|
|
|
|
Wykorzystując pakiet jFuzzyLogic zaprojektuj system rozmyty sterujący
|
|
|
|
samochodem. Celem jest **utrzymanie stałego dystansu** od śledzonego
|
|
|
|
samochodu.
|
|
|
|
|
|
|
|
Możesz wziąć pod uwagę np. dwie zmienne opisujące sytuacje: szybkość
|
|
|
|
samochodu i dystans do samochodu jadącego z przodu i sterować zmianą
|
|
|
|
prędkości: przyspieszaj, hamuj, utrzymuj prędkość.
|
|
|
|
|
|
|
|
- Szkielet aplikacji:
|
|
|
|
[FuzzyChase.zip](attachment:chris/MIN_2016/Zajecia_9/FuzzyChase.zip "wikilink")
|
|
|
|
- przygotować plik: tempomat.fcl
|
|
|
|
|
|
|
|
### Nazwy zmiennych lingwistycznych powinny być następujące: {#nazwy_zmiennych_lingwistycznych_powinny_być_następujące}
|
|
|
|
|
|
|
|
VAR_INPUT
|
|
|
|
distance : REAL;
|
|
|
|
speed : REAL;
|
|
|
|
END_VAR
|
|
|
|
|
|
|
|
VAR_OUTPUT
|
|
|
|
acceleration : REAL;
|
|
|
|
END_VAR
|
|
|
|
|
|
|
|
*Pod systemem Linux dla poprawy wydajności grafiki należy przekazać do
|
|
|
|
maszyny wirtualnej Java następujący parametr
|
|
|
|
**-Dsun.java2d.opengl=true***
|
|
|
|
|
|
|
|
Kompilacja w laboratoriach:
|
|
|
|
|
|
|
|
javac -cp jFuzzyLogic.jar [[FuzzyChase]].java
|
|
|
|
|
|
|
|
Uruchomienie Windows
|
|
|
|
|
|
|
|
java -cp jFuzzyLogic.jar;. [[FuzzyChase]]
|
|
|
|
|
|
|
|
Uruchomienie Linux
|
|
|
|
|
|
|
|
java -cp jFuzzyLogic.jar:. [[FuzzyChase]]
|
|
|
|
|
|
|
|
Pamiętaj by archiwum z biblioteką [JFuzzyLogic](JFuzzyLogic "wikilink")
|
|
|
|
[jFuzzyLogic.jar](attachment:chris/MIN_2013/Zajecia_8/jFuzzyLogic.jar "wikilink")
|
|
|
|
wgrać do katalogu z którego uruchamiasz program.
|
|
|
|
|
|
|
|
### Poniżej rozwiązanie proponowane przez Kazuo Tanaki. {#poniżej_rozwiązanie_proponowane_przez_kazuo_tanaki.}
|
|
|
|
|
|
|
|
Użyj go jako punkt wyjścia do konstrukcji sterownika.
|
|
|
|
|
|
|
|
- Czy spełnia on swoją rolę?
|
|
|
|
- Poeksperymentuj z definicjami poszczególnych zmiennych
|
|
|
|
lingwistycznych.
|
|
|
|
- Jak wprowadzane zmiany wpływają na zachowanie samochodów?
|
|
|
|
- Jak powinny być one ustawione by sterownik działał optymalnie?
|
|
|
|
- Czy funkcje przynależności zmiennych powinny być symetryczne?
|
|
|
|
|
|
|
|
#### Dystans, szybkość i zmiana - zmienne lingwistyczne {#dystans_szybkość_i_zmiana___zmienne_lingwistyczne}
|
|
|
|
|
|
|
|
- **dystans**
|
|
|
|
|
|
|
|
`{{attachment:chris/MIN_2013/Zajecia_9/dystans.jpg}}`{=mediawiki}
|
|
|
|
|
|
|
|
- **szybkość**
|
|
|
|
|
|
|
|
`{{attachment:chris/MIN_2013/Zajecia_9/szybkosc.jpg}}`{=mediawiki}
|
|
|
|
|
|
|
|
- **zmiana szybkości**
|
|
|
|
|
|
|
|
`{{attachment:chris/MIN_2013/Zajecia_9/przyspieszenie.jpg}}`{=mediawiki}
|
|
|
|
|
|
|
|
#### Zbiór reguł {#zbiór_reguł}
|
|
|
|
|
|
|
|
- R1: IF dystans jest krótki AND szybkość jest mała THEN utrzymuj
|
|
|
|
szybkość
|
|
|
|
- R2: IF dystans jest krótki AND szybkość jest duża THEN redukuj
|
|
|
|
szybkość
|
|
|
|
- R3: IF dystans jest długi AND szybkość jest mała THEN zwiększaj
|
|
|
|
szybkość
|
|
|
|
- R4: IF dystans jest długi AND szybkość jest duża THEN utrzymuj
|
|
|
|
szybkość
|
|
|
|
|
|
|
|
`{{attachment:chris/MIN_2013/Zajecia_9/reguly.jpg}}`{=mediawiki}
|
|
|
|
|
|
|
|
#### Ilustracja działania sterownika: {#ilustracja_działania_sterownika}
|
|
|
|
|
|
|
|
`{{attachment:chris/MIN_2013/Zajecia_9/sterownik1.jpg}}`{=mediawiki}
|
|
|
|
|
|
|
|
## Zadanie 1 {#zadanie_1}
|
|
|
|
|
|
|
|
Oblicz stan sterownika dla parametrów wejściowych:
|
|
|
|
|
|
|
|
- prędkość 45 km/h
|
|
|
|
- dystans 25 m
|
|
|
|
|
|
|
|
## Zadanie 2 {#zadanie_2}
|
|
|
|
|
|
|
|
Zaimplementuj sterownik w pliku tempomat.fcl, uruchom, przetestuj i
|
|
|
|
dobierz optymalne jego parametry
|