Efter att ha skapat en algoritm som hittar den kortaste vägen till målet så vill jag utveckla vidare inom just den adaptiva grenen inom robotik. Jag jobbar inte inom robotik eller har någonsin gjort detta. Däremot driver jag fritidsprojekt när jag får tid.
Inom robotiken så är det väldigt viktigt med planering. Att en robot(i detta fall kan det radiostyrd bil) som går från A till B. För att en robot skall utföra denna uppgift så behöver den:
- 1. Referens (vägen med andra ord)
- 2. Reglermodul för att följa referensen (regulator med andra ord)
Men mitt intresseområde är inte predictive control. Mitt intresseområde är adaptive control. Så därför har jag valt att skapa en algoritm för estimering utav modeller. Jag använder Recursive Least Squares. Det är en populär algoritm inom adaptiv reglering. Dels för att den är enkel, dels för att den tar lite plats och dels för att den spottar ut ett kalmanfilter också. Men Recursive Least Squares är bara för system som hanterar en insignal och en utsignal, t.ex. värmereglering, nivåreglering eller positionsreglering. Alltså saker som PID-regulatorer håller på med. Enda fördelen att kombinera Recursive Least Squares med Model Predictive Control är att man får en adaptiv eller självinställande regulator. Alltså maskinellt lärande med andra ord.
Så jag har testat rätt många regressionsmetoder och kommit fram till att Eigensystem Realization Algorithm är den bästa för just adaptiv reglering. Den är enkel att använda och den går att automatisera. När man håller på med regression så är det väldigt mycket forskning och prövning. Det finns ingen som säger vad som är rätt eller fel. Mycket att försöka sig fram. Men Eigensystem Realization Algorithm är så pass enkel och prickar alltid rätt vid första försöket. Nackdelen är att den har inte samma precision som de stora avancerade algoritmerna så som Multivariable Output Error State Space (MOESP) och Numerical algorithms for Subspace State Space System Identification (N4SID). Jag har själv använt mig utav dessa och dom kräver väldigt mycket data av speciell typ. Helst våldsam data som har hög volatilitet. Medan Eigensystem Realization Algorithm klarar sig på ett par 10-tal punkter.
Så jag har hittat en mycket pedagogisk manual om hur man tillämpar Eigensystem Realization Algorithm och dessutom hur man kan generera ett kalman filter från det. Så kombinerar man Eigensystem Realization Algorithm + Model Predictive Control så går den använda för radiostyrda bilar då en bil har x,y position som den åker i. Alltså blir det en flervariablig modell som skall estimeras.
Jag skickar en länk till manualen. Ja, denna manual är enormt snyggt skrivet och allt är skrivet på ren praktik. Inget tjafs om teori eller massa annat. Har ni svårt att förstå den så kan jag förklara.
http://people.duke.edu/~hpgavin/SystemI ... zation.pdf
Jag kan börja med några förklaringar.
1. Markovparameter är alltså impulssvar. Impulssvar är något som Eigensystem Realization Algorithm vill ha. Det betyder alltså en insignal in bara. Impulssvar har ett speciellt utseende. Typ som en hammare som slår en gång, hårt, på en utstickande svag bräda.
2. Hankelmatriser är bara ett sätt att strukturera upp datan.
3. Observability och Controllability är själva impulssvaret uttryckt i hankelmatriser. Här används det något som heter Singular Value Decomposition (SVD) för hankelmatriserna. SVD används för att lösa \(Ax=b\) system när [img]A[/img] är ej kvadratisk, alltså den går ej att lösa med \(x = {A}^{-1}b\). Ett annat ord för att lösa sådana system kallas för pseudo-inverse eller Moore-Penrose-inverse. Åter igen, ingen magi. Bara enkel matrislösning.
4. Data Correlation är ett sätt att filtrera bort brus från impulssvaret. Inget krav.
5. Observers är alltså kalmanfiltret. Om ni undrar hur ett kalmanfilter ser ut så är det bara en matris. I detta fall kallas kalmanfiltret för \(G\). Här är det enkelt och tydligt skrivet att använder man vissa typer utav signaler så får man en stokastisk modell från Eigensystem Realization Algorithm. Därmed så kan man lösa ut matriserna \(A,B\) om man vet matriserna \(C,D,G\), vilket man får.
6. Ni minns väll att jag talade om att Eigensystem Realization Algorithm använder sig utav impulssvar och inte vanligt in- och utsignalsvar? Observer kalmanfilter är ett sätt att räkna ut impussvaret från enbart in- och utsignalerna.
För att skapa denna algoritm så krävs det alltså att man bygger upp algoritmen Singular Value Decomposition i rent C.
Att skapa en SVD algoritm är det svåraste arbetet. Sedan är det bara att hålla på med hankelmatriserna och få dom korrekt skrivna.
Det som jag kan uppfatta som ett problem här är att hålla ned minnet. Att ha ca 200 mätpunkter kan gå upp till över 800 kB i RAM. Men jag använde då ett rätt tungt C bibliotek som jag ej har skrivit. Nu gäller det att få ned storleken och återanvända matriserna.
http://www.cs.utexas.edu/~inderjit/publ ... LA_SVD.pdf
Noter att Eigensystem Realization Algorithm retunerar en linjär modell av orsaken att linjära modeller går att verifiera om dem är stabila. Olinjära modeller har inte denna modellsäkerhet. Därav så sitter reglertekniken "fortfarande fast" i linjära modeller. Men kompletterar man med Eigensystem Realization Algorithm och Model Predictive Control så har man i praktiken en olinjär regulator för robotik.
Jag bifogar två filer så att dom är kvar här på forumet. Då ställer jag frågan? Vem vill hoppa på ett sådant projekt med mig? Ni kan alltid lära er något om just maskinellt lärande. Jag tänkte att det ska bli mycket diskussioner om hur man kan spara minnet samt praktiska aspekter.