Trend Könnyen készíthető „önvezető autó” Fuzzy logikával

Könnyen készíthető „önvezető autó” Fuzzy logikával

Könczöl Boldizsár, Gál László | 2021.07.20 13:21

Könnyen készíthető „önvezető autó” Fuzzy logikával

A kísérlet során használt vonalkövető autó

Az autós világban egyre többször szóba kerülő önvezető járműveknek sok különböző érzékelőből származó, eltérő formátumú adatot kombinálva kell algoritmusok mentén döntést hoznia. Egy, a Savaria Műszaki Intézetben (ELTE-IK) hallgatói szakdolgozati feladat részeként végzett kísérlet során azt vizsgálták meg, hogy a Fuzzy logika mennyire alkalmas egy jármű végig vezetésére egy előre felrajzolt útvonalon. Cikkünkben a kísérletet bemutató „Fuzzy logikát alkalmazó vonalkövető autó viselkedésének vizsgálata” című írást közöljük.

ABSZTRAKT Fuzzy logikán alapuló vonalkövető autót valósítottunk meg Arduino Uno és érzékelők felhasználásával. Ezen logikáknak különféle implementációs lehetőségei vannak, célunk megmutatni, hogy az általunk választott különböző t-normák mennyire használhatók a vonalkövetés során, van-e köztük mérhető különbség. A kiválasztott t-normák (standard, algebrai, drasztikus, Łukasiewicz, trigonometrikus, Hamacher szorzat) közül egy (a drasztikus t-norma) kivételével mindegyik megfelelően viselkedett, és megállapítottuk, hogy nagyon egyszerű szabályok alkalmazásával is jól megvalósítható a vonalkövetés.

Kulcsszavak: fuzzy, t-norma, Arduino, vonalkövetés

A szerzőkről:

Könczöl Boldizsár: ELTE, Informatikai Kar, Savaria Műszaki Intézet, Programtervező informatikus BSc, 3. évf.

Gál László: ELTE, Informatikai Kar, Savaria Műszaki Intézet, egyetemi docens

Bevezetés

Napjainkban egyre inkább fontos szerephez jutnak az önvezető autókkal kapcsolatos kutatások. Ezen járműveknek felhasználói beavatkozás nélkül kellene képesnek lenniük az önálló navigációra, vezetésre. Ezek az autók többféle szenzorral és kamerákkal, különböző algoritmusok szerint analizálják a közlekedési helyzeteket és hozzák meg a döntést úgy, hogy rengeteg bemenő jelet, információt számításba vesznek. A hagyományos Boole algebra, a kétértékű logika többek között az ilyen helyzetekre sem igazán megfelelő. Korábban többféle új módszert javasoltak, ami nem kétértékű, hanem többértékű logikát valósít meg. Ilyen a fuzzy logika is, amely pontosan arra hivatott, hogy több bemenő adat alapján adjon vissza egy értéket, vagy ezeket felhasználva küldjön jelet egy irányító kimenetre. Nincsenek benne szigorú (éles) szabályok, hanem egy fokozatosan, egymásba átnyúló szabályokból álló szabályrendszer alapján számolhatunk. A fuzzy logikát eleinte a nyugati országok nem tartották gyakorlati alkalmazásra hasznosnak, a keletiek, különösképpen a japánok viszont annál inkább. Előbb sikeresen szimulálták annak használatát a sendai vasúti közlekedésben, majd ezt meg is valósították 1987-ben [1]. A fuzzy logika mindennapi használata nem újkeletű dolog. Meglepő, de szinte mindenki használta már, amikor például nagyon hideg, hideg, kicsit hideg, kicsit meleg, meleg, nagyon meleg, forró szavakkal illetett bizonyos dolgokat. Egy programozható mikrovezérlő alaplap (Arduino Uno) és a hozzá kapcsolt infravörös érzékelővel ellátott modulok segítségével terveztünk egy modellautót, amely képes a felhasználó által megrajzolt vonalat követni. A modellautó „döntéshozatalához” fuzzy logikát, fuzzy műveleteket (t-norma és t-konorma) és fuzzy irányítót implementáltunk. Ezek használatának egyik érdekessége, hogy különböző t-norma párok alkalmazásával is megvalósíthatóak. A lefuttatott tesztek alapján összehasonlítjuk, hogy mely megoldások alkalmasabbak a felvázolt probléma megoldására.

