HARALD Teknisk dokumentation Version 1.0 Redaktör: Klas Håkansson Datum: 19 maj 2006 Status Granskad Magnus Larsson 2006-05-18 Godkänd Johan Sjöberg 2006-05-19
Projektidentitet Gruppens e-post: Hemsida: Beställare: Kund: Kursansvarig: Projekthandledare: CDIOharald@yahoogroups.com http://www.cyd.liu.se/users/ henwa769/ Johan Sjöberg, ISY tel: 013-28 28 03, e-post: johans@isy.liu.se Peter Wallman, Saab Aerotech tel: 013-23 16 37, e-post: peter.wallman@aerotechtelub.se Anders Hansson, ISY tel: 013-28 16 81, e-post: hansson@isy.liu.se David Törnqvist, tel: 013-28 18 82, e-post: tornqvist@isy.liu.se Gruppdeltagare Namn Ansvar Telefon E-post Henrik Wassén Projektledare (PL) 0704954258 henwa769@student.liu.se Patrik Johansson Dokumentansvarig (DOK) 0704325330 patjo158@student.liu.se Klas Håkansson Kvalitetsansvarig (KVAL) 0736878809 klaha361@student.liu.se Henning Roos Designansvarig (DES) 0736430416 henka435@student.liu.se Patrik Sköld Testansvarig (TEST) 0707575546 patsk256@student.liu.se Magnus Larsson Kundansvarig (KUND) 0708988234 magla151@student.liu.se Dokumenthistorik Version Datum Utförda förändringar Utförd av Granskad 0.1 2006-02-26 Första utkastet. KH 0.2 2006-05-16 Andra utkastet HW, PJ, KH, HR, PS, ML 0.3 2006-05-17 Treje utkastet (med beställarens ML HR KH ändrings-förslag) 1.0 2006-05-18 Grammatik- och stavfel mm rättade ML PS
Innehåll 1 Inledning 1 1.1 Parter............................................ 1 1.2 Mål............................................. 1 1.3 Användning......................................... 1 1.4 Definitioner......................................... 1 2 GUI 1 2.1 Inledande beskrivning................................... 1 2.2 GUIDE........................................... 2 2.2.1 Objekt........................................ 2 2.2.2 Handtag (Handles)................................. 2 2.3 Implementering....................................... 2 2.3.1 Variabler...................................... 2 2.3.2 Plottar....................................... 3 2.3.3 Länkade figurer................................... 4 2.3.4 Funktioner..................................... 4 3 Nätverk och kommunikation 5 3.1 Klasser av Bluetooth.................................... 5 3.2 Fast nät........................................... 5 3.3 Rörlig nod.......................................... 5 3.3.1 Utvecklingskortet WRAP THOR 2022-1 b2b.................. 5 3.4 RSSI och GRPR...................................... 6 3.4.1 Effektreglering................................... 6 3.4.2 Eventuell lösning med klass 1........................... 6 3.5 Uppkoppling av rörlig nod mot fast nät......................... 7 3.6 Mätningar.......................................... 7 3.6.1 Rundstrålning................................... 7 3.6.2 Brus......................................... 7 3.6.3 Fysiska störningar................................. 7 4 Signalbehandlingssystem 8 4.1 Signalbehandlingssystemets uppbyggnadsprocess.................... 9 4.2 Signaltolkning........................................ 10 4.3 Filter............................................ 11 4.3.1 EKF......................................... 12 4.3.2 Modell........................................ 13 4.3.3 Outlier-hantering.................................. 14 4.3.4 Arbetsordning för filtret.............................. 14 4.4 Utvärdering av filtrets prestanda............................. 16 4.4.1 Utvärdering av fyra sändare............................ 16
Reglerteknisk projektkurs, CDIO HARALD IV 4.4.2 Utvärdering av extra sändare........................... 16 4.4.3 Utvärdering av extra mätsignaler......................... 17 4.5 Signalbehandlingssystemets prestanda med verkliga mätvärden............ 18 5 Liknande projekt 18 5.1 Sammanfattning...................................... 19 6 Resultat av projektet 19 6.1 Vidareutveckling...................................... 19 A Appix: Matlab-kod 22
1 Inledning Projektet syftar till att bestämma position för en rörlig nod i ett lokalt, öppet område, inom- eller utomhus. Beräkning av position ska ske med hjälp av mottagen signalstyrka från sändarna, trianguleringsberäkningar, sensorfusion samt filtrering. Detta kommer att göras med hjälp av Matlab. Ett grafiskt användargränssnitt ska tas fram där användaren ska kunna få information om den rörliga noden. 1.1 Parter Beställare är Johan Sjöberg, avdelningen för reglerteknik vid LiTH och de som ska konstruera och producera produkten är projektgrupp HARALD i kursen TSRT71, Reglerteknisk projektkurs vt -06. Kund är Saab Aerotech med kontaktperson Peter Wallman. 1.2 Mål Projektets mål är att erhålla en robust och noggrann position. Då signalstyrkan kan variera beroe på om föremål är placerade mellan sändare och mottagare, ska systemet ha viss robusthet mot detta. 1.3 Användning Utvärdering av positionering med hjälp av Bluetooth åt Saab Aerotech. 1.4 Definitioner GUI = Graphical User Interface USB = Universal Serial Bus HCI = Host Controller Interface LMP = Link Manager Protocol GRPR = Golden Received Power Range, signalstyrkeintervall för Bluetooth kommunikation på 20 ± 6 db definierat mellan två tröskelvärden RSSI = Received Signal Strength Indication är den uppmätta skillnaden mellan den mottagna signalstyrkan och gränserna för GRPR EKF = Exted Kalman Filter Firmware = Hårdvaruspecifik mjukvara 2 GUI I detta kapitel återfinns den tekniska dokumentation som rör det grafiska användargränssnittet. 2.1 Inledande beskrivning Det grafiska användargränssnittet visualiserar den rörliga nodens skattade färdväg och, om så önskas, osäkerhetsellipser på en plotteryta. Gränssnittet har knappar som hanterar förskjutning och skala på plotterytan. Från menyer kan sändarnätets positioner, initialtillstånden och modellen som används av signalbehandlingssystemet ändras. Från menyerna kan även Bluetooth-nätet kopplas upp och en trajektoria som simuleringen ska baseras på kan laddas. När väl en simulering eller positionering har genomförts kan de skattade tillstånden sparas till en fil.
Reglerteknisk projektkurs, CDIO HARALD 2 2.2 GUIDE Användargränssnittet utformades med hjälp av Matlab-programmet GUIDE (Graphical User Interface Design Environment). GUIDE använder sig av Matlab-figurer (FIG) i vilka diverse komponenter kan placeras ut, till exempel tryckknappar, statiska textsträngar och plotterytor. Till varje figur skapas en m-fil för att koppla ihop de olika komponenterna med Matlab-funktioner så att GUI:t beter sig som önskat. 2.2.1 Objekt Alla komponenter, inklusive figuren där komponenterna placeras ut, är fördefinierade objekt med olika egenskaper som man kan ändra på genom ett dubbelklick på respektive komponent i GUIDE. Dessa egenskaper går även att titta och ändra på i m-filen genom funktionen get och set. Detta är en vital del i utformandet av GUI:t. 2.2.2 Handtag (Handles) För att hantera de olika komponenterna (objekten) så används ett system av handtag kopplade till komponenterna. Handtagen är en form av pekare till objekten. GUIDE sköter hanteringen av handtag i huvudsak med hjälp av en struct, i GUIDE kallat handles, beståe av alla handtag som är associerade med figuren. Denna struct skickas med som inparameter i varje funktion för att alla komponenter ska kunna nås från vilken funktion som helst. Matlab använder även ett hierarkiskt system mellan objekten där huvudfiguren är förälder (parent) och alla komponenter man har placerat ut i figuren är barn (children) till figuren. 2.3 Implementering I detta avsnitt beskrivs implementeringen för projektet HARALDs GUI. Figur 1 visar en översikt av det grafiska gränssnittet. 2.3.1 Variabler Problemet med globala variabler i GUI:t löstes genom att utöka handles med dessa variabler. Variablerna initierades i öppningsfunktionen (OpeningFcn) som GUIDE automatisk genererat i m- filen. När handles väl är ändrad måste man uppdatera handles för annars försvinner all ändrad information när funktionen avslutas. Detta gör man med fördefinierade funktionen guidata. Nedan följer ett exempel där uservariabel är en variabel som ska kunna nås i hela GUI:t: function GUIOpeningFcn(hObject, eventdata, handles, varargin) handles.uservariabel = exempel ; guidata(hobject, handles); Observera att det ast är när innehållet i handles förändrats som det behöver uppdateras och inte när man ändrar i egenskaperna till ett objekt som har ett handtag i handles. Vi har upptäckt att det kan uppstå ett problem kopplat till uppdateringen när pause-funktionen används i en funktion. pause stannar temporärt exekveringen och låter andra funktioner exekvera, för att sedan återuppta exekveringen efter pause-funktionen. Detta kan medföra att variabler inte uppdateras korrekt. Problemet löstes genom att avaktivera alla knappar och menyer som skulle kunna förstöra när en funktion med pausefunktionen är igång, se exemplet nedan. function ButtonStartPositionPush(hObject, eventdata, handles) set(handles.buttonstartsimulate, Enable, off ) for n = 1:looplength
Reglerteknisk projektkurs, CDIO HARALD 3 Figur 1: GUI... pause(0.1)... set(handles.buttonstartsimulate, Enable, on ) 2.3.2 Plottar Anropas en plotterfunktion i en funktion i GUI:t så kommer den att ritas ut i en speciell komponent kallad axis i Matlab. Alla plotterfunktioner blir objekt och länkas som barn (children) till den aktuella axis-komponenten. För att enklare hantera de olika plotterfunktionsobjekten sparades de som särskilda variabler i handles, se exemplet nedan. function plotfcn(hobject, eventdata, handles, varargin) handles.plot = plot(x,y); guidata(hobject, handles); Finns det flera axis-komponenter måste rätt axis väljas för att undvika att plotten ritas ut i fel. Detta gör man med hjälp av funktionen axes där ett handtag till det korrekta axis-objektet skickas med som inparameter, se exemplet nedan. Observera skillnaden mellan axis och axes. axes(handles.plotdemo); plot(x,y);
Reglerteknisk projektkurs, CDIO HARALD 4 2.3.3 Länkade figurer GUI:t i projektet HARALD använder sig av ett huvudfönster där majoriteten av funktionaliteten finns samt popup-fönster där diverse initialvärden och inställningar kan hanteras. Dessa fönster anropas med eventuella inparametrar direkt i m-filen som är associerad till huvudfönstret. Nedan följer ett exempel där figuren GUIdemo öppnas genom ett menyval i huvudfiguren med en inparameter och en utparameter: X = GUIdemo(handles.X); Matlab har även några fördefinierade popup-fönster som är mycket användbara. För felmeddelanden användes kommandot errordlg. När det gäller att hantera filer användes uigetfile och uiputfile vilka öppnar ett dialogfönster som kan användas för att öppna och spara filer. Nedan följer ett exempel där uigetfile anropas och den valda filen hanteras: [filename, pathname] = uigetfile( *.dem, Alla Demo-filer (*.dem), Öppna Demo ); file = fullfile(pathname,filename); if exist(file) == 2 data = load(file, -mat ); fields = fieldnames(data); 2.3.4 Funktioner De olika funktionerna som är kopplade till GUI:t finns beskrivna i appix. Där framgår det vilka funktioner som är kopplade till vilka komponenter samt fullständig kod till dessa. I figur 2 visas ett funktionträd över hur GUI:t anropar yttre funktioner. Figur 2: Funktionsträd
Reglerteknisk projektkurs, CDIO HARALD 5 3 Nätverk och kommunikation I detta kapitel beskrivs det nätverk av Bluetooth-moduler som utför effektmätningarna. Nätverket består av en rörlig nod samt ett fast nät. De kommunicerar med varandra via Bluetooth protokollet. Det fasta nätet består av fyra Bluetooth-moduler och den rörliga noden av en. 3.1 Klasser av Bluetooth Enligt Bluetooth-standarden har sändare av klass 1 en räckvidd på upp till 100 m medan sändare av klass 2 bara har en räckvidd på upp till 30 m. Det finns även en klass 3 av Bluetooth som har en räckvidd upp till 10 m. Det kan noteras att den största räckvidd vi uppmätt i kontakt mellan sändare av klass 2 och den rörliga noden har varit 18 m, och detta ast med en enhet. Klass 1 måste enligt Bluetooth-specificationen reglera sin uteffekt, medan ingen utav klass 2 eller 3 har något sådant krav på sig. 3.2 Fast nät Det fasta nätet består av fyra stycken Bluetooth-USB-moduler av klass 2 från tillverkaren Billionton. Alla dessa moduler är kopplade till varsin dator och på så sätt förses de med spänning. Samtliga moduler agerar slavar i det piconät, ett nät med en master som kommunicerar med flera (upp till sju) slavar. Mastern i detta projekt är den rörliga nodens Bluetooth-modul. Slavarnas uppgift är att sända signaler, som den rörliga noden sedan mäter signalstyrkan av. Mer specifik information om hur Bluetooth-modulerna interagerar kan läsas i avsnitt 3.5. Bluetooth-modulerna i det fasta nätet agerar helt passivt när uppkoppling mot den rörliga noden väl skett. 3.3 Rörlig nod Den rörliga noden utgörs av en Bluetooth-modul placerad på en radiostyrd bil med dator. Bluetoothmodulen kommer att agera master i det piconät som den bildar tillsammans med det fasta nätets moduler. Via Bluetooth kommunicerar den rörliga noden med de moduler som ingår i det fasta nätet och mäter löpande deras signalstyrkan för att sedan vidarebefordra dem till signalbehandlingssystemet. Denna Bluetooth-modul utgörs av ett utvecklingskort av modell WRAP THOR. När Bluetooth-modulen startas sker ett uppkopplingsförfarande till var och en av de fasta noderna med hjälp av funktionen ConnectBT som GUI:t kallar på. Med funktionen ReadRSSI hämtar den rörliga noden in RSSI-värden löpande från det fasta nätets moduler. 3.3.1 Utvecklingskortet WRAP THOR 2022-1 b2b Utvecklingskortet som inhandlades var alltså BlueGigas WRAP THOR Evaluation Kit 2022-1 b2b. Detta är en Bluetooth-modul av klass 1 och leveras med mjukvara och hårdvara (i form av en parallellkabel) för uppdatering av firmware och diverse inställningar. Detta utvecklingskort leveraras med en firware (iwrap) som innehåller ett ASCII-interface som gör det möjligt att med ASCII-tecken kommunicera via serieporten. Detta ASCII-interface kommunicerar i sin tur med det enligt Bluetoothspecifikationen definierade Host Controller Interface (HCI). HCI kommunicerar i sin tur med Link Manager Protocol (LMP) som är det protokoll som beräknar RSSI-värdet ur den mottagna effekten. iwrap 2.0.2 var den första versionen av firmware som var installerad. Denna version av firmware hade ingen möjlighet att kunna läsa RSSI-värden och kunde ast koppla upp mot två fjärrenheter. Eftersom projektets designspecifikation bygger både på RSSI-värden och uppkopplingar mot sju fjärrenheter förkastades idén att använda denna och fokus lades på att kunna kommunicera direkt via HCI. Då detta inte är ett ASCII-interface utan alla kommandon i Bluetoothspecifikationen är skrivna i hexadecimal kod satte vi igång med att koda de kommandon vi behövde hexadecimalt. För
Reglerteknisk projektkurs, CDIO HARALD 6 att lyckas med detta tog vi kontakt med och hade ett möte med tillverkaren av utvecklingskortet som istället rekommerade deras nya firmware, iwrap 2.1.0. iwrap 2.1.0 har en funktion som läser RSSI-värden från fjärrenheter och detta var anledningen till att denna valdes. Begränsningen för iwrap 2.1.0 ligger i att man kan som mest koppla upp utvecklingskortet mot fyra fjärrenheter samtidigt samt att avläsning av ett RSSI-värde tar ca 0.2 sekund, dvs ca 0.8 sekund för att läsa av värden från fyra fjärrenheter. Att det tar 0.8 sekund att avläsa RSSI-värdet från de fyra modulerna är en prestandasänkande omständighet och det vore önskvärt att ha möjligheten att avläsa dessa värden fortare. 3.4 RSSI och GRPR I Bluetooth-standarden ingår inte något direkt sätt att mäta signalstyrkan från den enheten man kommunicerar med. Istället används kommandot HCI Read RSSI, där mastern mäter en slavs signalstyrka i förhållande till GRPR, Golden Recived Power Range. Det RSSI-värde, Recived Signal Strength Indication, som genereras är positivt om den mottagna signalstyrkan är starkare än övre tröskelvärde för GRPR, noll om det ligger innanför dess gränser samt negativt för värden som ligger under det undre tröskelvärdet. För att får en säkrare uppskattning skulle man även kunna använda kommandot HCI Read Link Quality, där ett parametervärde på LQ, Link Quality, fås. Kommunikationen mellan den rörliga noden och det fasta nätet är uppdelade i slots där mastern följer ett förutbestämt schema. När den rörliga noden mätt RSSI-värdet från en sändare i det fasta nätet, skickas data vidare till signalbehandlingssystemet samtidigt som nästa mätning görs. Ett problem som varit viktigt att undvika är den mättade zonen som uppkommer för signaleffekter innanför GRPR området. I den första versionen mjukvara till vår WRAP THOR fanns det en möjlighet att minska ner GRPR intervallet till noll. I den senaste mjukvaruversionen, som vi sedan valde att använda, fanns inte längre detta register med. I vissa av våra mätningar har vi sett en mättad zon som sträckt sig upp till 3 m innan RSSI-värdena börjar avta med avsee på avståndet. I de banor som uppmatts har vi därför sett till så att den rörliga noden befunnit sig på ett större avstånd ifrån sändare än så. 3.4.1 Effektreglering Eftersom den ambition vi hade var att skapa en matematisk modell av RSSI-värdets avtagande med avståndet av typen, r = f(rssi). Det inhandlades också Bluetooth-moduler av sju olika fabrikat för att utvärdera vilken av dessa som hade de mest gynnsamma RSSI-värdena. Alla de som inhandlades första gången var av klass 1 och konsekvensen av detta var att alla dessa, enligt Bluetooth-specifikationen, reglerar sin uteffekt med en tidskonstant i storlekordningen 10-tals sekunder. Denna reglering gör det omöjligt att skapa en rimlig entydig funktion från RSSI-värde till avstånd då olika avstånd ger samma RSSI-värden. Detta gjorde att vi valde att gå över till klass 2 enheter som alltså inte har effektreglering och det fabrikat som inhandlades var Billionton. 3.4.2 Eventuell lösning med klass 1 Om man av någon anledning, till exempel storleken på det område man vill positionera inom, ändå vill använda sig av klass 1, finns det flera tänkbara lösningar. En variant är att gå in och ställa om inställningarna hos sändarna så att de bara kan sända ut en effekt. För detta krävs tillgång till ett utvecklingskort. I WRAP THOR 2022-1 b2b görs detta enkelt genom att, med hjälp av mjukvaran PSTool, gå in i registret PSKEY LC POWER TABLE. Detta innehåller en tabell med alla de olika effekter som modulen kan variera mellan att sända ut. Genom att radera alla effektalternativ utom ett tar man bort effektregleringen. En nackdel med denna metod är att man riskerar att bryta mot Bluetooth-standarden. En annan möjlighet är att utnyttja att sändarna har olika signalstyrkor för olika kommunikationslänkar och att möjlighet finns att läsa av den egna sändarens utsända effekt, Tx, för en viss uppkoppling. På detta sätt skulle varje sändare kunna läsa av sin utsända effektstyrka och sedan skicka det avlästa värdet till den rörliga noden.
Reglerteknisk projektkurs, CDIO HARALD 7 Då dessa förslag kräver tillgång till utvecklingskort för alla enheter i nätet rekommeras att annan hårdvara används. Ett problem med den senaste versionen av iwrap (2.1.0) är att den inte kan koppla upp en länk mot ett likadant kort, se [1] Known Issues. 3.5 Uppkoppling av rörlig nod mot fast nät Drivrutinerna till de Bluetooth-moduler av klass 2 som använts i det fasta nätet har haft problem med hantering av flera moduler på samma dator. Vi har stött på problem vid uppkoppling mellan det fasta nätet och den rörliga noden i de fall då flera noder i det fasta nätet varit kopplade till en och samma dator. I detta fall blir man tvungen att koppla in en Bluetooth-modul i taget i USB-huben, ge den rörliga nodens modul godkännande att upprätta anslutning genom att slå in en förutbestämd kod (i vårt fall 1234) och sedan göra om denna procedur för varje enhet. Detta blir väldigt omständigt så vi rekommerar att varje nod i det fasta nätet är kopplad till en egen dator. Anledningen till problemen är att varje enhet har en lista med sina BT Pairs. Detta är en lista som varje Bluetooth-modul har över vilka andra moduler den tidigare varit uppkopplad mot. Har de en gång varit uppkopplade mot varandra och utbytt rätt kod kan man enkelt ange att dessa alltid ska acceptera varandras förfrågan om uppkoppling. Känner inte enheterna till varandra sedan tidigare är användaren av den anropade Bluetooth-modulen tvungen att slå in den tidigare beskrivna koden. Det verkar som att drivrutinen till de Bluetooth-modulerna i det fasta nätet raderar BT Pair listan då en ny modul kopplas in i samma dator. 3.6 Mätningar Varje modul antas ha sin egen antennkaraktäristik så därför har alla mätningar gjorts i fyra upplagor, en för varje modul. Alla mätningar har gjort i ett tennistält som ligger i anslutning till Saabs lokaler i Malmslätt. Vid mätningar av RSSI-värden från våra klass 2 sändare har vi stött på tre typer av problem: ojämn rundstrålning, brus och fysiska störningar. 3.6.1 Rundstrålning Vid mätningar med konstant radie från en sändare men vid olika vinklar kan man notera att RSSIvärdena varierar kraftigt beroe på vilken vinkel vi har i förhållande till sändaren. Dock verkar det bli något jämnare värden om sändaren får hänga helt fritt i luften. Mätningarna gick till så att man vid en fix radie mätte strålningen vid approximativt var 10:e grad antingen i 180 eller 360 grader runt modulen. Varje punkt mättes med 50 sampel och sedan gjordes en medelvärdesbildning över dessa. Resultatet är tydligt och effekten verkar stråla ut i lober från modulen, se Figur 3 och 4. RSSI-värdet varierar kraftigt beroe på vilken vinkel mottagaren har i förhållande till sändaren, se figurer 3-4. Detta stärker teorin att en bra modell över hur RSSI-värdet varierar beroe på avstånd är svår att konstruera. 3.6.2 Brus För att undersöka hur stabila de uppmätta RSSI-värdena är har vi delat in en rak sträcka i 15 punkter. Mellan varje punkt är det ett avstånd på 1 m. I varje punkt har det gjorts 100 samplingar. I Figur 5, 6 och 7 redovisas plottar över hur variationen ser ut. Att värdena varierar så kraftig är ett stort problem då det lägsta RSSI-värdet vi uppmätt längs vår 15 m långa sträcka är -15 och det högsta är 0. Vad detta brus beror på vet vi inte. Möjliga bruskällor är att de Bluetooth-moduler vi använt varken kan sända ut effekt eller avläsa av RSSI-värden med bättre noggrannhet än så här. Fysiska störningar kan också vara en bidragande orsak. 3.6.3 Fysiska störningar Mätningarna som redovisas i Figur 8, 9 och 10 är medelvärdesbildade över 100 sampel. Runt avståndet 10 m sker en kraftig förstärkning av signalstyrka. En möjlig orsak till detta kan vara
Reglerteknisk projektkurs, CDIO HARALD 8 5 Sändare 1 vid R=5.5 m. Fritt hängande. 6 7 RSSI värde 8 9 10 11 12 0 20 40 60 80 100 120 140 160 180 grader Figur 3: Plot av rundstrålingen med fritt hängande modul 6 Sändare 1 vid R=5.5 m. Fäst vid ställning. 7 8 9 RSSI värde 10 11 12 13 14 15 0 20 40 60 80 100 120 140 160 180 grader Figur 4: Plot av rundstrålingen med modul fäst i ställning formen på tennistältet där mätningarna har gjorts. Taket i tennistältet är kupolformat och det är möjligt att vi hamnar i någon form av fokus här från den reflekterade signaleffekten. 4 Signalbehandlingssystem I detta kapitel beskrivs signalbehandlingssystemet. Systemet består huvudsakligen av två delar; signaltolkning, vilken är den del som behandlar informationen från Bluetooth-sändarna, och filtret som använder informationen från signaltolkningen tillsammans med användarens kommandon för att positionera den rörliga noden. Signalbehandlingssystemet är implementerat i Matlab.
Reglerteknisk projektkurs, CDIO HARALD 9 4 Sändare 1 vid R= 10m under 100 sampel 4.5 5 5.5 RSSI värde 6 6.5 7 7.5 8 0 10 20 30 40 50 60 Sampel Figur 5: Brus vid mätningar av signalstyrka 9 Sändare 4 vid R= 7m under 100 sampel 9.5 10 10.5 RSSI värde 11 11.5 12 12.5 13 0 10 20 30 40 50 60 Sampel Figur 6: Brus vid mätningar av signalstyrka 4.1 Signalbehandlingssystemets uppbyggnadsprocess Till en början utvecklades ett enkelt system där samtliga mätvärden var tillgängliga. Positionsestimaten bestämdes genom trianguleringsteknik liknande det som används i GPS. Positionen användes sedan av ett EKF som estimerade banan som den rörliga positioneringsobjektet rört sig i. I nästa steg ersattes trianguleringen med en modell där brus styrde positioneringen. Detta för att få med dynamiken i modellen för det fysiska system där positioneringen skulle göras. Signalbehandlingssystemet anpassades för att kunna behandla RSSI-värden som inkom löpande och en outlier-hantering lades till. Då det i ett sent skede av projektet visat sig att mätning av RSSI-värde tog längre tid än väntat gjordes filtret om en sista gång. Positionsestimeringen görs nu varje gång en mätning från en Bluetooth-sändare skett istället för när samtliga sändare i nätet har gjort mätningar. För att utvärdera systemets prestanda samt utreda om ytterligare mätsignaler skulle förbättra den gjordes Monte Carlo-simuleringar.
Reglerteknisk projektkurs, CDIO HARALD 10 9 Sändare 4 vid R= 12m under 100 sampel 9.5 10 10.5 11 RSSI värde 11.5 12 12.5 13 13.5 14 0 10 20 30 40 50 60 Sampel Figur 7: Brus vid mätningar av signalstyrka 0 RSSI = f(r) Sändare 1 med störning 2 4 RSSI värde 6 8 10 12 14 0 5 10 15 Avstånd [m] Figur 8: Effektförstärknings peak vid avstånd 10 m 4.2 Signaltolkning I denna del beskrivs hur informationen som fås från Bluetooth-nätet behandlas för att översättas till avstånd som filtret vidare kan ta emot och behandla. För att finna sambandet mellan uppmätt RSSI-värde avståndet mellan sändare och nod gjordes 50 mätningar med en meters mellanrum för varje sändare. RSSI-värdena medelvärdesbildades för varje avstånd och en kurva plottades för varje sändare. Resultatet presenteras i figur 12. Med hjälp av Matlab-kommandot polyfit anpassades ett polynom till respektive kurva som vidare kunde användas för att översätta uppmätta RSSI-värden till avstånd för respektive Bluetoothsändare.
Reglerteknisk projektkurs, CDIO HARALD 11 0 RSSI = f(r) Sändare 2 med störning 2 4 RSSI värde 6 8 10 12 14 0 5 10 15 Avstånd [m] Figur 9: Effektförstärknings peak vid avstånd 10 m 0 RSSI = f(r) Sändare 3 med störning 2 4 RSSI värde 6 8 10 12 0 5 10 15 Avstånd [m] Figur 10: Effektförstärknings peak vid avstånd 10 m 4.3 Filter I denna del beskrivs systemets filter. Filtret är den del som behandlar informationen från signaltolkningen och användaren av systemet för att positionera den rörliga noden. Filtret består av ett Exted Kalman filter med outlier-hantering. Valet av Kalmanfilter grundar sig på att flera mätsignaler ska vägas samman, samt att vi modellerar systemets brus som normalfördelat. Då processen är olinjär har Kalmanfiltret vidare utvecklats till ett Exted Kalman filter, vilken kan hantera olinjäriteter. Slutligen har även en outlier-hantering lagts till så att mycket opålitliga mätsignaler får liten inverkan på positionsestimeringen. För mer information om Kalmanfilter, EKF och outliers i allmänhet, se [5].
Reglerteknisk projektkurs, CDIO HARALD 12 0 RSSI = f(r) Sändare 4 samma sträcka som de övriga dagen efter 2 4 RSSI värde 6 8 10 12 14 0 5 10 15 Avstånd [m] Figur 11: Effektförstärknings peaken vid avstånd 10 m har nästan försvunnit dagen efter 4.3.1 EKF Nedan beskrivs först kortfattat hur den allmänna algoritmen för Kalmanfilter och EKF vilka är hämtade ur [5]. Vidare beskrivs hur EKF:t i detta system är konstruerat. Kalmanfilter allmänt Den linjära tillståndsmodellen kan skrivas på formen x t+1 = A t x t + B t w t, y t = C t x t + e t, Cov(w t ) = Q t Cov(e t ) = R t där x t är tillståndsvektorn, y t den observerade mätsignalen, w t och e t är brus på x t respektive y t vid tidpunkten t. Q t och R t är brusens kovariansmatriser. För denna typ av modell kan man använda Kalmanfiltret för att prediktera kommande tillstånd. Prediktionsberäkningarna ges av ˆx t+1 t = A tˆx t t P t+1 t = A t P t t A T t + B t Q t B T t Innovationen och Kalmanförstärkningen beräknas genom Estimeringsberäkningen ges slutligen av ǫ t = y t C tˆx t t 1 S t = C t P t t 1 C T t + R t K t = P t t 1 C T t S 1 t ˆx t t = ˆx t t 1 + K t ǫ t P t t = P t t 1 + K t C t P t t 1 Kalmanfilter för olinjärt system I fallet för denna applikation är dock systemet olinjärt. En olinjär tillståndsmodell utan styrsignal kan skrivas enligt ẋ t = f(x t ) + w t y kt = h(x kt ) + e t
Reglerteknisk projektkurs, CDIO HARALD 13 0 Sändare 1 0 Sändare 2 2 2 4 4 Mottagen signalstyrka [RSSI] 6 8 10 Mottagen signalstyrka [RSSI] 6 8 10 12 12 14 14 16 0 2 4 6 8 10 12 14 16 18 Avstånd [m] 16 0 2 4 6 8 10 12 14 16 18 Avstånd [m] 0 Sändare 3 0 Sändare 4 2 2 4 4 Mottagen signalstyrka [RSSI] 6 8 10 Mottagen signalstyrka [RSSI] 6 8 10 12 12 14 14 16 0 2 4 6 8 10 12 14 16 18 Avstånd [m] 16 0 2 4 6 8 10 12 14 16 18 Avstånd [m] Figur 12: Uppmätt RSSI-värde relativt avstånd mellan sändare och nod för varje sändare där f och h är olinjära funktioner och T är samplingstiden. Även för denna modell går det att använda Kalmanfiltrering, men systemet måste då linjäriseras och diskretiseras punktvis. Detta vidareutvecklade Kalamanfilter, som hanterar olinjära system, kallas Exted Kalman Filter. Den diskreta mätuppdateringen blir ȳ kt H kt x kt + e kt där H kt ges av H kt = dh(x) dx x=ˆxkt kt T Den metod som använts för tidsuppdateringen i detta filter kallas disketiserad linjärisation. Den ges enligt följande [ ] T ˆx t+t t = ˆx t t + e f (ˆx t t )τ dτ f(ˆx t t ) P t+t t = e f (ˆx t t )T P t t e f (ˆx t t ) T T + Q där Q är det diskreta processbruset som beräknas med 0 Q = 1 T T 0 T e f (ˆx t t )τ dτbqb T e f (ˆx t t )τ dτ 0 4.3.2 Modell I detta stycke beskrivs hur detta projekts system modellerats. För exakt programkod för filtret, se appix sid 60.
Reglerteknisk projektkurs, CDIO HARALD 14 Tillståndsvektorn, given i det globala koordinatsystemet xy, som valts för systemet är x y x = v β ω där v är hastigheten i den rörliga nodens färdriktning. β är vinkeln mellan x-axeln i det globala koordinatsystemet och v, ω är vinkelhastigheten i xy-planet. Tillståndsekvationen kan skrivas som ẋ = v cos(β) ẏ = v sin(β) v = w 1 β = ω ω = w 2 där w 1 och w 2 är det processbrus som driver modellen, och de antas vara gaussiska brus. Mät- och processbrusets kovariansmatriser, R respektive Q, väljes av användaren. Dock rekommeras diagonalmatriser där R-matrisen har 10 gånger större diagonalelement än Q-matrisen. Anledningen till storleksskillnaden är att mätbuset, vilket på grund av otillförlitliga mätvärden, antas vara mycket större än processbruset. 4.3.3 Outlier-hantering Det finns ingen generell algoritm som gäller för hantering av outliers. Denna hantering måste anpassas efter den aktuella applikationen. Till detta system har en relativt enkel outlier-hantering valts då den vid simulering visat sig ge goda resultat. Outlier-hanteringen är aktiv under innovationsberäkningarna i EFK:t. Efter att beräkning av skillnaden mellan uppskattningar och prediktioner gjorts jämförs detta värde med en tröskelnivå. Tröskelnivån är satt till 5 meter då det i simuleringar visat sig vara en lämplig gräns för att outlier-hanteringen ska reagera då en sändare på något sätt kraftigt skärmas av. Om tröskelnivån överskrids från någon Bluetooth-sändare kommer mätsignalen från den sändaren att anses vara opålitlig. Detta görs genom att multiplicera sändarens kovariansmatrisvärde för mätbrus med 100. Effekten blir att sändarens mätning får mycket liten inverkan på positionsestimeringen. Denna multiplicering återställs efter att tillståndsestimering gjorts så att sändaren, vid nästa mätning, inte straffas för tidigare mätfel. 4.3.4 Arbetsordning för filtret I detta stycke beskrivs arbetsordningen för hela filtret: 1. Approximationsberäkningar: Utför approximationsberäkningar kring den aktuella skattningen, T 0 e f (ˆx t t )τ dτ = T + f (ˆx t t ) T 2 f(ˆx t t ) = Aˆx t t 2 + f (ˆx t t ) 2 T 3 6
Reglerteknisk projektkurs, CDIO HARALD 15 där T är samplingstiden och f (ˆx t t ) = 0 0 cos(β) v sin(β) 0 0 0 sin(β) v cos(β) 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 T cos(β) Tv sin(β) 1 2 T 2 v sin(β) 1 0 1 T sin(β) Tv cos(β) e f (ˆx t t )T 2 = T 2 v cos(β) 0 0 1 0 0 0 0 0 1 T 0 0 0 0 1 0 0 cos(β) 0 0 0 0 sin(β) 0 0 A = 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 2. Tillståndsprediktion: Prediktering av kommande tillstånd samt beräkning av kovariansen hos prediktionsfelet. Dessa används vid tillståndsestimering. [ ] T ˆx t+t t = ˆx t t + e f (ˆx t t )τ dτ f(ˆx t t ) 0 P t+t t = e f (ˆx t t )T P t t e f (ˆx t t ) T T + Q där ˆx t t är förra mätningens tillståndsestimering, och Q är det diskreta processbruset som beräknas med där B = Q = 1 T T 0 T e f (ˆx t t )τ dτbqb T e f (ˆx t t )τ dτ 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 och Q är processbrusets kovariansmatris som väljs av användaren. 3. Innovation 1: Beräkning av skillnaden mellan uppskattningar och prediktioner, ǫ. ǫ = ŷ t h där ŷ t är föra mätningens beräknade avstånd från respektive Bluetooth-sändare. De predikterade radierna som beräknats med x- och y-värdena från tillståndsprediktionen är h. 4. Outlier-hantering: Om skillnaderna mellan uppskattningarna och prediktionerna i steget innan blir för stort ökas osäkerheten i den mätningen (ökat R-värde). Efter outlier-hanteringen ändras R till R t. Detta värde återställs efter tillståndsestimeringen.
Reglerteknisk projektkurs, CDIO HARALD 16 5. Innovation 2: Innovationskovariansen S kan nu beräknas efter att outlier-hanteringen har verkat. S = HP t+t t H + R t 6. Kalmanförstärkning: Här sker beräkning av K, Kalmanförstärkningen, med hjälp av innovationen beräknad ovan. K = P t+t t H S 1 7. Tillståndsestimering: De nya estimerade tillstånden samt dess felkovarians beräknas och skickas till GUI:t. ˆx t t = ˆx t+t t + Kǫ P t t = P t+t t KHP t+t t 4.4 Utvärdering av filtrets prestanda För att bedöma hur väl filtret klarar av positioneringsuppgiften har Monte Carlo-simuleringar gjorts. Antalet mätsignaler som är tillgängliga för det verkliga systemet begränsas till fyra då det är det högsta antalet Bluetooth-sändare som sändarnas mjukvara klarar av att hantera samtidigt. Det har även gjorts en utvärdering av filtrets prestanda med sju sändare samt extra mätsignaler som fart- och vinkelhastighetsgivare. 4.4.1 Utvärdering av fyra sändare En utvärdering av filtert görs för att se hur stor standardavvik för bruset som kan tolereras för att positioneringen ska få en standardavvik på runt 0.5 meter. Utvärderingen görs genom att Monte Carlo-simulera en bestämd trajektoria och med pålagt brus se hur mycket som kan läggas på för att uppnå önskad standardavvik på positioneringen. Värden från simuleringarna anges i tabell 1. Antal simuleringar R-matris Brus Standardavvik 10000 1000 1.2 0.5066 10000 1000 1.2 0.3313 10000 1000 1.3 0.5216 10000 1000 1.3 0.4815 10000 1000 1.3 0.4308 10000 1000 1.4 0.7338 10000 1000 1.4 0.3737 10000 1000 1.4 0.5371 Tabell 1: Monte Carlo-simuleringar med fyra sändare. Resultatet av simuleringarna ger att man med standardavvikn 1.3 meter på bruset får ett medelvärde av standardavvik i positionsbestämningen på 0.48 meter. 4.4.2 Utvärdering av extra sändare Då mjukvaran för Bluetooth-enheterna begränsade oss till att enbart använda fyra sändare fick vi i uppgift att utvärdera positioneringens förbättring med sju sändare i ett så kallat pico-nät. Tre ytterligare sändare placerades ut i koordinatsystemet och R-matrisen utökades från en 4x4- matris till en 7x7-matris. Bruset från de tillagda sändarna antogs ha samma standardavvik som de tidigare sändarna.
Reglerteknisk projektkurs, CDIO HARALD 17 För att kunna utvärdera positioneringens förbättring gjordes Monte Carlo-simuleringar med samma brus som gav standardavvik runt 0.5 meter i fallet med fyra sändare. Storleken på bruset sätts med en standardavvik på 1.3 meter. Resultatet av simuleringarna visas i tabell 2. Antal simuleringar R-matris Brus Standardavvik 10000 1000 1.5 0.6274 10000 1000 1.5 0.4609 10000 1000 1.5 0.4581 10000 1000 1.5 0.6274 10000 1000 1.6 0.4435 10000 1000 1.6 0.5714 10000 1000 1.7 0.6862 10000 1000 1.7 0.5891 Tabell 2: Monte Carlo-simuleringar med sju sändare. Resultatet av simuleringarna visar tydligt att man får en bättre positionering om man kunnat använda sju sändare istället för ast fyra. Standardavvikn blir 0.39 meter med sju sändare, vilket ska jämföras med 0.48 meter med fyra sändare. 4.4.3 Utvärdering av extra mätsignaler Vi fick i uppgift att utvärdera huruvida ytterligare mätsignaler kan förbättra prestandan av systemet, det vill säga minska estimeringsfelets standardavvik i jämför med ast fyra Bluetoothsändare. Detta gjorde vi genom att lägga till dels en fartgivare och dels en vinkelhastighetsgivare i simuleringar. Till varje anrop av filtret skickades dels aktuell radie ifrån aktuell sändare och dels aktuell fart respektive vinkelhastighet beroe på vilken mätgivare som är inkopplad för det aktuella fallet. Att ytterligare en mätsignal kopplas in innebär att R-matrisen måste utökas till en 5x5-matris, istället för en 4x4-matris som i fallet med enbart fyra sändare. Då antogs att den tillagda mätningen var mer tillförlitlig än de fyra Bluetooth-sändarna litade vi mer på den genom att sätta ett mindre R-värde för just den givaren. För att kunna göra en utvärdering av hur en fartgivare eller en vinkelhastighetsgivare skulle förbättra prestandan väljer vi att göra Monte Carlo-simuleringar och sedan beräkna standardavvikn för estimeringsfelet. Det vi utgår ifrån är en trajektoria där vi sedan beräknar en radie från varje sändare. Till den uträknade radien adderar vi vitt gaussiskt brus med olika standardavvik. Vi adderar även vitt gaussiskt brus med standardavvik 0.02 till fartgivaren och 0.5 10 3 till vinkelhastighetsgivaren. Q-matrisen i simuleringarna är en enhetsmatris av rang 5 medan vi varierar R-matrisen för att få så bra värden som möjligt. Resultatet av simuleringarna med fartgivare visas i tabell 3 och med vinkelhastighetsgivare i tabell 4. Fartgivarens respektive vinkelhastighetsgivarens kovariansmatris redovisas inom parentes. Antal simuleringar R-matris Brus Standardavvik 10000 500 (50) 1.3 0.3519 10000 500 (50) 1.3 0.3869 10000 500 (50) 1.3 0.3853 10000 500 (50) 1.3 0.5674 10000 500 (50) 1.3 0.3601 10000 500 (50) 1.3 0.4917 Tabell 3: Monte Carlo-simuleringar med extra fartgivare. Resultatet av simuleringarna visar tydligt att ytterligare mätsignaler skulle förbättra prestandan, då standardavvikn med fartgivare är 0.42 meter och med vinkelhastighetsgivare 0.32 meter vilket kan jämföras med 0.48 meter utan. Brusets standardavvik för de fyra Bluetooth-sändarna är 1.3 meter.
Reglerteknisk projektkurs, CDIO HARALD 18 Antal simuleringar R-matris Brus Standardavvik 10000 500 (1) 1.3 0.4947 10000 500 (1) 1.3 0.3439 10000 500 (10) 1.3 0.3873 10000 500 (10) 1.3 0.4044 10000 500 (10) 1.3 0.3426 10000 500 (10) 1.6 0.5069 Tabell 4: Monte Carlo-simuleringar med extra vinkelhastighetsgivare. 4.5 Signalbehandlingssystemets prestanda med verkliga mätvärden För att testa hur signalbehandlingssystemet reagerar på verkliga mätvärden från Bluetooth-enheten har mätvärden samlats in från fyra sändare då den rörliga noden flyttas i två olika förbestämda banor i ett rum med måtten 12 x 8.2 meter. Mätningarna pågick i 100 sekunder och ett sampel togs varje 0.2 sekunder. Resultatet från bana 1 presenteras i figur 13. 9 8 7 6 Sändarpositioner Estimerad färdväg Verklig färdväg 5 y 4 3 2 1 0 1 0 2 4 6 8 10 12 x Figur 13: Verkliga värden Som synes uppträder främst ett fenomen som inte kan noterats i simuleringsstadiet. De verkliga mätvärdena från Bluetooth-enheten ger bilden av att den rörliga noden rör sig till mitten av rummet och sedan håller sig där. Detta problem ligger tyvärr i RSSI-värdenas natur och kan inte kompenseras av något filter. 5 Liknande projekt Flertalet forskargrupper och examensarbetaren behandlar uppgiften att positionera med hjälp av Bluetooth. Förutsättningarna och målsättningarna skiljer sig dock mellan varje grupp, och ingen har gett sig på något som är helt identiskt med detta projekts uppgift. Nedan följer en kort sammanställning av resultaten från dessa försök. [6]: Positionerade en stillaståe nod med hjälp av triangulering av 5 sändare inomhus i x- och y-led. Använde sig inte av uppmätta RSSI-värden då dessa bedömdes vara alltför opålitliga. Istället mättes tiden det tog att koppla upp noden mot sändarna. Det tog cirka 20 sekunder att samla in
Reglerteknisk projektkurs, CDIO HARALD 19 mätvärden från samtliga sändare, och maximala felmarginalen var 10 meter. [8]: Bestämde med hjälp av RSSI-värden från 3 sändare och triangulering en stillaståe nod i rum som varierade från 15 till 40 m 2 i storlek. Felmarginalen var som bäst 1 till 3 meter, och som sämst 6 meter. [3]: En rörlig nod i ett 46 m 2 stort rum positionerades med uppmätta RSSI-värden från 3 sändare, triangulering och minsta kvadrat-metoden. Uppnådde en felmarginal på 2.08 meter med begränsningen att noden högst fick befinna sig 8 meter från sändarna. [4]: Gjorde 10 mätningar i 10 olika punkter för en nod med 4 respektive 12 sändare i rum på 80 m 2 respektive 400 m 2. Felmarginalen påstods bli 1.88 meter. Förutom att det var RSSI-värdena som mättes framgår det inte vilken metod/metoder som användes för att beräkna positionerna. [2]: Mätte på en rörlig nod i ett rum på 15 x 15 meter. Med 3 sändare och trianguleringsberäkningar blev felmarginalen 3 meter. [7]: Positionerade stillaståe nod i ett rum på 12 x 8 x 3 meter med 3 sändare. Använde RSSIvärden och EKF. Beräknade positionen i x-, y- och z-led trots att mätningarna gjordes i totalt 50 positioner i rummet, men bara på två olika z-positioner. Gjorde beräkningarna off-line och tog i efterhand fram optimalt värde på P 0. Medelvärdesfelet blev 3.76 meter trots att 5000 mätningar/sändare gjordes i varje mätpunkt. 5.1 Sammanfattning De flesta nöjer sig med att positionera en fast nod med hjälp av liknande trianguleringsteknik som används av GPS. Att använda RSSI-värdet som mätsignal är det absolut vanligaste, men i [6] mäts istället nodens uppkopplingstid mot sändarna. Dock är deras resulterande positionsestimeringarna sämst av dem som nämns ovan. Det är svårt att jämföra resultaten från försöken ovan med detta projekt. En gemensam slutsats som de flesta kommer fram till är att Bluetooth fungerar väl för lokalisering, men är mindre bra lämpad för exakt positionering. 6 Resultat av projektet Resultatet av detta projekt är att ett positioneringssystem med hjälp av Bluetooth-sändare har tagits fram. Systemets prestanda begränsas av det faktum att Bluetooth-standarden inte togs fram för positioneringssyfte. Slutsatsen är, i likhet med andra som gett sig på en liknade uppgift, att noggrann positionering är mycket svårt att uppnå. Den felmarginal vi hade som utgångspunkt, 0.1 meter, är således inte realistisk att nå med de mätvärden som ges av Bluetooth-sändarna vi använde. 6.1 Vidareutveckling Intressant vore att kunna avläsa de register ur vilka Link Manager Protocol (LMP) beräknar de värden som sedan presenteras i iwrap som RSSI. Då skulle man förmodligen få en skala av värden som är långt mycket finare än de som avläses med iwrap 2.1.0, som ligger mellan 0 och -15. Diskussion med tillverkaren BlueGiga har förts och de berättar att möjligheten finns att göra så, men det kräver en annan firmware som är specialskriven för detta ändamål. Förmodligen är det dock så att rundstrålningsproblematiken, de fysiska störningarna och bruset i form av hårdvarans begränsning fortfarande skulle finnas kvar och då behövas undersökas ännu mer.
Reglerteknisk projektkurs, CDIO HARALD 20 Outlier-hanteringen i filtret kan förfinas ytterligare. Beroe på hur trovärdig en mätning anses kan mätbrusets kovariansvärde ökas eller minskas i mindre steg än vad den nuvarande outlierhanteringen gör. Detta kräver dock en trimningsprocess med omfattande simuleringar från uppmätta signalvärden som följer förbestämda trajektorier. Utvärderingarna som gjordes visar att flera sändare eller extra mätsignaler förbättrar positioneringsskattningarna. Att lägga till fler Bluetooth-sändare kräver inga större ingrepp i systemet då det från början var tänkt att fungera med sju sändare. Dock har, som tidigare nämnt, mjukvaran till de sändare vi använder begränsningen att högst fyra sändare kan hanteras samtidigt. Byte av sändare skulle förmodligen lösa detta problem.
Reglerteknisk projektkurs, CDIO HARALD 21 Referenser [1] BlueGiga. iwrap 2.1.0 User Guide, 2006. [2] J Castaño, M Svensson, and M Ekström. Local positioning for wireles sensors based on bluetooth. 2004. [3] S Feldmann, K Kyamakya, A Zapater, and Z Lue. An indoor bluetooth-based positioning system: consept, implementation and experimental evaluation. 2005. [4] F Forno, G Malnati, and G Portelli. Design ad implementation of a bluetooth ad hoc network for indoor positioning. 2005. [5] F Gustafsson. Adaptive Filtering and Change Detection. John Wiley and Sons Ltd, 2000. [6] J Hallberg and M Nilsson. Positioning with, bluetooth, irda and rdfi. Master s thesis, Luleå University of Technology, 2002. [7] A Kotanen, M Hännikäinen, H Leppäkoski, and T.D Hämäläinen. Experiments om local positioning with bluetooth. 2003. [8] M Rodriguez, J.P Pece, and C.J Escudero. In-building location sing bluetooth. 2005.
Reglerteknisk projektkurs, CDIO HARALD 22 A Appix: Matlab-kod Funktionsnamn Funktionsbeskrivning Sida GUI Övergripande funktion associerad med Main GUIfönstret 24 scale2num Hjälpfunktion som omvandlar en skala till ett tal 24 scalecoord Hjälpfunktion som avrundar koordinater så att de passar 25 till skalan updateplot Hjälpfunktion som uppdaterar plotterytan till rätt position 25 och skala gui2struct Hjälpfunktion som omvandlar GUI:ts lagrade variabler 25 till en struct plot ellipses Hjälpfunktion som plottar osäkerhetsellipserna 26 GUI OpeningFcn Används för att initiera diverse variabler 26 GUI OutputFcn Anropas när utsignal från huvudfunktionen behövs 28 MenuItemClose Select Menyval som stänger Main GUI-fönstret 28 MenuItemPrint Select Menyval som skriver ut plotterytan till en skrivare 28 MenuItemConnect Select Menyval som ansluter Bluetooth-uppkopplingen 29 MenuItemDisconnect Select Menyval som avbryter Bluetooth-uppkopplingen 29 MenuItemChangeStates Select Menyval som öppnar ett fönster där initialtillstånden 30 och den initiala P-matrisen kan ändras MenuItemOpenTraj Select Menyval som laddar en trajektoria 30 MenuItemSaveStates Select Menyval som sparar tillstånden efter simulering eller positionering 31 MenuItemSaveAsStates Select Se funktionen MenuItemSaveStates Select 31 MenueItemChangeNet Select Menyval som öppnar ett fönster där positioner för 32 sändarnätet kan ändras MenuItemOpenNet Select Menyval som laddar ett sändarnät (.hnt) 32 MenuItemSaveNet Select Menyval som sparar ett sändarnät (.hnt) 33 MenuItemSaveAsNet Select Se funktionen MenuItemSaveNet Select 34 MenuItemChangeModel Select Menyval som öppnar ett fönster där Q- och R-matrisrna 34 kan ändras MenuItemOpenModel Select Menyval som laddar Q- och R-matriser 35 MenuItemSaveModel Select Menyval som sparar Q- och R-matriser 36 MenuItemSaveAsModel Select Se funktionen MenuItemSaveModel Select 36 ButtonZoomOut Push Knapp som zoomar ut plotterytan 36 ButtonZoomIn Push Knapp som zoomar in plotterytan 37 ButtonUp Push Knapp som förskjuter plotterytan uppåt 37 ButtonDown Push Knapp som förskjuter plotterytan neråt 38 ButtonLeft Push Knapp som förskjuter plotterytan åt vänster 39 ButtonRight Push Knapp som förskjuter plotterytan åt höger 38 ButtonCenter Push Knapp som grundinställningen för plotterytan 39 ButtonEllipseInc Push Knapp som ökar antalet osäkrhetsellipser 39 ButtonEllipseDec Push Knapp som minskar antalet osäkrhetsellipser 40 ButtonStartSimulate Push Knapp som startar en simulering och ritar ut resultatet 40 på plotterytan ButtonStopSimulate Push Knapp som stannar simuleringen 42 ButtonStartPosition Push Knapp som startar en positionering och ritar ut resultatet 42 på plotterytan ButtonStopPosition Push Knapp som stannar positioneringen 44 CheckEllipse Push Kryssruta som hanterar utritningen av 44 osäkerhetsellipserna
Reglerteknisk projektkurs, CDIO HARALD 23 Funktionsnamn Funktionsbeskrivning Sida GUIinit Övergripande funktion associerad med Init GUI-fönstret 46 GUIinit OpeningFcn Används för att initiera diverse variabler 46 GUIinit OutputFcn Anropas när utsignal från huvudfunktionen behövs 47 ButtonChange Push Knapp som konfirmerar ändringarna som gjorts i Init 47 GUI-fönstret ButtonCancel Push Knapp som sänger Init GUI-fönstret 48 InitCloseRequestFcn Anropas precis innan Init GUI-fönstret stängs 48 GUImodel Övergripande funktion associerad med Model GUIfönstret 50 GUImodel OpeningFcn Används för att initiera diverse variabler 50 GUImodel OutputFcn Anropas när utsignal från huvudfunktionen behövs 51 ButtonChange Push Knapp som konfirmerar ändringarna som gjorts i Model 51 GUI-fönstret ButtonCancel Push Knapp som sänger Model GUI-fönstret 52 ModelCloseRequestFcn Anropas precis innan Model GUI-fönstret stängs 52 GUInet Övergripande funktion associerad med Net GUI-fönstret 46 GUInet OpeningFcn Används för att initiera diverse variabler och funktioner 54 GUInet OutputFcn Anropas när utsignal från huvudfunktionen behövs 55 ButtonChange Push Knapp som konfirmerar ändringarna som gjorts i Net 55 GUI-fönstret ButtonCancel Push Knapp som sänger Net GUI-fönstret 56 NetCloseRequestFcn Anropas precis innan Net GUI-fönstret stängs 57 FilterSimulation Funktion som utför en simulering av en positionering 58 med hjälp av funtionen Ekf Ekf Exted Kalman Filter 60 StartUp Funktion som kopplar upp Bluetooth-nätet 64 ShutDown Funktion som kopplar ner Bluetooth-nätet 65 ReadRSSI Funktion som avläser RSSI-värdet från en given sändare 66
Reglerteknisk projektkurs, CDIO HARALD 24 function varargout = GUI(varargin) % Huvud-fönstret i HARALD-projektets användarmiljö % Senast modifierad av Henning Roos % Last Modified by GUIDE v2.5 09-May-2006 13:52:21 % Begin initialization code - DO NOT EDIT gui_singleton = 1; gui_state = struct( gui_name, mfilename,... gui_singleton, gui_singleton,... gui_openingfcn, @GUI_OpeningFcn,... gui_outputfcn, @GUI_OutputFcn,... gui_layoutfcn, [],... gui_callback, []); if nargin & isstr(varargin{1}) gui_state.gui_callback = str2func(varargin{1}); if nargout [varargout{1:nargout}] = gui_mainfcn(gui_state, varargin{:}); gui_mainfcn(gui_state, varargin{:}); % End initialization code - DO NOT EDIT % -------HJÄLP-FUNKTIONER--------------------------------------------- function num = scale2num(scale) % SCALE2NUM Förvandlar en nominell skalfaktor till dess numeriska värde. % Syntax: NUM=SCALE2NUM(SCALE) % där SCALE är ett heltal mellan 1 och 10. % (Mycket specifik användning) switch scale case 1 num = 1; case 2 num = 2; case 3 num = 5; case 4 num = 10; case 5 num = 20; case 6 num = 50; case 7 num = 100; case 8 num = 200; case 9