Fuzzy logika alapok

A fuzzy halmazok alapfogalmaihoz nagy segítséget nyújt, ha a hagyományos halmazelmélet alapvető fogalmait és azok tulajdonságait ismerjük. A halmazelméletek megkülönböztetésére a hagyományos, nem fuzzy halmazokra a crisp halmaz szókapcsolatot használjuk.

  • Tagsági függvény: A fuzzy tagsági függvény egy leképezést valósít meg a vizsgált terület alaphalmazbeli (univerzumbeli) értékei és a [0,1] intervallum között [2]. Jel:
  • Fuzzy halmaz: A tagsági függvény által definiált halmaz.
  • Tagsági érték: A tagsági függvény valamely crisp alaphalmaz minden eleméhez az értékkészletéből egy tagsági értéket rendel.
  • Halmaz tartója: Valamely A fuzzy halmaznak 0-nál nagyobb tagsági értékű pontjainak összessége. Jel: supp(A).
  • A halmaz magja: az alaphalmaz 1 tagsági értékkel rendelkező pontjainak összességét értjük. Jel: core(A).
  • A halmaz magasságán a tagsági függvényének legnagyobb értékét, azaz szuprémuma [3]. Jel:

Műveletek Fuzzy halmazokkal

A hagyományos (crisp) halmazokon értelmezett három alapműveletet (metszet, unió, negáció) a fuzzy halmazokon többféle módon lehet értelmezni. A Zadeh-féle (standard) értelmezés a legelterjedtebb a gyakorlati alkalmazásokban [3].

  • Metszet: (A∩B)(x) = min[A(x),B(x)].
  • Unió: (AUB)(x) = max[A(x),B(x)].
  • Negáció: Ā(x)=1-A(x).

Továbbá, ha x-re fennáll az A(x)= Ā(x) egyenlőség, akkor x az A halmaz egyensúlyi pontja. A metszet és unió műveletek asszociatívak, végtelen számú Fuzzy halmazra kiterjeszthetők. Ezeket használjuk ki a projekt során is, mivel nekünk 3 adatot kell összevetnünk és azokra alkalmazni t-normákat, metszeteket.

Alkalmazott t-normák

A tesztek során az alábbi hat t-normát vizsgáltuk, az áttekinthetőség érdekében az ezekhez tartozó grafikonokat is ábrázoltuk (1-3. ábra).

1. Standard (minimum)

A minimum t-norma, a bemeneti értékek minimumaként értelmezi a metszet műveletet i(µ1; µ2), ahol µ1; µ2 a szenzorok által mért értékek (1(a) ábra). Ekkor a kimenet (ωm):

Három bemenet esetén:

1. ábra: a) Standard (minimum) t-norma grafikonja [4], b) Algebrai t-norma grafikonja

1. ábra: a) Standard (minimum) t-norma grafikonja [4], b) Algebrai t-norma grafikonja

2. Algebrai (szorzat)

Az algebrai t-norma a kalkulált értékek szorzatát adja kimeneti értékként (1(b) ábra):

Három bemenet esetén:

3. Drasztikus

A szabály neve beszédes, ugyanis a kimeneti érték csak akkor nem 0, ha valamelyik bemenet 1-es értékű, ezzel szinte mindenhol 0 a kimenet (2(a) ábra):

Három bemenet esetén:

2. ábra: a) Drasztikus t-norma grafikonja, b) Łukasiewicz t-norma grafikonja

2. ábra: a) Drasztikus t-norma grafikonja, b) Łukasiewicz t-norma grafikonja

4. Łukasiewicz

Jan Łukasiewicz, lengyel matematikus háromértékű logikájának általánosított változata, a fuzzy logikában is használt t-norma (2(b) ábra).

Három bemenet esetén:

5. Trigonometrikus

Trigonometrikus függvényeken alapuló t-norma pár [5] (3(a) ábra):

Három bemenet esetén:

3. ábra: a) A trigonometrikus t-norma grafikonja, b) A Hamacher szorzat t-norma grafikonja

3. ábra: a) A trigonometrikus t-norma grafikonja, b) A Hamacher szorzat t-norma grafikonja

6. Hamacher

A Hamacher paraméteres normapár v=0 paraméteres alapverziója (Hamacher szorzat, 3(b) ábra):

Három bemenet esetén:

Hardver

A robot fő alkotórészei

Arduino Uno (kompatibilis) alaplap Atmel ATmega328P mikrovezérlővel; Arduino Sensor Shield v5.0; L298N típusú H-hidas DC motorvezérlő; 4 db DC motor; HC-05 (ZS-040) bluetooth modul; a vonalkövetéshez 3 db MH-Sensor-Series infra érzékelő modul (LM393-as komparátorral); a tápellátásról 3 db sorba kötött 18650-es akkumulátorcella gondoskodott, melyet egy úgynevezett DC-DC „step-down” modullal egészítettünk ki, így a feszültség mindvégig stabil 9 V marad (ez szükséges volt a konzisztens mérési eredmények érdekében).

Szükséges módosítások

Infra modulok

Az elemek összekötése után soros monitorral ellenőriztük a bemeneti és kimeneti értékeket, mielőtt tényleges tesztekbe kezdtünk volna. Látványos különbségek voltak az infra érzékelő szenzorok értékei között a soros monitoron vizsgálva. Ennek oka, hogy e szenzorok esetén egy erősebb és egy halványabb infravörös fényt kibocsátó modul is volt, melyek megállapítására egy mobiltelefon kameráját használtuk (az emberi szem számára láthatatlan infravörös fény a telefon kameráján keresztül kékes árnyalatú színben jelenik meg.) A szenzorokat és adatlapjaikat áttanulmányozva arra a következtetésre jutottunk, hogy a probléma a felületszerelt (SMD) 150 Ω-os ellenállás cserélésével orvosolható. A későbbi problémák elkerülése végett nemcsak fix méretű ellenállást alkalmaztunk, hanem állíthatót, úgynevezett trimmert. A trimmerek elé mindkét esetben egy-egy 150 Ω-os ellenállást kapcsoltunk, hogy ha az állítható ellenállást 0 végállásba tekerjük, akkor se tegyük tönkre a szenzort, és a 150 Ω legyen a legkisebb beállítható ellenállás.

Tápellátás

A tápellátásért eredetileg 4 darab AA elem/akkumulátor felelt, de ezeknél a sebesség szabályozása elég limitált a 6/5,6 V feszültség miatt. Ez névleges feszültség, mivel amíg elér a motorokhoz addig különböző szabályzókon és stabilizátorokon halad keresztül, amiknek köszönhetően körülbelül 4,5/4 V lesz a ténylegesen használható feszültség. Ezért inkább egy 3 darab 18650-es akkumulátorból álló akkupakkot alkalmaztunk. Ez már 10,1-12,6 V feszültséget ad le a lítiumalapú cellák töltöttségi fázisaitól függően, ami már jelentős sebességszabályozási lehetőségeket jelent. Ugyanakkor az akkupakk merüléséből származó folyamatos feszültségesés itt is befolyásolja a motorok viselkedését és szintén van veszteség, amíg a motorokhoz ér a feszültség. Ennél fogva, hogy a tesztek összehasonlíthatók legyenek, egy DC-DC step-down modullal stabil 9 V feszültséget állítottunk elő.

Eredmények

A teszteket egy fektetett fehér táblára felrajzolt, kereszteződések nélküli pályán hajtottuk végre (4. ábra).

4. ábra: A pálya rajzolata

4. ábra: A pálya rajzolata

A mérések során 3 kört kellett megtennie a modellautónak. A körbejárás idejét mindegyik teszt során „repülőrajtból” indulva mértük stopperrel. Minden esetben legalább 3 mérést végeztünk, ezek mediánjait hasonlítottuk össze. Az eredmények az 1. és 2. táblázatban láthatók.

1. táblázat: 1,92 sebességfaktorral mért idők

1. táblázat: 1,92 sebességfaktorral mért idők

2. táblázat: 2,5 sebességfaktorral mért idők

2. táblázat: 2,5 sebességfaktorral mért idők

Mamdani típusú fuzzy irányítót implementáltunk COG defuzzyfikációs módszert alkalmazva. A fuzzy szabálybázis készítésénél kifejezetten nem törekedtünk optimális szabálybázis megalkotására. Azt szerettük volna tesztelni, hogy egy minimális előismeretekkel rendelkező „szakértő” által gyorsan megkonstruált alap fuzzy szabálybázis működését befolyásolja-e (és mennyiben) a különböző t-normák alkalmazása.

A szabályok az alábbi formában kerültek kialakításra: Ha a bal érzékelő VILÁGOS, a középső érzékelő VILÁGOS és a jobb érzékelő VILÁGOS felületet érzékel, akkor a bal motor ÁLL. Ez röviden: R1: Ha {V,V,V}, akkor ÁLL. Ez alapján a bal motorra vonatkozó szabályok (V=világos és S=sötét):

R1: Ha {V,V,V}, akkor ÁLL.

R2: Ha {V, V, S}, akkor ELŐRE_MAX.

R3: Ha {V, S, S}, akkor ELŐRE.

R4: Ha {V, S, V}, akkor ELŐRE.

R5: Ha {S, S, V}, akkor HÁTRA.

R6: Ha {S, V, V}, akkor HÁTRA_MAX.

R7: Ha {S, S, S}, akkor ELŐRE_LASSÚ.

A jobb motorra vonatkozó szabályok értelemszerűen hasonlóak a bal és jobb érzékelő felcserélésének megfelelően. A V (világos) és S (sötét) trapéz alakú fuzzy tagsági függvényeket (antecedenseket) az alábbi értékekkel határoztuk meg (az érzékelőből 0-1023 tartományban kapunk adatokat, a nagyobb érték a sötétebb, a 4 érték a trapéz 4 töréspontja):

V = {-1, 0, 100, 700},

S = {100, 700, 1024, 1025}.

A konklúziókban használt nyelvi elemekhez tartozó trapéz alakú fuzzy tagsági függvényeket eredetileg a következőképpen határoztuk meg (0-255-ös tartomány, a nagyobb érték gyorsabb motorforgatást eredményez):

ÁLL = {-10, 0, 0, 10},

ELŐRE_MAX = {60, 75, 80, 85},

ELŐRE = {45, 55, 65, 75},

ELŐRE_LASSÚ = {40, 50, 60, 70},

HÁTRA = {-80, -75, -70, -60},

HÁTRA_MAX = {-90, -85, -80, -70}.

A baloldali motorhoz tartozó fuzzy szabálybázis vizuális reprezentációja a 5. ábrán látható.

5. ábra: Baloldali motor szabálybázis

5. ábra: Baloldali motor szabálybázis

A megalkotott szabálybázis konklúzióit (a motorra kerülő feszültség kitöltési tényezője; 0-255) egy adott feszültségre méreteztük. Azonban a 12 Voltra méretezett 55-ös értékkel lassan induló motor, ugyanezzel az 55-ös értékkel 6 Volt esetén el sem indulna. Annak érdekében, hogy az esetlegesen megváltoztatott (pl. 9 V) tápfeszültség esetén ne kelljen új szabálybázist alkotni, a konklúziókban megadott értékeket egy általunk „sebességfaktornak” elnevezett szorzóval állítottuk be a tényleges tápfeszültség esetén alkalmazandó értékekre.

Az első mérések során a sebességfaktort 1,92-os értékre állítottuk be. Ezt a sebességfaktort az előzetes tesztek során állapítottuk meg, amely a 9 Voltos tápfeszültség esetén megfelelő értékekre módosította a konklúziókat. Ez egy olyan érték, amellyel a drasztikus kivételével mindegyik használt norma képes volt végig menni megállás nélkül a pályán. Az eredményeket az 1. táblázat tartalmazza. További méréseket végeztük 2,5-es sebességfaktorral is, hogy lássuk a sebesség ilyen módon való emelése nincs-e lényeges hatással a különböző normák összehasonlítására (2. táblázat).

Következtetések

A mérési eredményekből látható, hogy a drasztikus kivételével mindegyik általunk vizsgált t-norma (standard, algebrai, Łukasiewicz, trigonometrikus, Hamacher szorzat) alkalmas a vonalkövetés megvalósítására. Az első mérések során kialakult egy sorrend, amely alapján gyorsaság szempontjából rangsoroltuk a normákat. A második, nagyobb sebességfaktor melletti mérések nem befolyásolták jelentősen a már kialakult sorrendet. Csupán a standard és a Hamacher t-norma cseréltek helyet (valószínűleg a mérési hibahatáron belüli különbségekkel). Fontos tudni, hogy a végzett mérésekből csak arra következtethetünk, hogy a normák használhatók-e, és ha igen, akkor milyen sebességgel tudnak végig menni a tesztpályán. Azt, hogy mennyire tér le a pályáról, mennyire követi a vonalat, azt jelen körülmények között nem vizsgáltuk. További fontos megjegyzés, hogy az Arduino Uno korlátos teljesítménye miatt a fuzzy számítások lefutása között is időbeli eltérések vannak. A 3. táblázat a különböző normák szerinti 2 · 1024 következtetés számítási idejét tartalmazza.

3. táblázat: 2 · 1024 következtetés időigénye Arduino Uno esetén

3. táblázat: 2 · 1024 következtetés időigénye Arduino Uno esetén

A trigonometrikus norma jól láthatóan nagyobb számítási igényű a tesztek során használt hardveren. Ennek elsődleges oka a lebegőpontos egység hiánya az adott mikrovezérlőnél, valamint a viszonylag alacsony órajel. Egy erősebb központi feldolgozó egységgel ellátott eszközzel (például NodeMCU (ESP32)) a feldolgozás sokkal gyorsabb lenne. Ez esetben a megfelelő normák más eredményeket adhatnak.

Habár a trigonometrikus norma használatával a vonalkövetés a leglassabbnak bizonyult (bár nem igazán jelentős az eltérés), úgy gondoljuk, hogy a gyengébb teljesítmény mögött valószínűleg a hosszabb számítási idő miatti lassabb reakcióidő áll. A ritkább iránykorrekció lehetősége nyilvánvalóan rontja az eredményt. Még ha a következtetési idők arányaiban hasonlóak maradnának is, egy gyorsabb hardveren ennek jelentősége jelentősen csökkenne. A következtetés ideje a ms-os időtartományból a µs-os tartományba mozogna, míg az előbbi számottevően (hátrányosan) befolyásolja a jármű mozgását, az utóbbi nem. A közeljövőben a fenti modullal is szeretnénk a méréseket elvégezni.

Köszönetnyilvánítás

A cikk az EFOP-3.6.1-16-2016-0023 támogatásával készült.

Irodalomjegyzék

[1] Oláh F., A Fuzzy Logika – Alapismeretek, Autótechnika 05, 2009, pp. 42-43

[2] Johanyák Zs.Cs., Kovács Sz., A fuzzy tagsági függvény megválasztásáról, in A GAMF Közleményei, Kecskemét, 2004 (XIX. évfolyam), 1. oldal

[3] Kóczy L.T., Tikk D., Fuzzy rendszerek, Tyoptex Kiadó, 2001.

[4] Gál L., Fuzzy modellek optimalizálása bakteriális típusú algoritmusokkal, doktori disszertáció, Széchenyi István Egyetem, Győr, 2012.

[5] Gál L., Lovassy R., Kóczy L.T., Function Approximation Performance of Fuzzy Neural Networks Based on Frequently Used Fuzzy Operations and a Pair of New Trigonometric Norms, 2010 IEEE World Congress on Computational Intelligence, WCCI-2010, Barcelona, Spain, July 18-23, 2010, pp. 1514-1521 CrossRef

A cikk eredetileg itt jelent meg:

Mérnöki és Informatikai Megoldások

https://doi.org/10.37775/EIS.2020.1.6

ELTE, Informatikai Kar, Savaria Műszaki Intézet

Kiemelt Partnereink